gprof的报告无累积时间(gprof reports no time accumulated)

2019-06-23 22:44发布

我试图来确定与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

有任何想法吗?

Answer 1:

如果你的程序在非洁净的方式,则配置文件数据将不会正确写入结束 - 如何在您的程序退出?

无论如何,我强烈建议使用鲨鱼 ,而不是gprof的-它是非常容易使用和优越的几乎每个方面GPROF -并且不需要你重新编译程序。



Answer 2:

我想我可能分享这个苹果邮件列表讨论我最近跑过。

这里所描述的行为正是我遇到。 它看起来像gprof的已经在OSX打破了很长一段时间。

我已经使出了鲨鱼已经由戴维·里格比是有益建议。

谢谢!



Answer 3:

有多快你的程序运行? 如果它非常快,这可能是太快实际轮廓。 我有这个问题有一个非常简单的文本处理程序:当我和我的子1KB测试文件运行它。该公司报告全0在时间栏。 我通过它运行了不起的盖茨比整个文本解决了这个。 尝试更大的数据集或通过你的主计算几百次循环。



Answer 4:

请问您的程序使用多个线程? 我已经经历了在Linux上多线程的程序,不知道OS X也有同样的问题,这个问题

这里是一个解决方案 ,而我已经在过去成功地使用多线程问题。



Answer 5:

也许没有到OP的问题相关,存在“无累积时间”发生在一个常见的场景:如果你的代码调用内核或者调用不编译库-pg ,你不会看到积累在那里度过的时间的任何时间。



Answer 6:

顺便说一句,你调用fork()在你的代码? 如果是这样,就在叉后的子过程中添加这():

extern void _start (void), etext (void);
monstartup ((u_long) &_start, (u_long) &etext);

这奏效了我。



Answer 7:

时间在gprof的精度为0.00 。 所以也许你的模块以更短的时间(毫秒/微秒).Hence,它会显示0.00来不及accumulated.So,全程运行约程序1000/1000000 times ,这样它会在seconds.At最后,获得分时间与你的循环因子(1000/1000000) ,并且将是你的处理时间。 我也遇到了同样的问题,并通过这样做,它得到解决。



文章来源: gprof reports no time accumulated