在Linux中分析部分程序

时间:2011-07-07 21:43:34

标签: linux profiler gprof

我有一个程序,其中花费了大量时间来加载和保存数据。现在我想知道每个函数在总运行时间百分比方面花费了多少时间。但是,我想从分析器考虑的总时间中排除加载和保存函数所花费的时间。有没有办法使用gprof或任何其他流行的探查器?

4 个答案:

答案 0 :(得分:11)

同样可以使用

valgrind --tool=callgrind --collect-atstart=no --toggle-collect=<function> 

其他选项:

--instr-atstart    # to avoid runtime overhead while not profiling

获取指令级别统计信息:

--collect-jumps=yes
--dump-instr=yes

或者您可以动态“远程控制”它: callgrind_control 或注释您的源代码(IIRC也包含分支预测统计信息): {{1 }} 即可。

优秀的工具callgrind_annotate是一个奇妙的可视化/导航工具。我几乎不能推荐它:

enter image description here

答案 1 :(得分:5)

我会考虑使用比gprof更现代的内容,例如OProfile。使用opreport生成报告时,您可以使用--exclude-symbols选项排除您不感兴趣的功能。

有关详细信息,请参阅OProfile webpage;但是,如需快速入门指南,请参阅OProfile docs页面。

答案 2 :(得分:2)

RotateRight的

Zoom为Linux提供了系统范围的时间配置文件。如果您的代码在i / o中花费了大量时间,那么该时间将不会显示在CPU的时间配置文件中。或者,如果您想考虑在i / o上花费的时间,请尝试“线程时间配置文件”。

答案 3 :(得分:0)

对于简单的基本解决方案,您可能希望将日志数据发送到csv文件。

e.g。格式[functionKey,timeStamp \ n]

...然后在Excel中加载它。获取增量,然后根据if函数包含或排除。没有什么花哨。从好的方面来说,你可以相当便宜地获得一些可视化。