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