Memory gprof将每个函数显示为100%

Memory gprof将每个函数显示为100%,memory,gcc,cpu,gprof,Memory,Gcc,Cpu,Gprof,我正在使用一个修改过的auditd包,并将gprof与之链接 但是从gprof XX | gprof2dot | dot-Tpng output.png的输出来看,所有函数的使用率都是100%,所以我无法判断谁消耗了大部分CPU资源 (右键单击图像以获得完整视图) 有什么想法吗?这正常吗?最重要的是,我如何知道哪个函数消耗最多CPU 附言:平面配置文件顶部(在pastie.org链接中)的原始gprof输出是直接的答案: Flat profile: Each sample counts as

我正在使用一个修改过的
auditd
包,并将gprof与之链接

但是从gprof XX | gprof2dot | dot-Tpng output.png的输出来看,所有函数的使用率都是100%,所以我无法判断谁消耗了大部分CPU资源

(右键单击图像以获得完整视图)

有什么想法吗?这正常吗?最重要的是,我如何知道哪个函数消耗最多CPU


附言:平面配置文件顶部(在pastie.org链接中)的原始gprof输出是直接的答案:

Flat profile:

Each sample counts as 0.01 seconds.
 no time accumulated
因为每件事都完全不需要时间,所以每件事都需要和其他事情一样多的时间

更有趣的问题是,为什么一切都不花时间?这里的问题是auditd是setuid,并且(至少在一般情况下)您不能评测setuid程序

(要获得一个将是setuid的程序的概要文件,请创建一个非suid版本,并对其进行概要文件分析。有时,您需要稍微调整内部结构,使其在不是setuid的情况下运行良好。)

我又摸索了一些,不知道为什么失败了。Linux使用libc兼容例程来伪造
gprof
profil()
系统调用。这需要基于
SIGPROF
ITIMER\u PROF
间隔计时器,但通常应该可以工作


另一种选择是使用更通用的(它可以分析系统调用),并且现在可能支持得更好。

straight
gprof
(没有
gprof2dot
)的输出是什么?@JoeZ更新了问题此程序运行了多长时间?它似乎没有收集任何样本。@JoeZ 30秒,我有它打印的日志,所以我知道它可以工作,然后我发送一个SIGINT让它终止。如果你用
时间运行命令,它使用了多少
用户
时间?如果它把大部分时间花在系统调用、网络I/O或磁盘I/O上,它可能不会收集任何样本。它没有被起诉。。你怎么知道-P
-rwxr-xr-x 1根根目录296K Dec 12 XX:YY auditd*
Huh,也许我错了。(我手边没有Linux设备可供检查。)但它肯定没有任何配置文件样本。现在我不知道为什么。请注意,平面配置文件具有调用计数,因此计数部分工作,但CPU采样不起作用。另一种可能性是:意味着Linux
profil
是一个libc例程,它使用
setitimer(ITIMER\u PROF)
,而不是系统调用。也许auditd正在清除计时器?