`

Linux平台代码覆盖率测试工具GCOV简介

 
阅读更多

1. gcov是什么?

2. gcov能做什么?

3. 如何使用gcov

3.1 使用gcov3个阶段

(1) 编译

(2) 收集信息

(3) 报告

3.2 gcov的选项

(1) -a, --all-blocks

(2) -b, --branch-probabilities

(3) -c, --branch-counts

4. 小结

 

1. gcov是什么?

 

  • Gcov is GCC Coverage
  • 是一个测试代码覆盖率的工具
  • 是一个命令行方式的控制台程序
  • 伴随GCC发布配合GCC共同实现对C/C++文件的语句覆盖和分支覆盖测试
  • 与程序概要分析工具(profiling tool,例如gprof)一起工作,可以估计程序中哪一段代码最耗时;

注:程序概要分析工具是分析代码性能的工具。

 

2. gcov能做什么?

 

gcov可以统计

  • 每一行代码的执行频率
  • 实际上哪些代码确实被执行了
  • 每一段代码(section code)的耗时(执行时间)

因此,gcov可以帮你优化代码,当然这个优化动作还是应该有开发者完成。

 

3. 如何使用gcov

 

笔者也以gcovmanual页自带的例子为例,代码(没有做任何改动)如下。

 

filename: test.c

Linux平台代码覆盖率测试工具GCOV简介

3.1 使用gcov3个阶段

 

(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

Gcovmanual

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平台代码覆盖率测试

    通过深入研究Linux平台上的代码覆盖率测试,我们不仅了解了GCOV和LCOV这样的关键工具,还掌握了如何使用它们来优化我们的测试策略,提升软件质量。代码覆盖率测试是一项复杂但至关重要的任务,它需要我们不断学习和...

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

    在Linux平台上,gcov是GCC提供的一个覆盖率测试工具,用于分析C/C++代码的覆盖率,包括语句覆盖、函数覆盖和分支覆盖。gcov通过生成sourcefile.gcov文件,显示源代码中每一行执行的次数,帮助开发者了解代码执行情况...

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

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

    linux-代码覆盖率vim插件

    1. **集成代码覆盖率工具**:插件通常会与像lcov、gcov或者llvm-cov这样的代码覆盖率工具进行集成,这些工具能生成覆盖率报告。 2. **颜色高亮**:在Vim中打开源代码时,插件会根据覆盖率数据将已执行的代码行、未...

    Linux Kernel GCOV - tool analysis

    本文档旨在详细介绍如何使用`gcov`工具对Linux内核进行代码覆盖率测试。它不仅涵盖了Linux 2.4内核版本,还包含了对2.6版本的支持,是工程师在进行内核优化时的重要参考资料之一。 #### 一、源码与补丁文件 - **...

    Linux平台下代码覆盖率报告自动化输出设计.pdf

    Linux平台下,GCOV是一个常用的轻量级覆盖率测试工具,与GCC编译器结合,可以实现对C和C++代码的语句覆盖和分支覆盖测试。 GCOV的工作原理是通过GCC编译器在编译时插入特殊标记,然后在程序运行时收集这些标记的...

    linux gcov 工具详细介绍

    - **代码覆盖率测试**:gcov 可以帮助开发者了解哪些代码已经被执行,哪些代码尚未被执行,这对于确保软件质量非常重要。 - **语句覆盖和分支覆盖**:它可以检测到代码中的每个语句是否被执行以及条件分支是否被完全...

    Linux平台下代码覆盖率报告自动化输出设计

    轻量级覆盖率测试工具GCOV在使用上具有操作复杂繁琐的弊端.本文所述的设计基于GCOV覆盖率测试的原理,依据shell脚本批处理的特点将各部分操作封装为脚本工具;通过Expect脚本工具对上一操作是否成功进行断言,实现各...

    C++语言的单元测试与代码覆盖率

    本文将探讨如何在C++环境中进行单元测试,并使用工具如GCC、CMake、Google Test以及gcov和lcov来生成测试报告和代码覆盖率。 **Google Test** Google Test是Google开发的一个开源的C++测试框架,它遵循xUnit架构,...

    测试与优化--基于Linux的代码分析与研究

    GCC(GNU Compiler Collection)提供的静态分析工具(如gcov、gprof)可以生成代码覆盖率报告和性能剖析数据,帮助我们识别代码中的瓶颈。动态分析工具,如Valgrind,可检测内存泄漏、非法内存访问等问题,进一步...

    行业分类-设备装置-Linux平台下CLI模块的代码自动化测试方法.zip

    6. 测试覆盖率分析:为了确保测试全面,可以使用覆盖率工具(如gcov、lcov或Python的coverage.py)来测量代码被测试的程度。高覆盖率意味着更少的未测试代码,减少了隐藏错误的可能性。 7. 回归测试:当代码有新的...

    Linux压力测试与LTP体系结构

    内核代码覆盖率是指通过测试执行到的内核代码的比例,这是评估测试完整性的关键指标之一。 - **gcov**:LTP提供了一个名为gcov的工具来帮助收集内核代码的覆盖信息。 - **lcov**:LTP还提供了lcov工具,它可以将...

    linux白盒测试流程

    分析代码覆盖率就是为了  本文主要结合gdb和gcov开源工具,在linux环境下进行白盒测试。  白盒测试的主要目的有两点,一点是验证软件需要是否在代码中被覆盖,二是进行代码覆盖率分析,尽可能多的覆盖所有软件代码...

    lcov-1.14 tools

    lcov-1.14工具是Linux环境下与gcov一起使用的可视化工具,它主要用于帮助开发者理解和分析代码覆盖率。gcov是GCC编译器套件的一部分,它可以生成代码覆盖率报告,而lcov则提供了更友好的界面和更强大的功能,使得...

    Linux 开发环境工具 指导

    - **简介**: ggcov是一款GNU gcov的GUI前端,用于代码覆盖率分析。 3. **kprof** - **官网**: http://kprof.sourceforge.net/ - **简介**: kprof是GNU gprof的GUI前端,用于性能分析。 4. **Kcachegrind** - **...

    嵌入式linux应用程序调试方法

    gcov 和 gprof 是两种常用的代码覆盖和性能 profiling 工具,分别可以对代码的覆盖率和执行时间进行分析和优化。 嵌入式 Linux 应用程序调试方法是一份重要的调试指南,对于嵌入式 Linux 应用程序的开发和调试提供...

    我们将常用的测试工具分为10类.docx

    3. gcov:代码覆盖率工具。 4. FindBugs:基于字节码分析,侧重运行时错误检测。 5. SonarLint:实时代码质量分析。 6. TscanCode:静态代码安全扫描工具。 **持续集成工具**加速开发流程,确保每次代码变更后都能...

    嵌入式软件测试包括环境工具自动化

    4. 代码覆盖率工具:如gcov、lcov,用于评估测试覆盖度,确保测试充分。 5. 单元测试框架:像是Unity、CppUTest,针对C/C++代码进行单元测试,确保每个模块的功能正确。 三、自动化调试与测试 1. 自动化脚本:...

    linux内核编译详解

    Gcov是一个用于测试覆盖率分析的工具,可以帮助开发者了解代码的执行情况,提高代码效率。 编译一个简单的程序,如“Hello World”,可以使用以下命令: ```bash g++ -O2 test.cc -o test ``` 对于动态链接库的创建...

Global site tag (gtag.js) - Google Analytics