C函数调用和参数跟踪-测试用例和模拟生成



我在嵌入式系统上有一个相当旧的C代码的大型代码库,不幸的是没有自动化的测试用例/套件。这使得重构和重构代码成为一项危险的任务。

手动编写测试用例非常耗时,所以我认为应该可以自动化这个过程的至少一部分,例如通过跟踪所有函数调用以及记录输入和输出值。然后我可以在测试用例中使用这些值(这不适用于所有函数,但至少适用于某些函数)。根据收集到的数据创建mock函数也是可能的。

拥有这样的测试用例将降低重构的危险性。

有什么解决方案可以做到这一点吗?如果我必须自己编写代码,那么让它发挥作用的最简单方法是什么?

我考虑过使用ctags来查找函数定义,并将它们封装在记录参数值的函数中。另一种可能性可能是gcc编译器插件。

有一个gcc选项"-finstrument functions",您可以使用该机制为每个函数的入口/出口定义自己的回调。

谷歌一下,你可以找到很多好的例子。

[Edit]通过此gcc选项的回调,您只能跟踪函数的进入/退出,而不能跟踪params。但通过一些技巧,你也可以跟踪params。(遍历当前帧指针以获取堆栈上的参数)。

下面是一篇关于实现思想的文章:

http://linuxgazette.net/151/melinte.html

此外,根据您的嵌入式系统,在linux上,您可以尝试ltrace之类的东西来显示params(比如strace方式)。在linux上,有许多工具可以在用户空间或内核空间中进行功能跟踪,比如ftrace/ust/ltrace/utrace/strace/systemtap/。无论如何,如果不添加任何硬调试代码,就不可能以正确的方式显示参数。如果您接受添加入口/出口调试信息的努力,那么它会容易得多。

这里还有一个关于这个问题的类似话题。

跟踪Linux 中本地函数调用的工具

最新更新