gcov, lcov代码覆盖率工具使用说明

code cut

Posted by democheng on November 5, 2018

gcov

gcov是linux下进行代码覆盖测试的工具,随着gcc一起发布。

lcov

lcov是gcov的图形化前端工具,根据gcov生成的内容,处理成一颗完整的html树,包括概述、覆盖率百分百、图标等轻便直观的内容。

添加到CMakeList.txt

在根CMakeList.txt中添加ENABLE_GCOV选项:

OPTION(ENABLE_GCOV "Enable gcov (debug, Linux builds only)" OFF)
IF (ENABLE_GCOV AND NOT WIN32 AND NOT APPLE)
    SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage")
    SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage")
    SET(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} -fprofile-arcs -ftest-coverage -lgcov")
ENDIF()

cmake编译时记得加选项:

cmake -DCMAKE_BUILD_TYPE=Debug -DENABLE_GCOV=1 ..

生成分析文件

编译后就可以看到图文件 *.gcno(.gcno是由-ftest-coverage产生的,它包含了重建基本块图和相应的块的源码的行号的信息)

运行后,可以看到数据文件*.gcda(.gcda是由加了-fprofile-arcs编译参数的编译后的文件运行所产生的,它包含了弧跳变的次数和其他的概要信息)

基于CMakeLists.txt的工程一般在build文件夹下进行编译,在build文件夹下执行如下命令,生成html的中间文件:

lcov --capture --directory . --output-file  testHtml.info --test-name testHtml

在build文件夹下执行如下命令,在build文件夹下的result文件夹生成html文件:

genhtml -o result testHtml.info