如何获取单个测试用户的代码覆盖行数 c++

如何获取单个测试用户的代码覆盖行数 c++,第1张

c/c++代码覆盖率总结,具体如下

1 安装工具:

安装lcov

[html] view plain copy

wget http://sourceforge.net/projects/ltp/files/Coverage%20Analysis/LCOV-1.12/lcov-1.12.tar.gz

解压进入目录make install即可

安装grove

[html] view plain copy

wget https://github.com/gcovr/gcovr/archive/3.2.tar.gz

解压cp */scripts/gcovr /usr/bin即可

2 配置CMake文件

在CMakeList.txt增加如下配置

编译时增加参数

[html] view plain copy

-DENABLE_COVERAGE=ON

注意gcda和gcno文件,必要迅陪时交叉编译,指定gcda文件路径

[html] view plain copy

export GCOV_PREFIX="/src/gcov"

3 执行case,生成代码覆盖率文件

1 编译后拷贝bin文件启动,执行测亩锋蠢试用例;

2 case运行完后,需要执行一次exit,才能生成gcda和gcno文件,如下

[html] view plain copy

pid=`ps -ef | grep $SERVER_NAME | grep -v "grep" | awk '{print $2}'`

echo $pid

gdb -q attach $pid

p __gcov_flush()

查看编译时的目录 即可看到gcno和gcda文件,可用来生成覆盖率报告

4 生成报告

gcovr生成报告

xml文件

[html] view plain copy

gcovr -r . --output coverage.xml -xml-pretty

html文件:

[html] view plain copy

gcovr -r . --html-details -o coverage.html

lcov生成报告

html报告:

[html] view plain copy

lcov -c -o result.info -b . -d .//生成info文件

genhtml result.info -o Report//生成基辩报告,在windows下打开里面的index.html文件即可

             (1) gcov是 MinGW 自带的,在 MinGW\bin\gcov.exe,编译时加入 “-fprofile-arcs -ftest-coverage -g -O0” 参数孙隐颤(添加这些参数的办法详见我之前的文章  不折腾好环境不学习(1)—— VSCode 使用cmake &boost - ),就会生成类似 linux 中生成的 .gcno &.gcda 文件了 

             (2) 这时候类似 linux *** 作,进入 “CMakeFiles/p_test.dir/src” 目录,运行 “gcov p_test.gcno”,gcov 部分的工作就结束了

            (1) lcov 其实则败就是几个 perl 语言写得脚本,为了将 lcov 移植到 windows 环境里,许多人已经在这几携如个 perl 脚本调整上做了很多工作,比如  GitHub - valbok/lcov: LCOV for Windows  和  Code coverage - HTML reports using LCOV on windows ,但是这些现成的脚本在我实际实践时都会有很多问题。

            (2) lcov.bat, lcov.perl, geninfo.perl 遇到不同系统移植带来的 bug ,通过简单浏览一下,不难解决问题,但是 genhtml.perl 过于复杂,待我初略学习 perl 语言一番后再来完善

    1. 在上一种办法搞到最后还是因为不会 perl 语言,没改好 genhtml.perl 而不能生成 coverage.html 因此快要崩溃的时候,我忽然想到一个问题—— “既然 lcov 只是一个 perl 语言写的脚本,那么为什么就不可能有 python 写的 lcov 脚本呢?!”

    2. 抱着这个想法我去Google上搜,调整了 3 次关键词之后终于发现了一个 python 版本的脚本—— gcovr ! 这个脚本只需要编译时加入 “-fprofile-arcs -ftest-coverage -g -O0” 参数,从而能够生成 .gcno &.gcda 文件就可以了!  官方说明如下:

注意要在项目的根目录下运行 gcovr 命令!

在使用gcov工具前,请确认编译程序时并没有用到“优化”选项。

gcc -fprofile-arcs -ftest-coverage sourcefile.c -o sourcefile

此时目录下会生成 sourcefile.gcno

./sourcefile

此时目录下会生成 sourcefile.gcda

gcov sourcefile.c

此时目录下会生成 sourcefile.c.gcov

gcov中记录的执行次数是累计的,即如果不删除之前的.gcda文件就再次执行程序旅备轮,则记录的执行次数会累加。

该工具需要有gcov生成的.gcno和.gcda文件,不需要.gcov

lcov --capture --directory projrct-dir --output-file coverage.info

genhtml coverage.info --output-derectory out

以上两行命令的简化

lcov -c -d project_dir -o coverage.info

genhtml coverage.info -o out

用浏览器打开out目录下的index.html即可。

用户手册

在编译时滚租加上 -pg 选项。

运行可执行程序,此时会在同路径下生成gmon.out文件。

gprof executable_name gmon.out 输出分析报告。

分析报告内容:

flat profile 表格显示每个函数消耗的处理器时间、调用次拆信数等。

call graph 表格显示每个函数的调用关系,调用花费了多少时间。

如果嫌gprof的输出不太直观,可以使用 gprof2dot 工具,自动用dot语言画出流程图。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/8183791.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存