6

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

4

4 回答 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 文件中。

例如格式 [f​​unctionKey,timeStamp\n]

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

于 2011-07-07T21:53:11.753 回答