我已将我的应用程序编译并链接到-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
文件。这种行为有什么解释吗?此外,在不分析正在运行的其他版本的情况下运行脚本(例如,连接脚本而不是并行运行它们)也会产生相同的行为。
答案 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
)继续进行的,但在我的情况下需要区分测试。