在bash脚本中执行时未生成gprof输出

时间:2013-05-23 23:01:10

标签: bash profiling gprof

我已将我的应用程序编译并链接到-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 个答案:

答案 0 :(得分:0)

我用来测试应用程序的脚本更改目录以获取大型数据集。这会影响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)继续进行的,但在我的情况下需要区分测试。