tre*_*nki 8 c trace unit-testing mocking
我在嵌入式系统上有很大的C代码代码库,遗憾的是没有自动测试用例/套件.这使得重构和重构代码成为一项危险的任务.
手动编写测试用例非常耗时,因此我认为应该可以自动执行此过程的至少某些部分,例如通过跟踪所有函数调用和记录输入和输出值.然后,我可以在测试用例中使用这些值(这对所有人都不起作用,但至少对于某些函数而言).也可能基于收集的数据创建模拟函数.
拥有这样的测试用例会使重构变得不那么危险.
有没有解决方案已经可以做到这一点?如果我必须自己编写代码,最简单的方法是什么?
我想ctags用于查找函数定义,并将它们包装在记录参数值的函数中.另一种可能性可能是gcc编译器插件.
有一个 gcc 选项“-finstrument-functions”,您可以使用该机制为每个函数的进入/退出定义自己的回调。
谷歌一下,你可以找到很多很好的例子。
[编辑] 使用此 gcc 选项的回调,您只能跟踪函数的进入/退出,而不能跟踪参数。但通过一些技巧,您也可以跟踪参数。(遍历当前帧指针以获取堆栈上的参数)。
这里有一篇文章讲一下实现的思路:
http://linuxgazette.net/151/melinte.html
此外,取决于您的嵌入式系统,在 Linux 上您可以尝试类似 ltrace 的方法来显示参数(如 strace 方式)。在 Linux 上,有许多工具可以在用户空间或内核空间中执行函数跟踪工作,ftrace/ust/ltrace/utrace/strace/systemtap/。无论如何,如果您不添加任何硬调试代码,则不可能以正确的方式显示参数。如果您接受添加入口/出口调试信息的努力,那么事情就会容易得多。
这里还有一个类似的帖子讨论这个问题。