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

时间:2013-08-05 10:31:07

标签: c++ code-coverage automake gcov

我第一次使用覆盖工具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 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

链接库gocv

-lgcov

应该有帮助