gprof报告没有时间积累

Dan*_*iel 24 c++ unix macos gprof

我正在尝试在运行OSX 10.5.7的计算机上使用gprof配置C++应用程序.我以通常的方式使用g ++编译,但是使用-pg标志,运行应用程序并尝试使用gprof查看调用图.

不幸的是,我的调用图包含所有时间列的全零."被调用"列中的值具有合理的值,因此看起来有些内容被分析但我对其他数据的缺乏感到困惑.

我的所有源文件都以类似的方式编译:

g++ -pg -O2 -DNDEBUG -I./ -ansi -c -o  ScenarioLoader.o ScenarioLoader.cpp
Run Code Online (Sandbox Code Playgroud)

然后我运行'ar'将所有目标文件捆绑到一个库中.后来,我链接并运行gprof如下:

g++ -pg -lm  -o vrpalone vrpalone.o ../src/atomicprof.a lastbuild.o
./vrpalone
gprof gmon.out | less
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Dav*_*veR 11

如果您的程序以非干净的方式终止,那么配置文件数据将无法正确写入 - 您的程序如何退出?

无论如何,我强烈建议使用Shark而不是gprof - 它非常易于使用,并且在几乎所有方面都优于gprof - 并且不需要您重新编译程序.


小智 5

你的程序运行速度有多快?如果速度非常快,则可能太快而无法进行实际分析。我在使用一个非常简单的文本处理程序时遇到了这个问题:当我使用低于 1kb 的测试文件运行它时,它报告时间列中全为 0。我通过运行《了不起的盖茨比》的全文来解决这个问题。尝试更大的数据集或循环主要计算数百次。


Dan*_*iel 5

我想我可能会分享我最近遇到的Apple邮件列表讨论.

这里描述的行为正是我所经历的.看起来gprof已经在OSX上被打破了很长一段时间.

我已经使用了由Dave Rigby帮助建议的Shark.

谢谢!


Fix*_*xee 5

也许与 OP 的问题无关,有一种常见的情况是“没有时间积累”发生:如果您的代码调用内核或调用未使用 编译的库-pg,您将看不到在那里花费的时间积累的任何时间。