1. gcov是什么?
2. gcov能做什么?
3. 如何使用gcov?
3.1 使用gcov的3个阶段
(1) 编译
(2) 收集信息
(3) 报告
3.2 gcov的选项
(1) -a, --all-blocks
(2) -b, --branch-probabilities
(3) -c, --branch-counts
4. 小结
1. gcov是什么?
-
伴随GCC发布,配合GCC共同实现对C/C++文件的语句覆盖和分支覆盖测试;
-
与程序概要分析工具(profiling tool,例如gprof)一起工作,可以估计程序中哪一段代码最耗时;
注:程序概要分析工具是分析代码性能的工具。
2. gcov能做什么?
gcov可以统计
-
每一段代码(section code)的耗时(执行时间)
因此,gcov可以帮你优化代码,当然这个优化动作还是应该有开发者完成。
3. 如何使用gcov?
笔者也以gcov的manual页自带的例子为例,代码(没有做任何改动)如下。
filename: test.c
3.1 使用gcov的3个阶段
(1) 编译
# gcc -fprofile-arcs -ftest-coverage -o test test.c
# ls
test test.c test.gcno
-fprofile-arcs -ftest-coverage告诉编译器生成gcov需要的额外信息,并在目标文件中插入gcov需要的extra profiling information。因此,该命令在生成可执行文件test的同时生成test.gcno文件(gcov note文件)。
(2) 收集信息
# ./test
Success
# ls
test test.c test.gcda test.gcno
执行该程序,生成test.gcda文件(gcov data文件)。
(3) 报告
# gcov test.c
File 'test.c'
Lines executed:87.50% of 8
test.c:creating 'test.c.gcov'
# ls
test test.c test.c.gcov test.gcda test.gcno
生成test.c.gcov文件,该文件记录了每行代码被执行的次数。
test.c.gcov文件内容如下,蓝色表示笔者添加的注释。
-: 0:Source:test.c
-: 0:Graph:test.gcno
-: 0:Data:test.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:#include //前面的数字表明该clause被执行的次数,下同
-: 2:
-: 3:int main (void)
1: 4:{
-: 5: int i, total;
-: 6:
1: 7: total = 0;
-: 8:
11: 9: for (i = 0; i < 10; i++) //前面的数字11表明该clause被执行11次
10: 10: total += i;
-: 11:
1: 12: if (total != 45)
#####: 13: printf ("Failure/n");
-: 14: else
1: 15: printf ("Success/n");
1: 16: return 0;
-: 17:}
-: 18:
3.2 gcov的选项
gcov的选项不多,也好理解,此处选3个典型的选项并结合例子加以说明。
(1) -a, --all-blocks
在.gcov文件中输出每个基本快(basic block)的执行次数。如果没有-a选项,则输出'main'函数这个block的执行次数,如上所示。使用该选项可以
Write individual execution counts for every basic block. Normally gcov outputs execution counts only for the main blocks of a line. With this option you can determine if blocks within a single line are not being executed.
# gcov -a test.c
File 'test.c'
Lines executed:87.50% of 8
test.c:creating 'test.c.gcov'
Test.c.gcov文件内容。
-: 0:Source:test.c
-: 0:Graph:test.gcno
-: 0:Data:test.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:#include
-: 2:
-: 3:int main (void)
1: 4:{
-: 5: int i, total;
-: 6:
1: 7: total = 0;
-: 8:
11: 9: for (i = 0; i < 10; i++)
1: 9-block 0
10: 9-block 1
11: 9-block 2
10: 10: total += i;
-: 11:
1: 12: if (total != 45)
1: 12-block 0
#####: 13: printf ("Failure/n");
$$$$$: 13-block 0
-: 14: else
1: 15: printf ("Success/n");
1: 15-block 0
1: 16: return 0;
1: 16-block 0
-: 17:}
-: 18:
(2) -b, --branch-probabilities
在.gcov文件中输出每个分支的执行频率,并有分支统计信息。
# gcov -b test.c
File 'test.c'
Lines executed:87.50% of 8
Branches executed:100.00% of 4
Taken at least once:75.00% of 4
Calls executed:50.00% of 2
test.c:creating 'test.c.gcov'
-: 0:Source:test.c
-: 0:Graph:test.gcno
-: 0:Data:test.gcda
-: 0:Runs:1
-: 0:Programs:1
-: 1:#include
-: 2:
-: 3:int main (void)
function main called 1 returned 100% blocks executed 86%
1: 4:{
-: 5: int i, total;
-: 6:
1: 7: total = 0;
-: 8:
11: 9: for (i = 0; i < 10; i++)
branch 0 taken 91%
branch 1 taken 9% (fallthrough)
10: 10: total += i;
-: 11:
1: 12: if (total != 45)
branch 0 taken 0% (fallthrough)
branch 1 taken 100%
#####: 13: printf ("Failure/n");
call 0 never executed
-: 14: else
1: 15: printf ("Success/n");
call 0 returned 100%
1: 16: return 0;
-: 17:}
-: 18:
(3) -c, --branch-counts
在.gcov文件中输出每个分支的执行次数。
# gcov -c test.c
File 'test.c'
Lines executed:87.50% of 8
test.c:creating 'test.c.gcov'
-c是默认选项,其结果与"gcov test.c"执行结果相同。
其他选项,请读者参考相关文档。
4. 小结
本文简单介绍了Linux平台GCC自带的代码覆盖率测试工具GCOV的基本情况是使用方法。详细研究需要参考官方文档或者一些研究者的论文。
Reference
Gcov的manual页
http://gcc.gnu.org/onlinedocs/gcc/Gcov.html
http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html
http://dev.firnow.com/course/6_system/linux/Linuxjs/20071129/88999.html
分享到:
相关推荐
通过深入研究Linux平台上的代码覆盖率测试,我们不仅了解了GCOV和LCOV这样的关键工具,还掌握了如何使用它们来优化我们的测试策略,提升软件质量。代码覆盖率测试是一项复杂但至关重要的任务,它需要我们不断学习和...
在Linux平台上,gcov是GCC提供的一个覆盖率测试工具,用于分析C/C++代码的覆盖率,包括语句覆盖、函数覆盖和分支覆盖。gcov通过生成sourcefile.gcov文件,显示源代码中每一行执行的次数,帮助开发者了解代码执行情况...
使用gcov完成代码覆盖率的测试.Gcov作为gnu/gcc工作组件之一,是一款的免费的代码覆盖率测试工具,而且可以结合lcov生成美观的html的测试报表。本文介绍一些gcov的使用方法,基本原理,一些实际中可能会遇到的问题...
1. **集成代码覆盖率工具**:插件通常会与像lcov、gcov或者llvm-cov这样的代码覆盖率工具进行集成,这些工具能生成覆盖率报告。 2. **颜色高亮**:在Vim中打开源代码时,插件会根据覆盖率数据将已执行的代码行、未...
本文档旨在详细介绍如何使用`gcov`工具对Linux内核进行代码覆盖率测试。它不仅涵盖了Linux 2.4内核版本,还包含了对2.6版本的支持,是工程师在进行内核优化时的重要参考资料之一。 #### 一、源码与补丁文件 - **...
Linux平台下,GCOV是一个常用的轻量级覆盖率测试工具,与GCC编译器结合,可以实现对C和C++代码的语句覆盖和分支覆盖测试。 GCOV的工作原理是通过GCC编译器在编译时插入特殊标记,然后在程序运行时收集这些标记的...
- **代码覆盖率测试**:gcov 可以帮助开发者了解哪些代码已经被执行,哪些代码尚未被执行,这对于确保软件质量非常重要。 - **语句覆盖和分支覆盖**:它可以检测到代码中的每个语句是否被执行以及条件分支是否被完全...
轻量级覆盖率测试工具GCOV在使用上具有操作复杂繁琐的弊端.本文所述的设计基于GCOV覆盖率测试的原理,依据shell脚本批处理的特点将各部分操作封装为脚本工具;通过Expect脚本工具对上一操作是否成功进行断言,实现各...
本文将探讨如何在C++环境中进行单元测试,并使用工具如GCC、CMake、Google Test以及gcov和lcov来生成测试报告和代码覆盖率。 **Google Test** Google Test是Google开发的一个开源的C++测试框架,它遵循xUnit架构,...
GCC(GNU Compiler Collection)提供的静态分析工具(如gcov、gprof)可以生成代码覆盖率报告和性能剖析数据,帮助我们识别代码中的瓶颈。动态分析工具,如Valgrind,可检测内存泄漏、非法内存访问等问题,进一步...
6. 测试覆盖率分析:为了确保测试全面,可以使用覆盖率工具(如gcov、lcov或Python的coverage.py)来测量代码被测试的程度。高覆盖率意味着更少的未测试代码,减少了隐藏错误的可能性。 7. 回归测试:当代码有新的...
内核代码覆盖率是指通过测试执行到的内核代码的比例,这是评估测试完整性的关键指标之一。 - **gcov**:LTP提供了一个名为gcov的工具来帮助收集内核代码的覆盖信息。 - **lcov**:LTP还提供了lcov工具,它可以将...
分析代码覆盖率就是为了 本文主要结合gdb和gcov开源工具,在linux环境下进行白盒测试。 白盒测试的主要目的有两点,一点是验证软件需要是否在代码中被覆盖,二是进行代码覆盖率分析,尽可能多的覆盖所有软件代码...
lcov-1.14工具是Linux环境下与gcov一起使用的可视化工具,它主要用于帮助开发者理解和分析代码覆盖率。gcov是GCC编译器套件的一部分,它可以生成代码覆盖率报告,而lcov则提供了更友好的界面和更强大的功能,使得...
- **简介**: ggcov是一款GNU gcov的GUI前端,用于代码覆盖率分析。 3. **kprof** - **官网**: http://kprof.sourceforge.net/ - **简介**: kprof是GNU gprof的GUI前端,用于性能分析。 4. **Kcachegrind** - **...
gcov 和 gprof 是两种常用的代码覆盖和性能 profiling 工具,分别可以对代码的覆盖率和执行时间进行分析和优化。 嵌入式 Linux 应用程序调试方法是一份重要的调试指南,对于嵌入式 Linux 应用程序的开发和调试提供...
3. gcov:代码覆盖率工具。 4. FindBugs:基于字节码分析,侧重运行时错误检测。 5. SonarLint:实时代码质量分析。 6. TscanCode:静态代码安全扫描工具。 **持续集成工具**加速开发流程,确保每次代码变更后都能...
4. 代码覆盖率工具:如gcov、lcov,用于评估测试覆盖度,确保测试充分。 5. 单元测试框架:像是Unity、CppUTest,针对C/C++代码进行单元测试,确保每个模块的功能正确。 三、自动化调试与测试 1. 自动化脚本:...
Gcov是一个用于测试覆盖率分析的工具,可以帮助开发者了解代码的执行情况,提高代码效率。 编译一个简单的程序,如“Hello World”,可以使用以下命令: ```bash g++ -O2 test.cc -o test ``` 对于动态链接库的创建...