mysql gprof_GCOV生成可视化的代码覆盖率

简介:gcov集成在gcc中,如果安装了gcc不需要单独安装gcov.

功能:统计每行代码的执行频率

统计实际执行代码行

统计代码执行效率,需要配合profiling tool,如perf, gprof

结合lcov生成可视的图形化的覆盖率报告

lcov: 由一组构建与基于文本的gcov输出之上的perl脚本构成,实现HTML的输出

注意:由于gcov按行积累统计数据,它适合每行只有一条程序语句的编程风格,如果使用了宏,并且宏的行为类似于函数,那么统计数据就没有那么有用了.

gcov只在使用gcc编译的代码上工作.

工作流程:

1. 编译前,加入编译参数,CMake组织的工程下:if(USE_GCOV)

message(STATUS "using gcov")

SET(GCC_COVERAGE_COMPILE_FLAGS "-fprofile-arcs -ftest-coverage")

SET(GCC_COVERAGE_LINK_FLAGS "-lgcov")

SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}")

SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}") --> 可以写为target_link_libraries(binary-name gcov)

endif(USE_GCOV)复制代码

2. 使用cmake生成makefile时指定USE_GCOVE:cmake -DUSE_GCOV=1复制代码

3. .gcno文件在编译后就会出现,.gcda文件必须执行编译生成的二进制才会生成.两个文件的目录通常在二进制目录下,如果是cmake,在build/CMakeFile/binary-name/

4. 不kill进程生成.gcda文件见另外一篇文章

5.安装lcov可以yum安装或者github上的安装流程

产生覆盖率文件:lcov -c -d . -o cover.info复制代码合并文件lcov -a x.info -a y.info -o total.info复制代码过滤信息lcov --remove total.info '/src/include/*' '/usr/bin/*' -o final.info (屏蔽include和bin目录的覆盖率信息)复制代码生成html文件genhtml -o cover_report final.info (cover_report是一个目录)复制代码注:

-c: 获取覆盖率信息

-d: gcda和gcno目录

-o: 输出文件

原理:源码经过编译预处理,生成汇编文件,在生成汇编文件的同时完成插桩,直接插入生成的*.s文件中,最后汇编文件汇编生成目标文件,生成可执行文件,并且生成.gcno文件.

执行二进制文件,在运行过程中插入的桩点负责统计执行信息.

生成gcda文件,加工可得覆盖率.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值