标签:cc utils Linux gcno 编译 gtest Gcov gcda hxf0223
1. GCOV
GCOV是GCC自带的代码覆盖工具,GCOV。
- 在 GCC 编译的时加入特殊的编译选项,生成可执行文件,和 *.gcno;
- 运行(测试)生成的可执行文件,生成了 *.gcda 数据文件;
- 有了 *.gcno 和 *.gcda,通过源码生成 gcov 文件,最后生成代码覆盖率报告。
2. 生成 gcno 及 gcda 文件:本机编译运行
CMakeLists.txt
cmake_minimum_required(VERSION 3.0)
project(gtest_sample C CXX)
# cmake set info
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set( GCC_COVERAGE_COMPILE_FLAGS "-g -O0 -coverage -fprofile-arcs -ftest-coverage" )
set( GCC_COVERAGE_LINK_FLAGS "-coverage -lgcov" )
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COVERAGE_COMPILE_FLAGS}" )
set( CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_COVERAGE_LINK_FLAGS}" )
set( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin" )
set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin" )
include_directories("${PROJECT_SOURCE_DIR}/include")
link_directories(${PROJECT_SOURCE_DIR}/bin)
add_subdirectory(utils)
add_subdirectory(test)
- 在build目录下,执行cmake .. && make 之后,在相应的obj目录下生成 .gcno 文件:
find -name "*.gcno"
./build/test/CMakeFiles/gtest_sample.dir/main.cc.gcno
./build/utils/CMakeFiles/dcl_utils.dir/utils_logging.cc.gcno
./build/utils/CMakeFiles/dcl_utils.dir/utils_gtest.cc.gcno
- 在运行测试用例 gtest_sample 之后,在相应的obj目录下生成 .gcda 文件:
find -name "*.gcda"
./build/test/CMakeFiles/gtest_sample.dir/main.cc.gcda
./build/utils/CMakeFiles/dcl_utils.dir/utils_gtest.cc.gcda
./build/utils/CMakeFiles/dcl_utils.dir/utils_logging.cc.gcda
- 改变 .gcda 文件目录
使用 GCOV_PREFIX 改变 .gcda 文件存放的根目录;使用 GCOV_PREFIX_STRIP 消除 .gcda 存放目录。
比如 main.cc.gcda 实际存放目录为九级:/home/hxf0223/work/build/test/CMakeFiles/gtest_sample.dir/main.cc.gcda。
操作如下:
export GCOV_PREFIX=$PWD
export GCOV_PREFIX_STRIP=9
再运行 gtest_sample (可以将gtest_sample拷贝到其他目录如 ~/tmp/)之后:
ls -lh
total 7.0M
-rwxr-xr-x 1 hxf0223 hxf0223 2.6M May 5 11:04 gtest_sample
-rw-r--r-- 1 hxf0223 hxf0223 4.3M May 5 11:04 libdcl_utils.a
-rw-r--r-- 1 hxf0223 hxf0223 4.6K May 5 11:10 main.cc.gcda
-rw-r--r-- 1 hxf0223 hxf0223 134K May 5 11:10 utils_gtest.cc.gcda
-rw-r--r-- 1 hxf0223 hxf0223 2.4K May 5 11:10 utils_logging.cc.gcda
3. 交叉编译及运行
TODO:
4. 收集数据,生成报告
TODO:
5. 参考
- 使用 Gcov 和 LCOV 度量 C/C++ 项目的代码覆盖率
- GCC Coverage代码分析-.gcda/.gcno文件及其格式分析
- Detailed guide on using gcov with CMake/CDash?
- gtest_gcov_sample
标签:cc,utils,Linux,gcno,编译,gtest,Gcov,gcda,hxf0223 来源: https://www.cnblogs.com/vaughnhuang/p/16224069.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。