`

C/C++代码覆盖工具gcov与lcov入门

 
阅读更多

 

gcov是一个可用于C/C++的代码覆盖工具,是gcc的内建工具。下面介绍一下如何利用gcov来收集代码覆盖信息。
想要用gcov收集代码覆盖信息,需要在gcc编译代码的时候加上这2个选项 “-fprofile-arcs -ftest-coverage”,把这个简单的程序编译一下

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

编译后会得到一个可执行文件hello和hello.gcno文件,当用gcc编译文件的时候,如果带有“-ftest-coverage”参数,就会生成这个.gcno文件,它包含了程序块和行号等信息
接下来可以运行这个hello的程序

./hello 5
./hello 12

运行结束以后会生成一个hello.gcda文件,如果一个可执行文件带有“-fprofile-arcs”参数编译出来,并且运行过至少一次,就会生成。这个文件包含了程序基本块跳转的信息。接下来可以用gcov生成代码覆盖信息:

gcov hello.c

运行结束以后会生成2个文件hello.c.gcov和myfunc.c.gcov。打开看里面的信息:

-: 0:Source:myfunc.c
-: 0:Graph:hello.gcno
-: 0:Data:hello.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:#include
-: 2:
-: 3:void test(int count)
1: 4:{
-: 5: int i;
10: 6: for (i = 1; i < count; i++)
-: 7: {
9: 8: if (i % 3 == 0)
3: 9: printf (“%d is divisible by 3 \n”, i);
9: 10: if (i % 11 == 0)
#####: 11: printf (“%d is divisible by 11 \n”, i);
9: 12: if (i % 13 == 0)
#####: 13: printf (“%d is divisible by 13 \n”, i);
-: 14: }
1: 15:}

被标记为#####的代码行就是没有被执行过的,代码覆盖的信息是正确的,但是让人去读这些文字,实在是一个杯具。不用担心,有另外一个工具叫lcov,可以用程序解析这些晦涩的字符,最终输出成html格式的报告,很好吧!

lcov -d . -t ‘Hello test’ -o ‘hello_test.info’ -b . -c

指定lcov在当前目录“.”去找代码覆盖的信息,输出为’hello_test.info’ ,这个hello_test.info是一个中间结果,需要把它用genhtml来处理一下,genhtml是lcov里面的一个工具。

genhtml -o result hello_test.info

指定输出目录是 result。一个完整的html报告就生成了,做一个连接,把这个目录连到随便一个web server的目录下,就可以看报告了。

 

测试结果概览

具体某个文件的覆盖率

gcov和lcov基本上能满足测试过程中收集代码覆盖率信息的需求,不过有个遗憾就是gcov不能收集.so文件的代码覆盖信息。

分享到:
评论

相关推荐

    OpenHarmony覆盖率测试,gcov及lcov的原理和使用简介

    采用覆盖率驱动的验证方式可以量化验证进度,保证验证的完备性。本文主要介绍了openharmony代码和分支覆盖率测试中所使用的工具(即gcov及lcov)的简介、工作原理及使用方法。

    gcov_lcov 演练工程源码

    一个gcov和lcov使用和练习的源码,仅用来记录自我学习和使用gcov的过程和经验,以便后续开发中可以借鉴。

    C/C++覆盖率在NGINX测试中的应用

    C/C++程序的代码覆盖率统计工具非常少,与JAVA相比开源免费的工具更是寥寥无几,好用又开源的简直是凤毛麟角。左挑右选最后看中了基于GCOV的LCOV作为NGINX测试的覆盖率统计工具。选择LCOV的原因很简单:一是适合GCOV...

    使用gcov完成代码覆盖率的测试

    使用gcov完成代码覆盖率的测试.Gcov作为gnu/gcc工作组件之一,是一款的免费的代码覆盖率测试工具,而且可以结合lcov生成美观的html的测试报表。本文介绍一些gcov的使用方法,基本原理,一些实际中可能会遇到的问题...

    lcov for linux gcov

    lcov for linux gcovlcov for linux gcovlcov for linux gcovlcov for linux gcovlcov for linux gcovlcov for linux gcov

    使用gcc/gcov生成代码覆盖率报告

    使用gcc/gcov生成代码覆盖率报告-源码

    linux gcov 工具详细介绍

    • 伴随GCC发布,配合GCC共同实现对C/C++文件的语句覆盖和分支覆盖测试; • 与程序概要分析工具(profiling tool,例如gprof)一起工作,可以估计程序中哪一段代码最耗时; 注:程序概要分析工具是分析代码性能的工具

    gcov-tools-1.0.tar.gz

    该程序是从gcc-4.1.2源代码中抽取出来的与gcov和gcov-dump相关的文件组成的小项目,包含两个工具gcov和gcov-dump。希望能对通过gcc覆盖率测试工具GCOV进行覆盖率测试相关工作的同行有些许的帮助。 其中,gcov的输入...

    gcov命令 测试代码覆盖率

    gcov命令是一款测试程序的代码覆盖率的工具。 gcov可以统计每一行代码的执行频率,实际上哪些代码确实被执行了,每一段代码的执行时间。 gcov只在使用GCC编译的代码上工作。它与任何其他概要或测试覆盖机制不兼容。...

    gcov-1.0.tar.gz

    该程序是从gcc-4.1.2源代码中抽取出来的与gcov相关的文件组成的小项目。希望能对通过gcc覆盖率测试工具GCOV进行覆盖率测试相关工作的同行有些许的帮助。 gcov的输入是一个.c文件,前提是已经编译生成了.gcno文件并...

    如何使用lcov生成diff代码覆盖率报告

    lcov是建立在gcov之上的一个可以生成html代码覆盖率报告的工具,最近公司开始尝试引入代码覆盖来提高产品质量,lcov很好地满足了我们的需求,虽然lcov本身支持生成代码覆盖率的diff报告,但是跟我们的需求不太符合。...

    lcov-1.14 tools

    /=========================/ linux下配合gcov使用的可视化工具lcov。

    cpp-gcov-lcov-test

    Kiss-cpp-makefile-template Kiss C ++ Makefile模板结构-(保持简短) 对于那些厌倦了发布超级复杂的makefile却一无所获的人...

    CodeCoverageExampleQt:在 Mac OS 上使用 Qt 5 和 GCOV 的代码覆盖率

    在 Mac OS 上使用 Qt 5 和 GCOV 的代码覆盖率 这是如何在 Mac OS 上使用 Qt 5 和 GCOV 生成代码覆盖率的示例。 您可以在上阅读整个教程。

    lcov-1.10.tar.gz

    lcov,配合gcov可以进行图形化的代码覆盖率查看

    afl-cov, 使用afl模糊测试案例生成gcov的代码覆盖率结果.zip

    afl-cov, 使用afl模糊测试案例生成gcov的代码覆盖率结果 AFL Fuzzing Fuzzing Fuzzing Fuzzing简介afl-cov 使用 AFL fuzzer afl-fuzz 生成的测试用例文件为目标二进制文件生成gcov代码覆盖率结果。 为了确定AFL的新...

    gcov-dump-1.0.tar.gz

    该程序是从gcc-4.1.2源代码中抽取出来的与gcov-dump相关的文件组成的小项目。希望能对通过gcc覆盖率测试工具GCOV进行覆盖率测试相关工作的同行有些许的帮助。 gcov-dump是一个dump程序,输入是一个gcov的文件,或者....

    lcov的源代码,可以生称html文件

    lcov,可以将gcov生成的测试结果转换为html

    dexcov:并排生成Dextool Mutate与LCOV

    生成突变(C / C ++突变测试)与 (C / C ++代码覆盖率)并排演示的工具 示例1:原始主题 $ dexcov example/lcov_html example/dextool_html -o example/out $ xdg-open example/out/lz4.c.html 示例2:LCOV主题 $ ...

Global site tag (gtag.js) - Google Analytics