调试是每个开发人员都想避免的任务,但不幸的是,它是软件开发中不可避免的罪恶。到了卷起袖子开始调试的时候,每个开发人员都应该记住7个技巧。

技巧 1——采取可控的步骤

当一个bug爬进嵌入式软件时,开发人员的第一反应是跳入代码并开始修改。它们通常是随意的,几乎是随机的,而不是以一种受控制和受指导的方式做出改变。嵌入式软件开发不是蛮荒的西部。即使是最简单的bug的解决也应该包括检查可用的数据,评估它,假设最可能的原因,更新然后测试。如果改变不能解决问题,新的数据应该出现,然后帮助过程重复。

技巧2——增加断言密度

ASSERT宏是一个很好的工具,开发人员可以用它来验证代码中的假设。令人惊讶的是,许多开发人员没有花时间将它们放入他们的代码中。代码库的断言密度通常是漫长而痛苦的调试会话之间的差异,或者是失败假设发生时的陷阱。ASSERT可以帮助开发人员立即发现错误或假设失败。

技巧3——使用数据记录器

关于软件如何运行的信息是嵌入式软件工程师调试时最有用的工具。拥有诸如任务何时开始和完成、它们是否被抢占等性能信息以及其他细节可能是至关重要的。使用日志是开发人员深入了解软件的一个很好的方式。日志可以像RAM缓冲区、写入外部闪存的文件一样简单,也可以像传输到远程位置的编码数据一样复杂。在任何情况下,日志文件都是收集调试和系统分析信息的好方法。

技巧4——使用高级断点

开发人员熟悉使用标准断点,只需双击一行代码的左边就可以打开标准断点。许多IDE具有更高级的断点功能,但很少被利用。高级断点的一个例子是设置一条线,当变量达到某个值时断开。使用高级断点可以大大减少调试时间,并使难以捕捉的错误更容易发现。

技巧5——再次查看数据手册

调试外设可能特别困难。现代微控制器可以有10个寄存器来设置一个外设。外设设置并不总是显而易见或有据可查的。更糟糕的是,正确设置的细节通常不在单个数据手册中。只看一个是不够的。当硬件运行不正常时,请反复查看数据表。

技巧6——监控调用堆栈

开发人员有时会质疑他们最初是如何找到特定的代码行的。IDE包含一个调用堆栈窗口,可以准确地显示这些信息。调用堆栈显示了调用了哪些函数以及调用的顺序,揭示了对跟踪bug非常有用的信息。

结论

不管你花很多时间调试还是很少时间,事实是作为嵌入式开发人员这是不可能避免的。使用本文中的技巧有助于使调试变得更容易接受。