gpt4 book ai didi

c++ - 用 gcc -pg -g 编译后没有写 gmon.out

转载 作者:IT王子 更新时间:2023-10-29 00:20:04 26 4
gpt4 key购买 nike

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

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

我的程序是由使用 fork/exec 的手动 Perl 守护程序启动的。我已经验证了 CWD 是我的主目录,并且它是可写的,方法是让守护进程在执行我的目标程序之前执行 touch foo。就我能够研究的而言,这不应该影响程序的分析或在终止时(正常情况下)写入 gmon.out。

最佳答案

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

我通过将对 _exit(status) 的调用替换为 exit(status) 来修复此问题。注意前者是系统调用_exit(3),后者是标准库方法exit(2)。

为什么会这样?来自 gprof 手册页:

The profiled program must call "exit"(2) or return normally for the profiling information to be saved in the gmon.out file.

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

关于c++ - 用 gcc -pg -g 编译后没有写 gmon.out,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18939913/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com