【问题标题】:Using symstore.exe cannot load symbols for minidump in Windbg or Visual Studio使用 symstore.exe 无法在 Windbg 或 Visual Studio 中为 minidump 加载符号
【发布时间】:2014-10-23 13:40:12
【问题描述】:

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

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

QMAKE_CFLAGS_RELEASE += -Zi
QMAKE_CXXFLAGS_RELEASE += -Zi
QMAKE_LFLAGS_RELEASE += /DEBUG /OPT:REF

并使用 Windows Installer 和 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 Explorer 生成了一个 minidump 文件。我尝试将转储加载到 Visual Studio 并将 C:\Users\Sam\symbols 添加到符号文件位置,但找不到与我的二进制文件匹配的符号。

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

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 所在的文件夹匹配,表明它们应该匹配,但随后出现以下错误:

Debug information file:
Format: PDB 7.00
Error: PDB header - too many pages in root stream.

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

编辑: 我尝试设置symopt+0x40,这应该让WinDbg 无论如何都使用pdb,而无需过于仔细地检查签名GUID。然而,它仍然没有加载任何东西。额外输出:

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。

【问题讨论】:

    标签: c++ windows visual-studio windbg symstore


    【解决方案1】:

    我最终自己解决了这个问题。首先,我必须使用上述步骤从头开始删除并重新创建我的符号存储。我想我最初一定是把我的商店搞砸了,在不同的文件夹上使用相同的版本号运行了两次 symstore.exe

    完成此操作后,我可以加载故障转储并查看 Qt 库的符号,但最多只能加载大约 20 帧,并且没有加载任何其他模块。然后我想复制这个堆栈,但不能从WinDbg 的堆栈窗口中复制,所以我找到了k 命令来打印堆栈。这是一个“啊哈!”时刻,因为k 命令打印出的内容比堆栈窗口多得多,并显示发生了堆栈溢出。我发现可以为要打印的堆栈的深度传递一个附加参数,然后k 0xFFFF 打印出整个堆栈。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我提到二进制文件也确实被上传了。 "这在C:\Users\Sam\symbols 中创建了适当的 dll、exe 和 pdb 文件夹"。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-02
      • 1970-01-01
      • 2016-12-28
      • 1970-01-01
      相关资源
      最近更新 更多