如何使用callgrind只分析一段时间的程序执行?

sup*_*erb 20 profiling valgrind callgrind

我想使用valgrind进行一些分析,因为它不需要重新构建程序.(我要配置的程序已经使用"-g"构建)

但是valgrind(callgrind)很慢......所以这就是我要做的事情:

  1. 启动服务器(我想配置该服务器)
  2. 一种附加到该服务器
  3. 在服务器上执行某些操作之前,请先开始收集配置文件数据
  4. 操作完成后,结束收集配置文件数据
  5. 分析分析数据.

我可以在Solaris上使用sun studio来做这种事情.(使用dbx).我只想知道是否可以使用valgrind(callgrind)做同样的事情?

谢谢

Doo*_*day 34

您应该查看callgrind文档,并阅读callgrind_control.

  1. 启动您的应用: valgrind --tool=callgrind --instr-atstart=no your_server.x
  2. 见1.
  3. 开始收集的个人资料数据:callgrind_control -i on
  4. 最终收集的个人资料数据:callgrind_control -i off
  5. 使用kcachegrindcallgrind_annotate/cg_annotate分析数据


Rus*_*lan 10

对于剖析只有一些功能,你还可以找到有用的CALLGRIND_START_INSTRUMENTATIONCALLGRIND_STOP_INSTRUMENTATION<valgrind/callgrind.h>头部和使用callgrind的--instr-atstart=no在建议选项末日的答案.


Pau*_*l R 4

你没有说是什么操作系统 - 我假设是 Linux - 在这种情况下你可能想看看 oprofile (免费)或Zoom(不是免费的,但你可以获得评估许可证),两者都是采样分析器,并且可以配置文件现有代码而无需重新编译。Zoom 更好、更容易使用(它有一个 GUI 和一些不错的附加功能),但您的系统上可能已经有 oprofile。