c - 在检测映像上运行功能测试用例时不生成 gcda 文件
问题描述
我正在尝试生成 C 文件(Yocto 项目)的覆盖范围。
因此,我在大多数可用模块的 Makefile.am 中添加了 gcov 标志“-g -O0 --coverage”。
它在编译每个带有覆盖标志的模块期间生成“.gcno”文件。
我已经从所有这些模块生成了一个图像并将其加载到测试设备中并运行了功能测试用例。
我可以使用正在运行测试设备的进程中的字符串命令找到“gcda”文件的路径。
因此,在将进程 ID 附加到 gdb 后,我使用 gdb 模式使用“__gcov_flush”命令刷新覆盖率。
这会引发错误“当前上下文中没有符号 __gcov_flush”。请建议我可能导致此错误的原因。
解决方案
根据评论,不可能直接使用 Coverage Compiler 标志构建 Linux 内核并假设获得有意义的覆盖率指标。
代码覆盖率指标实际上需要一些文件系统可用于写入运行时覆盖率数据(即 *.gcda 文件)。
如果你想为 Linux 内核启用代码覆盖率,这里有一个文档,介绍如何使用 GCOV 虚拟文件系统来启用支持以收集覆盖率指标。
此外,假设您正在为不同的架构进行交叉编译,那么在执行后捕获 *.gcno 文件之后,您可能必须使用 cross-gcov 工具来收集覆盖率指标。
推荐阅读
- python - 简单的 ODE 函数,但值会爆炸
- python - 如何修复 python 中的 rondom 生成器?每当我运行我的 CNN 时,我都会得到不同的结果
- google-cloud-platform - 使用 Python 3 使用 Google Cloud Function 重命名对象
- youtube-api - 从发布日期开始计算的频道中每个视频的每日观看次数
- python - 在Python中将列表转换为嵌套字典的问题
- regex - 怎么把[IMG] url[/IMG] 造句
- php - 通过php中的ajax post发送文件和表单数据
- android - 看不到以编程方式膨胀的视图
- python - 在保存值之前在模型中设置一个字段 Django
- junit - 带有 spring DSL 和 Junit Coverage 的 Apache camel