在Linux中评测部分程序

在Linux中评测部分程序,linux,profiler,gprof,Linux,Profiler,Gprof,我有一个程序,其中花费了大量时间加载和保存数据。现在我想知道每个函数在总运行时间中所占的百分比。但是,我想从分析器考虑的总时间中排除加载和保存函数所花费的时间。有没有办法使用GPROF或任何其他流行的剖析器? < P>我会考虑使用比GPRO更现代的东西,比如 oprFoiel。使用opreport生成报告时,可以使用--exclude symbols选项排除您不感兴趣的函数 有关详细信息,请参阅;但是,有关快速入门指南,请参见该页。有关简单的基本解决方案,您可能希望将日志数据保存到csv文件中

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

< P>我会考虑使用比GPRO更现代的东西,比如<代码> oprFoiel。使用
opreport
生成报告时,可以使用
--exclude symbols
选项排除您不感兴趣的函数


有关详细信息,请参阅;但是,有关快速入门指南,请参见该页。

有关简单的基本解决方案,您可能希望将日志数据保存到csv文件中

e、 g.格式[功能键,时间戳\n]

。。。然后将其加载到Excel中。获取增量,然后基于if函数包含或排除。没什么特别的。好的方面是,你可以以相当便宜的价格获得一些可视化效果。

同样,你也可以使用

valgrind --tool=callgrind --collect-atstart=no --toggle-collect=<function> 
要获取指令级别统计信息,请执行以下操作:

--collect-jumps=yes
--dump-instr=yes
或者,您可以动态地“远程控制”它:
callgrind\u control
或注释您的源代码(IIRC还带有分支预测统计数据):
callgrind\u注释

出色的工具
kcachegrind
是一款出色的可视化/导航工具。我很难推荐它:


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

+1将提供更多,如果我可以的话
valgrind
kcachegrind
是一对神奇的组合!谢谢你的回答,但我现在很忙。目前不想学习新的分析器,但OProfile是一个系统范围的分析器。我认为它不能为单个流程分析提供非常准确的结果;但你可以过滤它,为单个应用程序二进制文件或进程提供数据(它可以标记它从进程收集的所有数据)。根据我的经验,这非常准确。我现在很忙,所以如果gprof中存在一些简单的解决方案,那将是一件好事。这就是
gprof
实际上擅长的(假设没有递归),因为它在I/O期间不采样。
--collect-jumps=yes
--dump-instr=yes