2010-03-08 20 views
15

我想用valgrind做一些分析,因为它不需要重新编译程序。 (我要分析的程序已建立与“-g“)如何使用callgrind来分析只有一段时间的程序执行?

但是的valgrind(callgrind)是相当慢的......所以这是我做的事:

  1. 启动服务器(我想到配置文件服务器)
  2. 一种附加到服务器
  3. 我做服务器的一些操作前,开始收集的个人资料数据的操作完成
  4. 后,最终收集的个人资料数据
  5. 分析分析数据。

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

感谢

+1

什么操作系统? – 2010-03-08 08:26:08

+0

是的,这是Linux – superb 2010-03-08 09:01:16

+0

我希望Valgrind不是您唯一的选择。 你有没有考虑过这种技术:(http://stackoverflow.com/questions/375913/what-c​​an-i-use-to-profile-c-code-in-linux/378024#378024) 你也可以使用* * pstack **或** lsstack **做同样的事情。对于金钱,你可以得到很好的RotateRight/Zoom。 – 2010-03-08 16:08:59

回答

4

你不说什么操作系统 - 我假设Linux的 - 在这种情况下,你可能想看看在oprofile的(免费)或Zoom(不是免费的,但你可以得到一个评估许可证) ,这两者都是采样分析器,可以在不重新编译的情况下分析现有代码。缩放更好,更易于使用(它有一个GUI和一些不错的附加功能),但是你的系统中可能已经有了oprofile。

+0

是的,我只是看到其他人推荐这2个工具。对我来说,使用valgrind的关键是它不是root访问,因为我使用公共服务器来执行分析... – superb 2010-03-08 08:32:54

+0

我认为你只需要root权限就可以安装*这些工具 - 你应该可以运行它们而不需要根访问,不是? (我使用一个普通的非root帐户的缩放,但这是本地分析,所以我不能确定远程分析案例。) – 2010-03-08 08:44:08

+0

我明白了,谢谢。但我仍然想知道是否可以使用valgrind来做同样的事情。有时当我无法重现性能问题时,我需要直接看看测试机,但是安装性能分析软件(它收集硬件计数器)可能会影响系统性能,并且很多基准线需要调整,这是不允许的。所以valgrind是如果我可以用我在问题中描述的方式使用它,仍然是最好的选择。 – superb 2010-03-08 08:51:44

27

你应该看看callgrind documentation,并阅读关于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. kcachegrind分析数据callgrind_annotate/cg_annotate
相关问题