首页 > 解决方案 > 在检测映像上运行功能测试用例时不生成 gcda 文件

问题描述

我正在尝试生成 C 文件(Yocto 项目)的覆盖范围。

因此,我在大多数可用模块的 Makefile.am 中添加了 gcov 标志“-g -O0 --coverage”

它在编译每个带有覆盖标志的模块期间生成“.gcno”文件。

我已经从所有这些模块生成了一个图像并将其加载到测试设备中并运行了功能测试用例。

我可以使用正在运行测试设备的进程中的字符串命令找到“gcda”文件的路径。

因此,在将进程 ID 附加到 gdb 后,我使用 gdb 模式使用“__gcov_flush”命令刷新覆盖率。

这会引发错误“当前上下文中没有符号 __gcov_flush”。请建议我可能导致此错误的原因。

标签: cinstrumentationgcov

解决方案


根据评论,不可能直接使用 Coverage Compiler 标志构建 Linux 内核并假设获得有意义的覆盖率指标。

代码覆盖率指标实际上需要一些文件系统可用于写入运行时覆盖率数据(即 *.gcda 文件)。

如果你想为 Linux 内核启用代码覆盖率,这里有一个文档,介绍如何使用 GCOV 虚拟文件系统来启用支持以收集覆盖率指标。

此外,假设您正在为不同的架构进行交叉编译,那么在执行后捕获 *.gcno 文件之后,您可能必须使用 cross-gcov 工具来收集覆盖率指标。


推荐阅读