我正在尝试生成C文件的覆盖范围(Yocto项目)。
因此,我在大多数可用模块的Makefile.am中添加了gcov标志“-g -O0 --coverage” 。
在每个带有覆盖标志的模块的编译过程中,它都会生成“ .gcno”文件。
我已经从所有这些模块生成了映像,并将其加载到测试设备中并运行了功能测试用例。
我能够使用字符串命令从运行测试设备的进程中找到“ gcda”文件的路径。
因此,在将进程ID附加到gdb之后,我已经使用gdb模式通过“ __gcov_flush”命令来刷新覆盖率。
这将引发错误“当前上下文中没有符号__gcov_flush”。请建议我这个错误的可能原因。
答案 0 :(得分:0)
根据评论,不能直接使用Coverage Compiler标志构建Linux内核并假设获得有意义的coverage指标。
代码覆盖率指标实际上要求某些文件系统可用于写入运行时覆盖率数据(即* .gcda文件)。
如果您想为Linux内核启用代码覆盖率here,则是有关如何使用GCOV虚拟文件系统来启用支持以收集覆盖率指标的文档。
此外,假设您要针对不同的体系结构进行交叉编译,那么在执行后捕获* .gcno文件之后,可能必须使用cross-gcov工具收集覆盖率指标。