0

我已经编译并链接了我-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文件。这种行为有什么解释吗?此外,在不分析正在运行的其他版本的情况下运行脚本(例如,连接脚本而不是并行运行它们)也会产生相同的行为。

4

1 回答 1

0

我用来测试应用程序更改目录的脚本以获取大型数据集。这会影响gmon.out位置,因此当应用程序退出时,它会被写入那个遥远的目录。正如GNU GProf 手册所说,

gmon.out 文件在程序退出时写入程序的当前工作目录。这意味着如果您的程序调用 chdir,gmon.out 文件将留在您的程序 chdir 到的最后一个目录中。如果您没有在该目录中写入的权限,则不会写入文件,并且会收到错误消息。

昨晚我的脚本像这样运行,

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)进行的,但在我的情况下,区分测试是必要的。

于 2013-05-24T16:55:47.503 回答