Code Coverage系列(三)gcov 是什么?做什么?两个参数?检测原理?gcno文件内容?gcda文件内容? Code Coverage系列三gcov 是什么做什么两个参数检测原理gcno文件内容gcda文件内容1. gcov 是什么2. gcov 能做什么3. gcov 两个编译参数4. gcov 检测代码覆盖率的原理-gcov_initgcov_exit5. gcno文件内容6. gcda文件内容1. gcov 是什么gcov是一个测试代码覆盖率的工具发现程序的未测试部分是一个命令行方式的控制台程序。需要结合 lcov, gcovr ,genhtml 等前端图形工具才能实现统计数据图形化命令gcc -fprofile-arcs -ftest-coverage hello.c2. gcov 能做什么每一行代码运行的次数哪些代码执行了, 哪些没有被执行gcov创建一个sourcefile.gcov 的日志文件此文件标识源文件sourcefile.c每一行执行的次数3. gcov 两个编译参数-fprofile-arcs 在运行编译过的程序的时候会产生 .gcda 文件 它包含了弧跳变的次数等信息 -ftest-coverage 在编译的时候产生.gcno 文件 它包含了重建基本块图和相应的块的源码的行号的信息4. gcov 检测代码覆盖率的原理-gcov_initgcov_exitGcc中指定-ftest-coverage 等覆盖率测试选项后gcc 会* 在输出目标文件中留出一段存储区保存统计数据 * 在源代码中每行可执行语句生成的代码之后附加一段更新覆盖率统计结果的代码,也就是前文说的插桩 * 在最终可执行文件中进入用户代码 main 函数之前调用 gcov_init 内部函数初始化统计数据区 * 并将gcov_exit 内部函数注册为 exit handlers用户代码调用 exit 正常结束时 * gcov_exit 函数得到调用其继续调用 __gcov_flush 函数输出统计数据到 *.gcda 文件中5. gcno文件内容6. gcda文件内容