使用C++编译器运行gcov工具

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,将上面的指令替换为:

    AM_CXXFLAGS = --coverage
    AM_LDFLAGS = --coverage

但这对我来说行不通。

我想指出,这是我第一次使用gcov工具并处理大型c++项目。感谢您的帮助。


2
我猜你忘记将你的代码与lcov链接了。 - πάντα ῥεῖ
lcov难道不只是gcov工具的图形化前端吗?我很没有经验,所以不太明白你的建议,能否再详细解释一下?谢谢! - gRomano
是的,我可能有点混淆了。AM_LDFLAGS = --coverage 应该可以实现我的意思。 - πάντα ῥεῖ
我在Makefile.am中添加了以下内容: AM_CXXFLAGS = --coverage AM_LDFLAGS = --coverage AM_CFLAGS = -shared 最终它创建了*gcno文件,但由于我遇到了其他问题,无法测试整体效果,希望它能正常工作。 谢谢! - gRomano
1
你可以通过 make VERBOSE=1 进行调查,并查看链接标志。 - prehistoricpenguin
2个回答

0

谢谢,我知道我必须运行它才能获得我的覆盖率(这实际上是我的项目目标,以测试移动机器人的某些模块)!看了一下 lcov 的输出,它实际上比 gcov 更好更易懂,所以一旦我能够让它工作,我会尝试使用它,唯一的区别应该是在调用时,对吗? lcov 而不是 gcov 谢谢! - gRomano
第一个链接http://bobah.net/d4d/tools/code-coverage-with-gcov现在是404。 - Qi Luo
最新存档:https://web.archive.org/web/20171013210930/bobah.net/d4d/tools/code-coverage-with-gcov - hlovdal

-1

链接gocv库

-lgcov

那应该有所帮助


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接