附加到正在运行的进程的Profiler?

时间:2011-02-21 21:49:22

标签: c performance gdb profiler d

我需要一个适用于Windows和Linux的良好的分析器(它们不必是相同的;每个操作系统的单独建议都可以),它们可以附加到一个已经运行的进程中,该进程没有在任何“特殊”中编译方式,并给我统计过程大部分时间花在哪些功能上。我有一些长期运行的科学代码,我希望得到它在大部分时间花在执行的各个阶段的快照,并且是无需运行整个程序即可获得结果

我正在使用的编译器(Digital Mars D)附带一个仪器分析器。这对我正在运营的工作来说太慢了。由于我只对识别主要瓶颈感兴趣,因此我想要快速且易于使用的东西,即使它只是大致准确。理想情况下,它还应该能够同时分析所有线程并为我提供汇总报告。

在Linux上,我一直在使用GDB作为穷人的采样分析器(暂停我的应用程序几次并查看它的功能)。基本上,我正在寻找一个更自动化的版本。

最后一个要求:在Linux上,它必须易于安装而没有root权限,因为我将在我没有root权限的服务器上运行它。

编辑:虽然代码是用D编写的,D编译模型等与C类似,但为C编写的工具应该可以正常工作。

5 个答案:

答案 0 :(得分:18)

如果你有一个相当新的内核,你可以使用perf

perf record -p <pid> -g

...然后perf report一旦你收集了足够的样本。

答案 1 :(得分:3)

您正在寻找oprofile:

http://oprofile.sourceforge.net/

答案 2 :(得分:2)

对于Linux,请尝试Zoom。另外,对于粗略的工作,lsstack对于发现瓶颈非常有用。

答案 3 :(得分:2)

我没有尝试过,但是xProf是专门为D编写的。它是一个统计分析器。

答案 4 :(得分:0)

Windows性能记录器(WPR)和Windows性能分析器(WPA)是Windows 8及更高版本的最佳性能分析工具。 Xperf在Windows 7上运行得非常好。