GCOV/LCOV,GPROF

2019-10-11  本文已影响0人  SnC_

GCOV

在使用gcov工具前,请确认编译程序时并没有用到“优化”选项。

gcc -fprofile-arcs -ftest-coverage sourcefile.c -o sourcefile
此时目录下会生成 sourcefile.gcno
./sourcefile
此时目录下会生成 sourcefile.gcda
gcov sourcefile.c
此时目录下会生成 sourcefile.c.gcov

  • .gcno文件由 -ftest-coverage 选项产生。它包含重建基本块图的信息和相应块的源码行号。
  • .gcda文件由 -fprofile-arcs 选项产生。它包含跳转次数、计数器以及一些概要信息。
    这两个文件是运行gcov命令时需要用到的文件,与 object file 在同一路径下。 (若使用 -fprofile-dir 选项,则.gcda文件可以生成在不同的路径下)

gcov中记录的执行次数是累计的,即如果不删除之前的.gcda文件就再次执行程序,则记录的执行次数会累加。

LCOV

该工具需要有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即可。

GPROF

用户手册
在编译时加上-pg选项。
运行可执行程序,此时会在同路径下生成gmon.out文件。
gprof executable_name gmon.out 输出分析报告。

分析报告内容:
flat profile 表格显示每个函数消耗的处理器时间、调用次数等。

call graph 表格显示每个函数的调用关系,调用花费了多少时间。

gprof只能分析应用程序消耗的用户时间,无法得到内核空间的运行时间。
建议使用 time 命令来查看程序运行时间的组成
time executable_name

如果嫌gprof的输出不太直观,可以使用gprof2dot工具,自动用dot语言画出流程图。

上一篇 下一篇

猜你喜欢

热点阅读