让 gprof 从 Qt 调试应用程序读取 gmon.out 输出时出现问题
Posted
技术标签:
【中文标题】让 gprof 从 Qt 调试应用程序读取 gmon.out 输出时出现问题【英文标题】:Problems getting gprof to read gmon.out output from a Qt debug application 【发布时间】:2012-02-08 03:14:03 【问题描述】:我正在尝试分析我正在开发的 Qt 窗口应用程序,并且已经阅读了使用 gprof 进行分析的方法。我已成功将项目配置为编译并与 -pg 标志链接以启用分析,并且每次执行应用程序时都会输出 gmon.out。但是,当我尝试运行 gprof 将 gmon.out 文件转换为可读的 txt 文件时,我遇到了“gmon.out too short to be a gmon file”错误消息。我尝试用谷歌搜索这个问题的答案,但无济于事。也有人在这里问过同样的问题,但没有给出答案。
我在此项目中使用 Qt 4.7.4 和 Qt Creator 2.3.0 以及 Windows 7 上的 mingw 编译器。
我在 .pro 文件中设置的标志是:
# Profiler flags
CONFIG += DEBUG
QMAKE_CXXFLAGS_DEBUG += -pg
QMAKE_CXXFLAGS_MT_DBG += -pg
QMAKE_LFLAGS_DEBUG += -pg
这就是我从命令提示符调用 gprof 的方式:
C:\QtSDK\mingw\bin>gprof "C:\Qt exe\debug\QtGUI.exe" > profile.txt
还有错误信息: gmon.out:文件太短,不能成为 gmon 文件
我还检查了 gmon.out 的文件大小;每次我运行调试应用程序时,它大约是 520 kb。这真的太短而不能成为 gmon 文件吗?
【问题讨论】:
我可能错了,但要运行gprof
,你不只是运行gprof
而不带参数吗?我认为您可能试图让gprof
在您的可执行文件上运行,而不是在gmon.out
上运行。
“让 gprof 在您的可执行文件而不是 gmon.out 上运行”是什么意思?从我在cs.utah.edu/dept/old/texinfo/as/gprof.html#SEC4 中读到的内容来看,这就是我们应该如何运行它,除非我在那里误读了一些东西。
@ksming- 通常当我运行gprof
时,我会运行程序进行分析,然后只运行gprof
而不使用其他命令行参数。它默认处理gmon.out
。你试过了吗?
我已经尝试过了,但它默认寻找 a.out 。我必须将 gmon.out 作为 gprof 放在目录中吗?
嗯...没关系!我想我错了。
【参考方案1】:
运行 gprof 时,如果您省略输出文件的名称,gprof 会采用默认名称“gmon.out”。此文件应位于运行 gprof 的同一文件夹中。
因此,在运行程序时,请检查输出文件 gmon.out 是否在您运行的文件夹中正确生成。还要注意目录,你可以在这里阅读
gmon.out' file is written in the program's current working directory at the time it exits. This means that if your program calls chdir, the
gmon.out' 文件将保留在您的程序 chdir 到的最后一个目录中。如果你没有这个目录的写权限,文件是不会写的。
(来自:http://www.cs.utah.edu/dept/old/texinfo/as/gprof.html)
在这种情况下,您可以将输出文件路径指定为:
C:\QtSDK\mingw\bin>gprof QtGUI.exe path_to_outfile\gmon.out > profile.txt
希望这会有所帮助。
Ciao!
【讨论】:
以上是关于让 gprof 从 Qt 调试应用程序读取 gmon.out 输出时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
使用cmake与makefile调试需要指定的参数[GDB与Gprof参数]
使用cmake与makefile调试需要指定的参数[GDB与Gprof参数]