我希望在 C 中进行代码覆盖。当我在不同的平台/编译器上工作时,我不能依赖像 gcov 这样的工具。
基本上,我正在寻找一种将代码覆盖率纳入我(自己的实现)单元测试框架的策略。
我希望在 C 中进行代码覆盖。当我在不同的平台/编译器上工作时,我不能依赖像 gcov 这样的工具。
基本上,我正在寻找一种将代码覆盖率纳入我(自己的实现)单元测试框架的策略。
您是否有这么多特定于平台的代码,想要测量每个平台上的单元测试覆盖率?我的意思是,除非您有很多特定于平台的代码,否则您的单元测试覆盖率在所有目标上都应该是相似的,因此您可能不需要在您拥有的每个目标上测量它。将特定于平台的代码移动到特定于平台的模块可能会很有趣,这样公共代码的覆盖率就不会被特定代码降低。
您是在查看分支覆盖率还是功能覆盖率?如果是后者,您可以只使用 gcc 来检测您的代码,以便每个函数将其名称或地址输出到文件并编写脚本来聚合来自所有平台的结果。
抱歉只回答问题... HTH
如果您更新您的问题以描述您正在使用的平台和编译器,这将非常有帮助。
我使用的一种策略是在可以跟踪所有指令的模拟器上运行系统。然后可以使用此指令跟踪来计算代码覆盖率。
在 UNIX 上,您还可以使用 ptrace() 运行进程以单步执行应用程序,从而捕获执行的指令。
如果您只想要函数调用跟踪,您可以对过程链接表进行一些令人讨厌的黑客攻击以跳转到一些专门的日志记录代码,但这可能很疯狂。
同样,需要有关执行环境和详细程度的更多详细信息才能给出有用的答案。
一个关于代码覆盖工具的页面说,Brian Marick 称为 GCT 的东西通过源到源转换实现代码覆盖,因此您可以转换 C 代码,然后使用特定于平台的编译器构建它。我没有跟进细节。
您可能会考虑构建一组测试用例作为应用程序本身的一部分,或者作为替代构建目标。然后应用程序可以测试自己,并获得访问所有“内部”的额外好处,而不是尝试使用黑盒技术测试所有分支。