首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Windbg或Visual中,使用symstore.exe不能为微型端加载符号

在Windbg或Visual中,使用symstore.exe不能为微型端加载符号
EN

Stack Overflow用户
提问于 2014-08-29 14:09:24
回答 2查看 1.9K关注 0票数 2

为了跟踪仅在Windows 8用户机器上发生的Qt中的崩溃,我设置了一个本地符号服务器,用于调试崩溃转储。

首先,我做了一个完整的构建,设置了以下标志:

代码语言:javascript
复制
QMAKE_CFLAGS_RELEASE += -Zi
QMAKE_CXXFLAGS_RELEASE += -Zi
QMAKE_LFLAGS_RELEASE += /DEBUG /OPT:REF

并使用Windows安装程序和VS部署项目构建了一个安装程序。然后运行以下symstore.exe命令:

C:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64>symstore.exe add /r /f C:\builddir\*.* /s "C:\Users\Sam\symbols" /t "Application" /v "rev xxxx" /c "test add"

这在C:\Users\Sam\symbols中创建了批准的dll、exe和pdb文件夹。

然后我安装在用户机器上,并通过Process生成一个微型文件。我尝试将转储加载到Visual,并将C:\Users\Sam\symbols添加到符号文件位置,但在二进制文件中找不到匹配的符号。

然后我尝试将它加载到WinDbg64中(这是一个64位的应用程序)。我设置了!sym noisy,用.symfix C:\Users\Sam\symbols设置符号路径,用.reload /f重新加载符号路径。这也没有任何成功,而且只在加载的情况下导出符号。例如:

代码语言:javascript
复制
QtGui4  No data is available : SRV*C:\Users\Sam\symbols*http://msdl.microsoft.com/download/symbols
    The SYMSRV client failed validating the GUID for the module, or the
    module does not have the debug header information.

所有模块都会出现这种情况,但对于Qt组件,我一点也不期望,因为这些组件不是作为常规构建的一部分构建的,甚至将符号文件夹设置为直接包含pdb文件的lib文件夹也没有帮助。

然后,我尝试对可执行文件和符号存储中的pdb文件运行ChkMatch.exe。可执行文件的签名与pdb所在的文件夹匹配,其中指示它们应该是匹配的,但随后我得到了以下错误:

代码语言:javascript
复制
Debug information file:
Format: PDB 7.00
Error: PDB header - too many pages in root stream.

为了以防万一,我再次对已安装的可执行文件运行ChkMatch.exe,但得到了相同的签名和相同的错误。

编辑:,我试着设置symopt+0x40,这应该使WinDbg使用pdbs,而不会太仔细地检查签名GUID。然而,它仍然没有加载任何东西。额外产出:

代码语言:javascript
复制
SYMSRV:  C:\Users\Sam\symbols\QtGui4.dll\5202030497e000\QtGui4.dll not found
...
SYMSRV:  C:\Users\Sam\symbols\QtGui4.dbg\5202030497e000\QtGui4.dbg not found
SYMSRV:  http://msdl.microsoft.com/download/symbols/QtGui4.dbg/5202030497e000/QtGui4.dbg not found
DBGHELP: .\QtGui4.dbg - file not found
DBGHELP: .\dll\QtGui4.dbg - path not found
DBGHELP: .\symbols\dll\QtGui4.dbg - path not found
DBGHELP: QtGui4.dll missing debug info.  Searching for pdb anyway
DBGHELP: Can't use symbol server for QtGui4.pdb - no header information available
DBGHELP: QtGui4.pdb - file not found
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for QtGui4.dll - 
DBGHELP: QtGui4 - export symbols

C:\Users\Sam\symbols\QtGui4.dll中的文件夹名为4AA92D1B712000,包含正确的dll。

EN

回答 2

Stack Overflow用户

发布于 2014-09-01 12:51:38

我终于自己解决了这个问题。首先,我不得不删除和重新创建我的符号存储从零使用上述步骤。我想我一开始一定是用相同的版本号在不同的文件夹上运行了两次symstore.exe,从而破坏了我的商店。

一旦我这样做了,我就可以在崩溃转储中加载,并看到Qt库的符号,但是只有大约20个帧,其他模块都没有加载。然后,我想复制这个堆栈,但是无法从WinDbg中的堆栈窗口复制,因此找到了k命令来打印堆栈。这是一个“啊哈!”这是因为k命令输出的比堆栈窗口多得多,显示堆栈溢出已经发生。我发现可以为要打印的堆栈的深度传递一个额外的参数,并将一个k 0xFFFF打印出整个堆栈。

票数 1
EN

Stack Overflow用户

发布于 2014-08-30 16:20:54

对于使用minidump,您也应该将二进制文件上传到symstore。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25570040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档