Pau*_*ham 4 c c++ macos gcc profiling
我需要分析一个程序,看看是否需要对性能进行任何更改.我怀疑有需要,但先测量是要走的路.这不是那个程序,但它说明了我遇到的问题:
#include <stdio.h>
int main (int argc, char** argv)
{
FILE* fp = fopen ("trivial.c", "r");
if (fp)
{
char line[80];
while (fgets (line, 80, fp))
printf (line);
fclose (fp);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是我用它做的:
% gcc trivial.c -pg -o trivial
% ./trivial
...
% gprof trivial gmon.out
Run Code Online (Sandbox Code Playgroud)
当然,这是一个微不足道的计划,但我认为它会在分析雷达上产生某种昙花一现.它没有:
called/total parents
index %time self descendents called+self name index
called/total children
0.00 0.00 1/1 __start [1704]
[105] 0.0 0.00 0.00 1 _main [105]
-----------------------------------------------
% cumulative self self total
time seconds seconds calls ms/call ms/call name
0.0 0.00 0.00 1 0.00 0.00 _main [105]
Index by function name
[105] _main
Run Code Online (Sandbox Code Playgroud)
谁能指导我在这里?我希望输出反映它至少调用14次fgets和printf,并且它确实击中了磁盘 - 肯定会有一些测量时间.
当我在真实程序上运行相同的命令时,我会列出更多的功能,但即使这样,它也不是一个完整的列表 - 只是一个示例.
也许gprof不是正确的工具.什么是?
这是在OS X Leopard上.
编辑:我运行了真正的程序,得到了这个:
% time real_program
real 4m24.107s
user 2m34.630s
sys 0m38.716s
Run Code Online (Sandbox Code Playgroud)
我认为您可以尝试各种Valgrind工具,尤其是callgrind(用于为您的程序中发生的每次通话获取通话计数和包含成本).
valgrind输出有各种不错的可视化工具.我不知道OS X的特定工具.
默认情况下gprof显示有限的数据.这很好.看看你的输出 - 它只提到main(这是默认值).现在,看一下calls专栏 - 这就是你想要的.但是对于其他功能,请尝试:
gprof -e main -f printf -f fgets trivial > gprof.output
Run Code Online (Sandbox Code Playgroud)
这是一些命令的链接.另外,试试man gprof你的系统.以下是解释数据的方法.
另外,查看ltrace,strace并且ptrace(如果可用 - 我不再回想起所有这些都在OSX上) - 它们很有趣!
| 归档时间: |
|
| 查看次数: |
717 次 |
| 最近记录: |