3

我第一次使用覆盖工具 gcov 来分析一个大型项目。我有一个这样的目录结构:

    HW
     -FooHW1.cpp
     -FooHW1.h
     -FooHW2.cpp
     -FooHW2.h
     -...
     -Makefile.am
    Lib1
     -FooLib1.cpp
     -FooLib1.h
     -FooLib2.cpp
     -FooLib2.h
     -...
     -Makefile.am

    Lib2
     ...
     -Makefile.am
    Lib3
     ...
     -Makefile.am
    Main
     -main.cpp
     -main.h
     -Makefile.am

每个目录都有自己的 Makefile 使用 automake 生成依赖项,并且无论使用的编译器在哪里都是 c++。

由于我的目标是分析语句覆盖率,因此我尝试使用 gcov 在每个 Makefile.am 中添加以下行来生成我的 .gcno 和 .gcda 文件,以便使用 gcov:

    AM_CXXFLAGS = -fprofile-arcs -ftest-coverage
    AM_LDFLAGS = -fprofile-arcs

不幸的是,即使它编译它也不会创建(或链接)几个 *.o 并且在调用 gcov 时它通常会给我错误:

    undefined __gcov_init

根据http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#index-coverage-536,我还尝试了susbtituing,上面的说明是:

    AM_CXXFLAGS = --coverage
    AM_LDFLAGS = --coverage

但这对我没有用。

我想说明这是第一次使用 gcov 工具和处理大型 c++ 项目。谢谢你的帮助。

4

2 回答 2

0

http://bobah.net/d4d/tools/code-coverage-with-gcovhttp://www.slideshare.net/maguschen/using-gcov-and-lcov是使用 gcov/lcov 的好资源(有这个帮助我设法在非常大、复杂的项目中使用 lcov)

lcov 使您可以以 html 格式显示覆盖结果(列出的文件甚至源文件中的行的百分比很好)。

哦,我希望你确实意识到这是一个动态覆盖,所以你必须实际运行程序才能获得任何覆盖(构建应该只创建.gcno文件)。

于 2013-08-05T12:25:47.363 回答
-1

链接库 gocv

-lgcov

那应该有帮助

于 2018-08-20T12:40:38.203 回答