我试图来确定与gprof的运行OSX 10.5.7的机器上C ++应用程序。 我编译通常的方式G ++,但使用-pg标志,运行应用程序,并尝试使用gprof查看调用图。
不幸的是我的调用图包含所有时间列的所有零。 在“叫”列中的值有合理的值,所以它看上去就像是异形,但我大惑不解的是,缺乏其他数据。
我的所有的源文件编译以类似的方式:
g++ -pg -O2 -DNDEBUG -I./ -ansi -c -o ScenarioLoader.o ScenarioLoader.cpp
我然后运行“AR”到所有的目标文件打包成库。 后来,我连接和运行gprof的像这样:
g++ -pg -lm -o vrpalone vrpalone.o ../src/atomicprof.a lastbuild.o
./vrpalone
gprof gmon.out | less
有任何想法吗?
如果你的程序在非洁净的方式,则配置文件数据将不会正确写入结束 - 如何在您的程序退出?
无论如何,我强烈建议使用鲨鱼 ,而不是gprof的-它是非常容易使用和优越的几乎每个方面GPROF -并且不需要你重新编译程序。
我想我可能分享这个苹果邮件列表讨论我最近跑过。
这里所描述的行为正是我遇到。 它看起来像gprof的已经在OSX打破了很长一段时间。
我已经使出了鲨鱼已经由戴维·里格比是有益建议。
谢谢!
有多快你的程序运行? 如果它非常快,这可能是太快实际轮廓。 我有这个问题有一个非常简单的文本处理程序:当我和我的子1KB测试文件运行它。该公司报告全0在时间栏。 我通过它运行了不起的盖茨比整个文本解决了这个。 尝试更大的数据集或通过你的主计算几百次循环。
请问您的程序使用多个线程? 我已经经历了在Linux上多线程的程序,不知道OS X也有同样的问题,这个问题
这里是一个解决方案 ,而我已经在过去成功地使用多线程问题。
也许没有到OP的问题相关,存在“无累积时间”发生在一个常见的场景:如果你的代码调用内核或者调用不编译库-pg
,你不会看到积累在那里度过的时间的任何时间。
顺便说一句,你调用fork()在你的代码? 如果是这样,就在叉后的子过程中添加这():
extern void _start (void), etext (void);
monstartup ((u_long) &_start, (u_long) &etext);
这奏效了我。
时间在gprof的精度为0.00
。 所以也许你的模块以更短的时间(毫秒/微秒).Hence,它会显示0.00
来不及accumulated.So,全程运行约程序1000/1000000 times
,这样它会在seconds.At最后,获得分时间与你的循环因子(1000/1000000)
,并且将是你的处理时间。 我也遇到了同样的问题,并通过这样做,它得到解决。