25

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

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

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

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

谢谢

4

3 回答 3

41

您应该查看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分析数据
于 2010-07-21T13:01:44.973 回答
11

对于仅分析某些功能,您还可以从标题中找到有用的功能CALLGRIND_START_INSTRUMENTATION,并按照Doomsday's answer中的建议使用 callgrind 的选项。CALLGRIND_STOP_INSTRUMENTATION<valgrind/callgrind.h>--instr-atstart=no

于 2016-01-26T11:02:04.150 回答
4

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

于 2010-03-08T08:25:47.400 回答