gcov和lcov

gcov是什么?

  • 测试代码覆盖率的工具
  • 命令行方式控制台程序
  • GCC自带,伴随GCC一起发布
  • 可以和gprof一起工作估算代码执行时间

gcov能做什么?

  • 每一行代码的执行效率
  • 哪些代码确实被执行了
  • 每一段代码的耗时

如何使用?

1.编译生成.gcno与.gcda

大部分博客和老的官方manual会告诉你在编译的时候加两个参数 (包括man)-ftest-coverage -fprofile-arcs

但是在g++中会出现(gcc也会出现这种问题)

```
undefined reference to `__gcov_init'

```

因为作者在新版本中更改了编译选项,只需要从

```
 gcc xxx.o -o xxx --coverage
 gcc xxx.o -o xxx -lgcov
 gcc xxx.o -o xxx -fprofile-arcs
```

选一个就行,我选择的是–coverage, 记得要在编译以及链接的时候加,仅在链接的时候加不会生成相关的文件。编译后会生成.gcno文件,运行后会生成.gcda文件,这些是生成分析文件的源文件

.gcno包含了重建基本块图和相应的块的源码的行号的信息。
.gcda由编译后的文件运行所产生的,它包含了弧跳变的次数和其他的概要信息。

2. 生成报告

基本命令

gcov xxx.cc
生成 .cov文件,使用vim打开即可查看

选项

-b 分支覆盖
-a 所有block覆盖
-f 函数覆盖
        -:    0:Source:test.c
        -:    0:Graph:test.gcno
        -:    0:Data:test.gcda
        -
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要安装gcovlcov工具。然后,你可以按照以下步骤进行操作: 1. 在test.cpp文件所在的目录下创建一个名为"CMakeLists.txt"的文件。 2. 在"CMakeLists.txt"文件中,添加以下内容: ``` cmake_minimum_required(VERSION 3.10) project(Test) set(CMAKE_CXX_STANDARD 11) add_executable(test test.cpp) target_compile_options(test PRIVATE --coverage) target_link_libraries(test PRIVATE gcov) add_custom_target(coverage COMMAND ${CMAKE_COMMAND} -E environment "GCOV_PREFIX=./" "GCOV_PREFIX_STRIP=0" ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR} gcov -b -c ${CMAKE_SOURCE_DIR}/test.cpp COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR} lcov --capture --directory . --output-file coverage.info COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR} lcov --remove coverage.info '/usr/*' "${CMAKE_BINARY_DIR}/*" --output-file coverage.info COMMAND ${CMAKE_COMMAND} -E chdir ${CMAKE_BINARY_DIR} lcov --list coverage.info ) ``` 这个CMakeLists.txt定义了一个名为Test的项目,并将test.cpp编译为可执行文件test。编译选项--coverage允许生成代码覆盖信息。target_link_libraries指定链接gcov库。 add_custom_target添加一个名为“coverage”的自定义目标,该目标使用环境变量设置gcov生成代码覆盖信息。使用lcov收集覆盖信息,将其保存在coverage.info文件中,并且从输出中删除一些不必要的信息。 3. 在终端中进入test.cpp所在的目录,创建一个build目录。 ``` mkdir build && cd build ``` 4. 运行cmake命令。 ``` cmake .. ``` 5. 运行make命令,生成可执行文件test。 ``` make ``` 6. 运行test。 ``` ./test ``` 7. 运行覆盖率测试。 ``` make coverage ``` 执行这个命令将生成一个名为coverage.info的文件,其中包含了test.cpp文件的代码覆盖率信息。你可以使用lcov或genhtml工具生成HTML格式的报告。 ``` lcov --list coverage.info genhtml coverage.info --output-directory coverage-report ``` 打开coverage-report目录下的index.html文件,你就可以看到代码覆盖率报告了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值