为什么使用gprof会阻止程序的执行?

时间:2013-06-04 10:16:18

标签: c profiling gprof

我正在使用gprof计算每个函数执行程序所花费的时间。

上周我注意到当CPU使用率达到100%时,程序甚至无法启动!

  • 代码运行了将近一天,没有任何改变。
  • 在某些情况下,CPU使用率达到100%是不可避免的,特别是当我想在“stress”工具的帮助下,在使用最大资源量的同时强调我的系统并测试程序时:http://weather.ou.edu/~apw/projects/stress/

我已阅读帖子:

Alternatives to gprof

并阅读 Mike Dunlavey的 回复:

  

那些没有如此本地化的问题呢?那些无所谓吗?   不要对从未声称过的gprof寄予期望。它   只是一个测量工具,只有CPU绑定的操作。

以及 Norman Ramsey的 响应得分高:

Valgrind has an instruction-count profiler with a very nice visualizer called KCacheGrind. As Mike Dunlavey recommends, Valgrind counts the fraction of instructions for which a procedure is live on the stack, although I'm sorry to say it appears to become confused in the presence of mutual recursion. But the visualizer is very nice and light years ahead of gprof

但是当线程被关闭时,作为非建设性的,我想知道这是否是关注的好方向

提前致谢

P.S。在使用谷歌搜索时,我在询问

等问题时没有找到相关内容
  

“当cpu达到100%时,为什么gprof不起作用”

提前致谢

1 个答案:

答案 0 :(得分:1)

所有100%意味着它是挂起的,而且它没有进行I / O.

你说当你使用gprof运行该程序时程序会挂起,但如果你没有,那就不行了吗?

这很奇怪,但我不打算试图解决这个问题。

正如我所说over and over,我只是手动抓取几个堆栈样本。 然后,任何例程使用的时间百分比只是它出现的样本的分数,或多或少。 如果您认为需要高精度测量,请尝试使用ZoomOProfile等堆栈采样器。