GCOVLCOV,GPROF

GCOVLCOV,GPROF,第1张

在使用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文件即可


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12028129.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存