首页 > 解决方案 > 如何在刷新通过 bitbake 生成的图像的覆盖范围时修复“当前上下文中没有符号 __gcov_flush”错误

问题描述

我正在尝试为 yocto 项目模块生成代码覆盖率。因此在 AM_CFLAGS 中添加了覆盖标志(-g、-O0 和 --coverage)作为

“AM_CFLAGS = -std=gnu11 -Wall -Werror -Wextra -g -O0 --coverage -Wno-unused-parameter -Wno-unused-variable”

在模块的 Makefile.am 文件中。

这些更改在使用 bitbake 编译代码时生成了 .gcno 文件。所以从所有这些模块中生成了一个 yocto 图像。

现在将图像加载到测试设备中并为该特定模块运行功能测试用例。

测试设备中正在运行一个进程,该进程使用“gcda”进行检测,我可以使用 strings 命令检查进程中的“gcda”。

在将进程 ID 附加到 gdb 后,尝试在 gdb 下使用“__gcov_flush”刷新覆盖转储时,会引发错误“当前上下文中没有符号 __gcov_flush”。

我发现问题可能是由于二进制文件的剥离和优化,因此在 bitbake 的配方文件中添加了 INHIBIT_PACKAGE_STRIP = "1" 和 DEBUG_BUILD = "1" 标志。

这些更改禁用了二进制剥离,但没有禁用优化。请告诉我,

  1. 如何在 bitbake 中禁用优化?和
  2. 刷新覆盖范围时出现“当前上下文中没有符号 __gcov_flush”错误的原因可能是什么?

标签: cmakefilecode-coverageyoctoinstrumentation

解决方案


推荐阅读