我有一个程序花费大量时间加载和保存数据。现在我想知道每个函数在总运行时间的百分比方面花费了多少时间。但是,我想从分析器考虑的总时间中排除加载和保存函数所花费的时间。有没有办法使用 gprof 或任何其他流行的分析器来做到这一点?
问问题
551 次
4 回答
12
同样,您可以使用
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 也带有分支预测统计信息)callgrind_annotate
:。
优秀的工具kcachegrind
是一个了不起的可视化/导航工具。我几乎不能推荐它:
于 2011-07-07T21:53:12.390 回答
5
我会考虑使用比 更现代的东西gprof
,例如OProfile
. 使用生成报告时,opreport
您可以使用--exclude-symbols
选项排除您不感兴趣的功能。
有关详细信息,请参阅OProfile 网页;但是,有关快速入门指南,请参阅OProfile 文档页面。
于 2011-07-07T21:46:15.253 回答
2
RotateRight 的Zoom为 Linux 提供了系统范围的时间配置文件。如果您的代码在 i/o 上花费大量时间,那么该时间将不会显示在 CPU 的时间配置文件中。或者,如果您想考虑花费在 i/o 上的时间,请尝试“线程时间配置文件”。
于 2011-07-20T18:00:37.623 回答
0
对于一个简单的基本解决方案,您可能需要将数据记录到 csv 文件中。
例如格式 [functionKey,timeStamp\n]
...然后将其加载到 Excel 中。获取增量,然后根据 if 函数包含或排除。没有什么花哨。从好的方面来说,你可以相当便宜地获得一些可视化。
于 2011-07-07T21:53:11.753 回答