当可执行文件派生另一个可执行文件时,不会创建 gmon.out

Posted

技术标签:

【中文标题】当可执行文件派生另一个可执行文件时,不会创建 gmon.out【英文标题】:gmon.out is not created when executable forks another executable 【发布时间】:2013-07-25 10:02:52 【问题描述】:

我正在使用 gprof 进行分析。但是当我在使用选项 -pg 编译的主可执行文件中派生另一个可执行文件时,不会创建 gmon.out。知道如何解决它。

【问题讨论】:

【参考方案1】:

但是当我 fork 另一个可执行文件时没有创建 gmon.out

它可能会。它只是与所有其他 gmon.out 文件具有相同的名称。他们只是默默地互相覆盖。

GNU 以其无限的智慧建议您要分析的每个子进程都在其自己的当前目录中执行。根据需要在代码中使用 mkdirchdir。由于gmon.out在进程结束时被写出,所以只需要在调用exit之前chdir

我还建议查看valgrind。除其他优点外,它的输出文件名为 something.somethingelse.$PID

【讨论】:

IBM (AIX) 的相同建议:computing.llnl.gov/tutorials/performance_tools/man/gprof.txt“使用 fork 和 exec 子例程进行分析”部分,“.. 解决此问题的一种方法是调用 chdir 子例程更改子进程的当前目录。"【参考方案2】:

当您设置 GMON_OUT_PREFIX=some_file_name 环境变量时,gprof 将为每个名为 some_file_name.pid 的子进程创建额外的 gmon 文件。

【讨论】:

以上是关于当可执行文件派生另一个可执行文件时,不会创建 gmon.out的主要内容,如果未能解决你的问题,请参考以下文章

只有当可选的主线程任务和工作线程完成时,我如何保证代码的执行?

binutils工具集之---ar

为啥 ld 在将可执行文件链接到 a 时需要 -rpath-link 以便需要另一个 so ?

当可点击为假时更改按钮的背景颜色

使用 system() 启动另一个可执行文件时程序停止

从另一个项目的可执行文件启动一个项目的可执行文件