【发布时间】:2013-08-06 00:47:44
【问题描述】:
我第一次使用覆盖工具 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++ 项目。 谢谢你的帮助。
【问题讨论】:
-
我猜你忘了把你的代码和 lcov 链接起来。
-
lcov 不只是 gcov 工具的图形前端吗?我真的很缺乏经验,所以我不明白你的建议,你能更清楚吗?谢谢!
-
是的,我可能对此感到困惑。
AM_LDFLAGS = --coverage应该按照我的意思去做。 -
我在 Makefile.am 中添加了以下内容:
AM_CXXFLAGS = --coverageAM_LDFLAGS = --coverageAM_CFLAGS = -shared,它最终创建了 *gcno 文件,我无法实际测试总体原因,我遇到了一些其他问题,希望它会工作。谢谢! -
您可以通过
make VERBOSE=1进行调查,并查看链接标志
标签: c++ code-coverage automake gcov