【发布时间】:2023-06-23 23:20:01
【问题描述】:
我正在尝试为 C 文件(Yocto 项目)生成覆盖范围。
所以,我在大多数可用模块的 Makefile.am 中添加了 gcov 标志 "-g -O0 --coverage"。
它在编译每个带有覆盖标志的模块期间生成“.gcno”文件。
我已经从所有这些模块中生成了一个图像并将其加载到测试设备中并运行了功能测试用例。
我可以使用正在运行测试设备的进程中的字符串命令找到“gcda”文件的路径。
所以我使用 gdb 模式在将进程 ID 附加到 gdb 后使用“__gcov_flush”命令刷新覆盖范围。
这会引发错误“当前上下文中没有符号 __gcov_flush”。请建议我可能导致此错误的原因。
【问题讨论】:
-
不是生成文件问题。删除了不正确的标签。
-
请查看您的构建日志(如果您没有看到任何命令,请启用详细模式),然后添加一个示例编译器命令行,即来自您期望
--coverage的模块使用,以及问题文本的链接器命令。为了使覆盖工作,您需要在编译和链接命令行中启用它。 -
感谢 Stefan Becker 的回复。实际上我正在构建一个 yocto 图像,因此使用 bitbake 来编译代码。所以没有make命令行来添加调试模式。编译成功地为一个模块生成了 .gcno。在运行模块的功能测试用例时,不会生成 .gcda 文件。
-
您是否尝试覆盖 Linux 内核或驱动程序模块?
-
是的,Ameya。我们正在尝试覆盖 Yocto 模块(内核和驱动程序)
标签: c instrumentation gcov