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