【问题标题】:Cannot get gcov to produce any coverage data无法让 gcov 生成任何覆盖率数据
【发布时间】:2019-08-25 06:40:32
【问题描述】:

使用 mingw32 在 Windows 上使用 googletest 使用我的 C/C++ Makefile 项目获取 gcov 覆盖率文件失败 完整源代码https://github.com/rusefi/rusefi/tree/gcov/unit_tests

我有

USE_OPT += -fprofile-arcs -ftest-coverage
ULIBS += -lgcov --coverage```

我在 build\obj 文件夹中的 .o 文件旁边获得了 .gcno 文件

我执行 rusefi_test.exe 并没有看到包含覆盖数据的新文件:(

nm rusefi_test.exe

确认 gcov 在我的二进制文件中

我已经在末尾添加了显式刷新

extern "C" void __gcov_flush();
__gcov_flush();

但我还是没看到

90.00% of 10 source lines executed in file tmp.c

标准输出末尾的样式行

我尝试将我的 .exe 从 build 复制到 build\obj 文件夹,但这并没有改善任何问题。

【问题讨论】:

  • 是的,我已经阅读了联机帮助页,但我可能遗漏了一些东西。你有什么想法我可能会错过吗?

标签: c gcc gcov


【解决方案1】:

看来我的编译器与此有关!我已经转移到一个简单的 HelloWorld.cpp 应用程序,并且根据编译器,我可以获取或不获取运行时文件!

由 cygwin 的“g++”生成的 main.exe 生成运行时文件,而 cygwin 的 x86_64-w64-mingw32-g++ 不生成 main.gcda 文件!

与 cygwin 捆绑的 x86_64-w64-mingw32-g++ 似乎受到影响,而直接从 mingw64 下载的相同 x86_64-w64-mingw32-g++ 似乎可以工作。

他们说有https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=854368 已关闭,但至少告诉我有时它与编译器本身有关:(

【讨论】:

    猜你喜欢
    • 2014-10-13
    • 2012-12-07
    • 2011-06-06
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 2012-05-26
    • 2012-11-22
    相关资源
    最近更新 更多