在 bash 脚本中执行时未生成 gprof 输出
Posted
技术标签:
【中文标题】在 bash 脚本中执行时未生成 gprof 输出【英文标题】:gprof output not being generated when executed in bash script 【发布时间】:2013-05-23 23:01:09 【问题描述】:我已经编译了我的应用程序并将其与-pg
链接,当运行该应用程序时,我得到了正确的gmon.out
文件,并且可以使用gprof
对其进行分析。我在不同情况下运行了许多脚本,以发现我们软件的两个版本之间的速度问题。
当我运行应用程序时,我会生成gmon.out
输出。
因为我必须为许多不同的脚本执行此操作,所以我将它们堆成一个脚本来运行,这样我就可以小睡一下了。这并不复杂。我也在与其他版本的应用程序同时在另一个目录中运行此脚本。
./test test1.script
gprof test > test1.ver1.stats
rm -f gmon.out
./test test2.script
gprof test > test2.ver1.stats
rm -f gmon.out
这些不会生成gmon.out
文件。这种行为有什么解释吗?此外,在不分析正在运行的其他版本的情况下运行脚本(例如,连接脚本而不是并行运行它们)也会产生相同的行为。
【问题讨论】:
【参考方案1】:我用来测试应用程序更改目录以获取大型数据集的脚本。这会影响gmon.out
位置,因此当应用程序退出时,它会被写入那个遥远的目录。正如GNU GProf manual 所说,
gmon.out 文件是写在程序当前工作的 退出时的目录。这意味着如果您的程序调用 chdir,gmon.out 文件将保留在您的最后一个目录中 程序 chdir'd 到。如果你没有权限写这个 目录,文件没有写入,你会得到一个错误信息。
昨晚我让脚本运行,
GMON_OUT_PREFIX=test1.ver1.out ./test test1.script
GMON_OUT_PREFIX=test2.ver1.out ./test test2.script
GMON_OUT_PREFIX=test3.ver1.out ./test test3.script
虽然我在工作目录中找不到文件,但最终还是在数据文件夹中找到了文件。在上面,为输出指定不同的名称并不重要,因为它们是由它们的进程 ID 进行的(例如,GMON_OUT_PREFIX.PID
),但在我的情况下区分测试是必要的。
【讨论】:
以上是关于在 bash 脚本中执行时未生成 gprof 输出的主要内容,如果未能解决你的问题,请参考以下文章