就像标题所说,我想知道两个命令和它们产生的结果之间的区别.
从阅读本文我明白gprof需要一个额外的标志(-g,gdb需要相同的吗?),但这并没有给我一个关于分析器之间差异的答案.
gprof是专门发明的,因为prof只给你"自我时间"."自我时间"告诉您在每个例程中找到程序计数器的总时间的小部分.如果你需要考虑的唯一种类的"瓶颈"可以通过调用堆栈底部的剃须循环来解决,那就没问题了.
通过减少对子程序的调用次数,你可以解决什么样的"瓶颈"?gprof通过"向自己的时间"向呼叫者"收回",这应该可以帮助您找到.例程中的"包容时间"包括其"自我时间",以及它所调用的例程中的泡沫.这是一个简单的例子gprof:

A调用B十次,B调用C十次,C执行一些CPU密集型循环10次.请注意,没有一个样本落在A或B中,因为程序计数器实际上在C中花费了所有时间
gprof,通过计算呼叫,并跟踪谁制作它们,进行一些数学计算并向上传播时间.
所以你看,加速这个程序的方法是让A调用B次数减少,或者让B调用C次数减少,或两者兼而有之.
prof无法给你那种信息 - 你必须猜测.
如果您正在考虑使用它gprof,请注意它的问题,比如不提供行级信息,对I/O视而不见,对递归感到困惑,并误导您认为某些事情可以帮助您找到问题,例如采样率,调用图,调用计数等.请记住,它的作者只声称它是一个测量工具,而不是一个问题查找工具,即使大多数人认为它是后者.
| 归档时间: |
|
| 查看次数: |
1930 次 |
| 最近记录: |