如何在交叉编译器中使用gcov?

问题描述 投票:0回答:2

我需要借助 gcov 工具对基于 ARM 的主板中的驱动程序进行单元测试。当在 x86 架构中使用 gcov 时,它将在执行程序后创建 .gcda 文件。但是当涉及基于 ARM 的主板时.gcda 文件没有被创建。所以,没有它我就无法使用 gcov 工具。我的问题是如何在交叉编译中使用该 gcov 工具。?提前致谢。

unit-testing testing embedded arm gcov
2个回答
0
投票

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 -嵌入式系统/


0
投票

谷歌“嵌入式 GCOV”。有一篇论文和 YouTube 视频介绍了如何将覆盖率数据从目标处理器传输到 .gcno 文件所在的主机系统。 您的交叉编译器也不需要 libgov - 这是放入代码中以生成目标覆盖信息所需的运行时支持。 这篇论文/YT 是由 NASA 实验室 JPL 撰写的。

© www.soinside.com 2019 - 2024. All rights reserved.