使用gcc -pg -g
编译了一个C++程序(至少,这些是我在Makefile中提供的args;没有任何有力的证据证明执行了什么命令)。程序在CWD设置到我的主目录的情况下正常运行。没有写gmon.out文件。
gcc是4.4.7。操作系统是centos 6。
我的程序由使用fork/exec的手动滚动的Perl守护程序启动。我已经通过让守护程序在执行我的目标程序之前执行touch foo
来验证CWD是我的主目录,并且它是可写的。就我能够进行的研究而言,这在程序终止时(正常情况下)应该不会影响程序的配置文件或编写gmon.out。
最佳答案
遇到同样的问题,CentOS 7上的g++ 4.8.2。存在用于编译和链接的-pg
,运行该进程且它正常退出,没有gmon.out
生成。
我通过用_exit(status)
替换对exit(status)
的调用来解决此问题。请注意,前者是系统调用_exit(3),后者是标准库方法exit(2)。
为什么这样做?从gprof
手册页:
显然,gmon.out的编写取决于(较高级别的)exit(2)。因此,请检查以确保代码使用的是exit(2)(来自stdlib)而不是_exit(3)(系统调用)。