Luke Stackwalker 运行时返回错误,gprof 工作正常

Posted

技术标签:

【中文标题】Luke Stackwalker 运行时返回错误,gprof 工作正常【英文标题】:Luke Stackwalker returns error when running, gprof works fine 【发布时间】:2010-02-20 15:09:28 【问题描述】:

我习惯于gprof 分析我的 C 代码,但我想开始使用基于 GUI 的 Windows 应用程序,例如 Luke Stackwalker。 gprof 在我的二进制文件上运行良好,但 Luke Stackwalker 有一些问题:

Launching executable C:\lshare\POT03\Eclipse\Debug\POTaak3.exe.
SymInit: Symbol-SearchPath: ';.;C:\Program Files\Luke Stackwalker;C:\Program Files\Luke Stackwalker;C:\WINDOWS;C:\WINDOWS\system32;SRV*C:\websymbols*http://msdl.microsoft.com/download/symbols;', symOptions: 530, UserName: 'Pieter'

OS-Version: 5.1.2600 (Service Pack 3) 0x100-0x1

C:\lshare\POT03\Eclipse\Debug\POTaak3.exe:POTaak3.exe (00400000), size: 61440, SymType: '-unknown-', PDB: '$Tƒ|'
C:\WINDOWS\system32\ntdll.dll:ntdll.dll (7C900000), size: 753664, SymType: '-unknown-', PDB: '©Uƒ|'
C:\WINDOWS\system32\kernel32.dll:kernel32.dll (7C7D0000), size: 1048576, SymType: '-unknown-', PDB: '©Uƒ|'
C:\WINDOWS\system32\msvcrt.dll:msvcrt.dll (77BE0000), size: 360448, SymType: '-unknown-', PDB: '©Uƒ|'
ERROR: SymGetModuleInfo64, GetLastError: 1114 (Address: 7C90E514)
Sorting profile data.
Done; 2 samples collected at 1.$ samples/second.

现在是谁射中了谁?我在这里做错了什么?我确实记得使用-pg 标志。

【问题讨论】:

奇怪,从来没有这个错误。这是一个 64 位的可执行文件吗? (我只尝试了 32 位可执行文件)。我总是使用 Visual Studio 2003 编译并使用 /Zi 选项生成调试信息。会不会是 Luke Stackwalker 无法识别 gcc 调试信息? gcc 可以创建 Visual Studio 兼容的调试信息吗? 我查阅了 gcc 文档。如果要使用 gcc 分析器 (gprof) 进行分析,则应使用 -pg。使用 Luke Stackwalker,您使用的是外部分析器,它不需要应用程序中的特殊内容,除了调试信息。尝试删除 -pg 并添加一个选项以使用您的可执行文件生成调试信息。 -g 可能就足够了,但如果它不起作用,您可能需要寻找其他调试格式。希望这会有所帮助。 我没有运气。 SymType: '-unknown-' 可能是一个重要的线索。 不,它不是 64 位可执行文件。我仍然使用其中一台 32 位笔记本电脑。顺便说一下,EXE 本身执行得很好。 【参考方案1】:

我明白你为什么想要something other than gprof。 Luke Stackwalker 获取堆栈样本,但(上次我检查)它没有总结在代码行级别使用的挂钟时间的包容性百分比。在 Linux 上,您可以使用 lsstackpstack,Windows 上必须有类似的工具。在您的情况下,我只是依靠 IDE 中的暂停按钮来获取stackshots。

【讨论】:

【参考方案2】:

SymType -unknown- 表示程序未使用 gcc -g 选项编译以生成调试信息,或者 Luke Stackwalker 使用的 microsoft debughelp 库无法识别调试信息格式。

请检查您在编译程序时是否使用了 -g 选项(而不是剥离可执行文件)。否则,很高兴知道您使用的是哪个 gcc 版本。

【讨论】:

我确定它是用-g 编译的,因为gdb 访问源代码没有问题。 gcc 版本信息:gcc (GCC) 3.4.5 (mingw-vista special r3) 试过了,我确认它不起作用。 Luke 无法读取可执行文件中的调试信息。奇怪的是,我发誓我以前尝试过这个方法并且成功了,但现在我无法让它成功。

以上是关于Luke Stackwalker 运行时返回错误,gprof 工作正常的主要内容,如果未能解决你的问题,请参考以下文章

mcrypt_create_iv 返回未定义的变量

UnicodeEncodeError:'mbcs'编解码器无法编码位置0--1中的字符:运行PyInstaller编译的脚本时无效字符

lucene之分词器和Luke工具介绍

Confluence 6 查看索引和提示

Confluence 6 查看索引和提示

索引查看工具Luke