一、gcov + lcov
1. gcov
(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 部分的工作就结束了
2. lcov
(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 语言一番后再来完善
修改后的 lcov 压缩包链接:
科大睿客网:分享地址:http://rec.ustc.edu.cn/share/7d606ef0-5ac7-11e9-94e7-df94a4e0600d分享密码:9f3c
Google Drive:https://drive.google.com/file/d/16BcQg9trdTDG3c2MFQDLY1XwZX9kVT3I/view?usp=sharing
百度网盘:链接:https://pan.baidu.com/s/1QRyDgJ7dbF7dlYWhv_gNKA 提取码:jvdx 复制这段内容后打开百度网盘手机App,操作更方便哦
Install
1. Install Perl (such as under C:\Perl)
2. Associate perl scripts with perl - very important is not to use windows association but to use commands: (请用管理员身份打开 cmd 运行下列命令)
assoc .perl=Perl.File
ftype Perl.File=C:\Perl\bin\perl.exe "%1" %*
3. Define correct path of GCOV executable in geninfo.perl:
our $gcov_tool = "CORRECT_PATH_TO\\gcov.exe";
4. Define correct path of Perl executable & lcov directory in lcov.bat:
set perl=CORRECT_PATH_TO\Perl.exe
set idir=CORRECT_PATH_TO\lcov\
Use
1. Compile your project to support GCOV. As a result *.gcno files will be created.
2. Run your binaries and *.gcda files will be created. You can place them to the same dir with *.gcno.
3. Go to the dir where *.gcda and *.gcno files placed.
4. Run lcov.bat
project/CMakeFiles/p_test.dir/src >d:\lcov\lcov.bat (根据自己的安装路径改)
(然后我就是卡在了这里,还是会产生 “Processing file E:/Github/SE/parser/include/parser.h genhtml.perl: ERROR: cannot open Github/SE/parser/include/parser.h.gcov.html for writing! ” 的错误估计是两套系统的路径操作不太一样,今天是在花了太多了时间,要去赶 ddl 了,先这样吧)
最新进展:我是东改西改改到现在能生成 html 了, 但是没啥用, html 报告看起来很奇怪······ 我放弃了, 大家还是用下面这个工具吧
二、gcovr
1. 在上一种办法搞到最后还是因为不会 perl 语言,没改好 genhtml.perl 而不能生成 coverage.html 因此快要崩溃的时候,我忽然想到一个问题——“既然 lcov 只是一个 perl 语言写的脚本,那么为什么就不可能有 python 写的 lcov 脚本呢?!”
2. 抱着这个想法我去Google上搜,调整了 3 次关键词之后终于发现了一个 python 版本的脚本—— gcovr ! 这个脚本只需要编译时加入 “-fprofile-arcs -ftest-coverage -g -O0” 参数,从而能够生成 .gcno & .gcda 文件就可以了! 官方说明如下:
注意要在项目的根目录下运行 gcovr 命令!
网友评论