我有一个程序,其中花费了大量时间来加载和保存数据。现在我想知道每个函数在总运行时间百分比方面花费了多少时间。但是,我想从分析器考虑的总时间中排除加载和保存函数所花费的时间。有没有办法使用gprof或任何其他流行的探查器?
答案 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
是一个奇妙的可视化/导航工具。我几乎不能推荐它:
答案 1 :(得分:5)
我会考虑使用比gprof
更现代的内容,例如OProfile
。使用opreport
生成报告时,您可以使用--exclude-symbols
选项排除您不感兴趣的功能。
有关详细信息,请参阅OProfile webpage;但是,如需快速入门指南,请参阅OProfile docs页面。
答案 2 :(得分:2)
Zoom为Linux提供了系统范围的时间配置文件。如果您的代码在i / o中花费了大量时间,那么该时间将不会显示在CPU的时间配置文件中。或者,如果您想考虑在i / o上花费的时间,请尝试“线程时间配置文件”。
答案 3 :(得分:0)
对于简单的基本解决方案,您可能希望将日志数据发送到csv文件。
e.g。格式[functionKey,timeStamp \ n]
...然后在Excel中加载它。获取增量,然后根据if函数包含或排除。没有什么花哨。从好的方面来说,你可以相当便宜地获得一些可视化。