美文网首页
如何使用Gcov和Lcov

如何使用Gcov和Lcov

作者: louyang | 来源:发表于2020-10-15 10:36 被阅读0次

单元测试中,我们经常会问一个问题,哪些代码被测到,哪些没有被测到?
Gcov和Lcov可以帮助我们回答这个问题。

Gcov是非常容易使用的,安装完gcc后就应该有gcov了(未确认);Lcov的安装方法看这里:https://www.jianshu.com/p/30679d7531ac

Gcov的原理就是哪些代码被运行到了,哪些代码就是被测过的。Lcov是生成可视化报告的工具。下面看一个最简单的例子:

$ cat a.cpp
#include <iostream>
int main() {
    std::cout << "hello world" << std::endl;
}

正常编译运行:

$ g++ a.cpp && ./a.out
hello world

带gcov的编译:

$ g++ a.cpp --coverage

生成a.gcno

运行a.out,生成a.gcda

接着运行:

$ gcov a.cpp

会产生a.cpp.gcov,这个文件是可读的,内容如下:

$ cat a.cpp.gcov 
        -:    0:Source:a.cpp
        -:    0:Graph:a.gcno
        -:    0:Data:a.gcda
        -:    0:Runs:1
        -:    1:#include <iostream>
        -:    2:
        1:    3:int main() {
        1:    4:    std::cout << "hello world" << std::endl;
        1:    5:}

这个文件的读法是,以-开头的行,是不用覆盖的。以数字n开头的,表示这一行已经被运行了n次。没有被执行到的以#####开始,请自行实验。

最后,就是用Lcov生成更清晰的可视化报告:

$ lcov -c -d . -o a.info
$ genhtml a.info
$ firefox index.html
image.png

相关文章

网友评论

      本文标题:如何使用Gcov和Lcov

      本文链接:https://www.haomeiwen.com/subject/hxenpktx.html