【Linux】lcov2.0 安装和 perl 修改镜像源
1. 安装 lcov 2.0
1.1. 介绍
你可能不知道 lcov 是什么,简而言之,它是一个代码单元测试覆盖率的显示工具,基于 gcov。
- 什么是单元测试覆盖率?
我们需要对项目中的每个函数编写单元测试,其实就是测试函数的功能。通过 gcc/g++ 的相关编译选项,可以得到一个 gcda 文件,内部包含某个 cpp 文件中相关函数被执行了多少次,以及某些 if/switch 中的多分支是否覆盖上了;
lcov 就可以解析这些 gcda 文件,得到如下图所示的函数测试覆盖率的报告
包括单元测试在内,这部分对代码函数测试的操作一般被称之为代码的功能安全
,这里就不多说了。
1.2. 安装 lcov
lcov 2.0 的安装命令相对来说很简单,就是下面这些。安装 lcov 之前,需要先安装后文的 perl。
1 | wget https://github.com/linux-test-project/lcov/releases/download/v2.0/lcov-2.0.tar.gz |
执行完毕后,查看版本号,出现则代表安装成功
1 | $ lcov --version |
1.3. 可能遇到的问题
在 ubuntu 上安装可能会遇到如下问题,提示 LC_ALL: cannot change locale
。
2. perl 安装和修改镜像源
2.1. 安装 perl
perl 的安装命令如下
1 | # centos8 安装 perl. |
用如下命令查看是否安装成功。
1 | ❯ perl --version |
2.2. perl 使用清华镜像源
使用 lcov 的时候需要 perl module,此时就需要修改 perl 的镜像源。默认的 perl module 的源是在国外的,国内基本上是完全用不了。
如果你的 lcov 运行的时候遇到下面类似的错误,那么就是因为 perl 缺少对应 module 导致的,比如如下报错是因为缺少 Capture::Tiny
这个 module。
1 | Can't locate Capture/Tiny.pm in @INC (you may need to install the Capture::Tiny module) (@INC contains: /usr/local/lib/lcov /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5) at /usr/local/lib/lcov/lcovutil.pm line 14. |
使用清华源就行了 https://mirrors.tuna.tsinghua.edu.cn/help/CPAN/。
因为我用的 centos 的系统,安装的 perl 版本很老,v5.26.3
,所以这里记录一个手动修改镜像源的办法。
在 root 用户下执行如下命令,会进入一个 perl 的命令行
1 | perl -MCPAN -e shell |
在 perl 的命令行中执行如下命令
1 | o conf init |
最终展现的结果应该如下,会自动往当前用户的家目录下创建一个配置文件
这里创建的配置文件是在 root 用户下,输入 quit
退出 perl 的命令行后,我们直接 vim 打开这个配置文件
1 | vim /root/.cpan/CPAN/MyConfig.pm |
在里面找到 urllist 选项,根据已有格式添加一个新的镜像路径就可以了
我这里添加后的 urllist 配置项如下,第一项是镜像源就 OK
1 | 'urllist' => [q[https://mirrors.tuna.tsinghua.edu.cn/CPAN/], q[http://www.cpan.org/]], |
但是要注意一下,在我这边的网络环境中,清华源在 perl 安装包的时候也容易抽风,我试出来比较稳定的 ip 如下,将其写入 /etc/hosts
文件中,这样安装 perl 包的时候就不会 timeout 了
1 | 101.6.15.130 mirrors.tuna.tsinghua.edu.cn |
这个 ip 后续可能会有变化啊,请以你的实际情况为准!
2.3. perl 安装 module
后续安装包的时候,就可以用上镜像源了,安装包的语句如下,请注意这个安装语句最后还有个英文的单引号,一定不要把他删了!
1 | sudo perl -MCPAN -e 'install "包名"' |
我需要用 perl 是因为要用到 lcov,在 lcov 仓库的 readme 里面提到了 lcov 需要的 perl 包,一个一个安装就行了(以下节选自 lcov2.0
的仓库 README)
1 | These perl packages include: |
比如我需要安装 Capture::Tiny
包,就用如下命令
1 | sudo perl -MCPAN -e 'install "Capture::Tiny"' |
正常安装的命令输出结果如下图所示
2.4. ubuntu 安装 perl module
如果是 ubuntu,安装 perl 的包会方便一点,因为 apt 源里面是有 perl 的 module。
你可以根据 perl 的包名中的关键字,尝试在 apt list
里面找找有没有对应的包。有的话,直接 apt 下载就可以了。
1 | sudo apt list | grep 包名 |
比如 datetime 和 capture-tiny 这两个 perl moudle 就可以直接通过 apt install 来安装。
1 | sudo apt install -y libcapture-tiny-perl libdatetime-perl |
3. 使用 lcov
对于 lcov2.0 的命令使用,可以参考我的 linux 仓库中的测试
https://gitee.com/musnows/raspberry-practice/tree/master/lcov_test
使用 lcov 时,g++ 编译需要在原有命令之后添加如下选项
1 | -fprofile-arcs -ftest-coverage -fprofile-update=atomic |
选项 -ftest-coverage
可以让 g++ 编译器在代码中插入额外的指令,来确认某部分的代码是否执行了,一般要和 -fprofile-arcs
连用才能产生完整的覆盖率报告。程序运行后会产生.gcda
文件,记录了覆盖率信息,lcov 依赖于.gcda
产生最终的 html 覆盖率报告。
- 最新
- 最热
- 最早
- 作者
点击重新获取 | 打开控制台