不折腾好环境不学习系列 Windows(2)—— gcov/lcov & gcovr

一、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 命令!

你可能感兴趣的:(不折腾好环境不学习系列 Windows(2)—— gcov/lcov & gcovr)