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

Run gcov tool using c++ compiler

本文关键字:gcov 工具 运行 编译器 c++ 使用      更新时间:2023-10-16

我第一次使用覆盖工具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++项目。谢谢你的帮助。

http://bobah.net/d4d/tools/code-coverage-with-gcov和http://www.slideshare.net/maguschen/using-gcov-and-lcov是使用gcov/lcov的好来源(在这个帮助下,我成功地在非常大、复杂的项目中使用了lcov)

lcov提供了以html格式显示覆盖率结果的可能性(列出的文件甚至源文件中的行的百分比都很好)。

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

链接库gov

-lgcov

这应该有助于