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

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

gcc是4.4.7。 操作系统是centos 6。

我的程序是使用fork / exec手动启动的Perl守护进程启动的。 我已经validation了CWD是我的主目录,而且它是可写的,通过让守护进程在执行我的目标程序之前执行touch foo 。 据我所能研究,这应该不会影响程序的分析或写(gmon.out),当它终止(通常)。

Solutions Collecting From Web of "用gcc -pg -g编译后,gmon.out不会写入"

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

我通过用exit(status)替换_exit(status)来解决这个问题。 请注意,前者是_exit(3),一个是系统调用,后者是exit(2),这是一个标准库方法。

为什么这个工作? 从gprof手册页:

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

显然,gmon.out的写法依赖于(更高级的)exit(2)。 因此,请检查代码是否使用exit(2)(来自stdlib),而不是_exit(3)(系统调用)。

也许你在这个月前已经解决了,但是我今天遇到了这个效果,所以我可以为将来的访问者回答:

没有显示错误信息, gmon.out只是没有创建(和分析文本文件将是空的)。

其中一个原因可能是如果你没有main方法,或者在-mwindows WinMain的情况下。 例如,如果使用编译器参数(gcc) -e或(vc) /entry或使用__main

我查看了gprof手册,但没有找到有关如何告诉它一个入口点的信息,所以我改变了代码。