使用gcc -pg -g编译后不会写入gmon.out

Cha*_*hap 8 c++ linux gcc gprof

编译一个C++程序使用gcc -pg -g(至少,这些是我在Makefile中给出的参数;没有任何确凿的证据证明执行了什么命令).程序运行到正常完成,CWD设置为我的主目录.没有写gmon.out文件.

gcc是4.4.7.OS是centos 6.

我的程序是由一个手动滚动的Perl守护进程使用fork/exec启动的.我已经验证了CWD是我的主目录,并且它是可写的,通过在执行touch foo我的目标程序之前执行守护进程.至于我已经能够研究,这不应该影响程序的分析或写gmon.out终止(通常).

col*_*dot 10

同样的问题,CentOS 7上的g ++ 4.8.2 -pg存在用于编译和链接,运行过程并且它正常退出,没有gmon.out生成.

我通过更换一个电话解决了这个_exit(status)exit(status).注意前者是_exit(3),一个系统调用,后者是exit(2),一个标准的库方法.

为什么这样做?从gprof手册页:

配置文件程序必须调用"exit"(2)或正常返回,以便将配置文件信息保存在gmon.out文件中.

显然gmon.out的写入依赖于(更高级别)退出(2).因此,请检查以确保代码使用exit(2)(来自stdlib)而不是_exit(3)(系统调用).


Ber*_*ann 1

也许你几个月前就已经解决了这个问题,但我今天遇到了这个效果,所以我可以为未来的访客回答:

没有显示错误消息,gmon.out只是没有创建(并且分析文本文件将为空)。

出现这种情况的原因之一是如果您没有main方法或者在. 例如,如果您使用编译器参数 (gcc)或 (vc)或使用.-mwindowsWinMain-e/entry__main

我查看了 gprof 手册,但没有找到有关如何告诉它入口点的信息,因此我更改了代码。