我需要借助 gcov 工具对基于 ARM 的主板中的驱动程序进行单元测试。当在 x86 架构中使用 gcov 时,它将在执行程序后创建 .gcda 文件。但是当涉及基于 ARM 的主板时.gcda 文件没有被创建。所以,没有它我就无法使用 gcov 工具。我的问题是如何在交叉编译中使用该 gcov 工具。?提前致谢。
gcov
代码/数据结构与主机文件系统绑定,交叉编译器工具链没有任何端口或配置来更改此行为。如果您的目标文件是 ~/my-project/abc.o
,则由检测代码创建/更新的 gcov
内存中数据结构指向 ~/my-project/abc.gcda
,并且所有这些路径都位于您的主机上。如您所见,在远程系统(在您的情况下为 ARM 板)上运行的检测代码无法访问这些路径,这是您在 ARM 板箱中看不到 .gcda
文件的主要原因。
有关获取
.gcda
文件以解决上述问题的一般方法,请参阅 https://mcuoneclipse.com/2014/12/26/code-coverage-for-embedded-target-with-eclipse-gcc -和-gcov/。本文介绍了一种侵入 gcov 函数并将 gcov 数据结构手动转储到主机上 .gcda
文件中的 hacky 方法。
我使用上面提到的博客为我的 ARM 项目进行代码覆盖。然而;我在我的工具链版本(2016 年 10 月/11 月提供的 GNU arm 工具链版本)中遇到了 gcc bug 的另一个问题,您将无法闯入 gcov 函数并完成上述博客中提到的过程,如下所示相关的 gcov 函数挂起无限循环。您可能会也可能不会遇到这个问题,因为我不确定该错误是否已修复。如果您遇到此问题,我的博客中提供了解决方案https://technfoblog.wordpress.com/2016/11/05/code-coverage-using-eclipse-gnu-arm-toolchain-and-gcov-for -嵌入式系统/。
谷歌“嵌入式 GCOV”。有一篇论文和 YouTube 视频介绍了如何将覆盖率数据从目标处理器传输到 .gcno 文件所在的主机系统。 您的交叉编译器也不需要 libgov - 这是放入代码中以生成目标覆盖信息所需的运行时支持。 这篇论文/YT 是由 NASA 实验室 JPL 撰写的。