使用c++编译器运行gcov工具
Run gcov tool using c++ compiler
我第一次使用覆盖工具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
这应该有助于
相关文章:
- 使用外部SDK工具链文件在VisualStudio上生成项目编译错误
- 在clang++预处理器中确定gcc工具链版本
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 参数化自定义CMake工具链
- 如何在QT中的自定义视频小工具t上绘制矩形
- 使用 C++ 和 i2c 工具从虚拟 i2c 写入和读取
- 用于C++的静态二进制检测或二进制重写工具和框架
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- AWS IoT 开发工具包:通过 TCP 端口 443 使用 MQTT
- 在官方张量流 resnet50 模型上运行 tflite 精度工具
- Q没有管理权限的 exe 无法启动维护工具
- C++合并排序可视化工具
- 为Bazel工具链指定sysroot
- 在自动工具中包含用于不同bin_Programs的不同库
- 如何使用MSVC 2019创建和使用Qt 5.14.0自定义小工具插件
- Eclipse CDT clang 工具链 - 无法从链接器选项中删除 stdlibc++,但可以添加 libc++,E
- 使用不同的工具时,Eccodes 会产生不同的结果
- Clang 工具,用于提取给定 lambda 类型的 lambda 主体
- GCOV-工具合并:"not a gcov data file"
- 使用c++编译器运行gcov工具