在使用gcov工具前,请确认编译程序时并没有用到“优化”选项。
gcc -fprofile-arcs -ftest-coverage sourcefile.c -o sourcefile
此时目录下会生成 sourcefile.gcno
./sourcefile
此时目录下会生成 sourcefile.gcda
gcov sourcefile.c
此时目录下会生成 sourcefile.c.gcov
gcov中记录的执行次数是累计的,即如果不删除之前的.gcda文件就再次执行程序,则记录的执行次数会累加。
该工具需要有gcov生成的.gcno和.gcda文件,不需要.gcov
lcov --capture --directory projrct-dir --output-file coverage.info
genhtml coverage.info --output-derectory out
以上两行命令的简化
lcov -c -d project_dir -o coverage.info
genhtml coverage.info -o out
用浏览器打开out目录下的index.html即可。
用户手册
在编译时加上 -pg 选项。
运行可执行程序,此时会在同路径下生成gmon.out文件。
gprof executable_name gmon.out 输出分析报告。
分析报告内容:
flat profile 表格显示每个函数消耗的处理器时间、调用次数等。
call graph 表格显示每个函数的调用关系,调用花费了多少时间。
如果嫌gprof的输出不太直观,可以使用 gprof2dot 工具,自动用dot语言画出流程图。
c/c++代码覆盖率总结,具体如下1 安装工具:
安装lcov
[html] view plain copy
wget http://sourceforge.net/projects/ltp/files/Coverage%20Analysis/LCOV-1.12/lcov-1.12.tar.gz
解压进入目录make install即可
安装grove
[html] view plain copy
wget https://github.com/gcovr/gcovr/archive/3.2.tar.gz
解压cp */scripts/gcovr /usr/bin即可
2 配置CMake文件
在CMakeList.txt增加如下配置
编译时增加参数
[html] view plain copy
-DENABLE_COVERAGE=ON
注意gcda和gcno文件,必要时交叉编译,指定gcda文件路径
[html] view plain copy
export GCOV_PREFIX="/src/gcov"
3 执行case,生成代码覆盖率文件
1 编译后拷贝bin文件启动,执行测试用例;
2 case运行完后,需要执行一次exit,才能生成gcda和gcno文件,如下
[html] view plain copy
pid=`ps -ef | grep $SERVER_NAME | grep -v "grep" | awk '{print $2}'`
echo $pid
gdb -q attach $pid
p __gcov_flush()
查看编译时的目录 即可看到gcno和gcda文件,可用来生成覆盖率报告。
4 生成报告
gcovr生成报告
xml文件
[html] view plain copy
gcovr -r . --output coverage.xml -xml-pretty
html文件:
[html] view plain copy
gcovr -r . --html-details -o coverage.html
lcov生成报告
html报告:
[html] view plain copy
lcov -c -o result.info -b . -d .//生成info文件
genhtml result.info -o Report//生成报告,在windows下打开里面的index.html文件即可
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)