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