2014-08-29 70 views
2

为了跟踪仅在Windows 8用户计算机上发生的Qt中的崩溃,我设置了一个本地符号服务器用于调试崩溃转储。使用symstore.exe无法加载Windbg或Visual Studio中的小型转储符号

首先,我做了全面的构建与设置以下标志:

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"

这创造此时,相应的DLL,EXE和PDB文件夹内C:\Users\Sam\symbols

然后我安装在用户机器上,并通过Process Explorer生成一个小型转储文件。我尝试将转储文件加载到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的成分,因为这些不建作为常规构建的一部分,甚至是符号文件夹设置到lib文件夹中直接包含pdb文件不起作用。

然后我尝试运行ChkMatch.exe针对可执行文件和我的符号存储区中的pdb文件。为可执行文件的签名相匹配的PDB在其中表示,他们应该是一个比赛,但后来我得到了以下错误的文件夹:

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

我又跑ChkMatch.exe对公正的情况下安装的可执行文件,但得到了同样的签名和相同的错误。

编辑: 我试着设置symopt+0x40这将使无论如何WinDbg中使用PDBS没有太密切检查签名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。

回答

0

对于转储你应该上传的二进制文件symstore工作太

+0

我提到二进制文件确实也上传了。 “这在'C:\ Users \ Sam \ symbols'内创建了合适的dll,exe和pdb文件夹”。 – sjdowling 2014-09-01 09:11:15

1

我设法这最终解决自己。首先,我必须使用上述步骤从头开始删除并重新创建我的符号存储。我认为我必须通过在不同文件夹上以相同版本号运行两次symstore.exe来破坏我的商店。

一旦我完成了这个工作,我可以在崩溃转储中加载并查看Qt库的符号,但只有大约20个帧,其他模块都没有加载。然后我想复制这个堆栈,但不能从堆栈窗口WinDbg,因此找到k命令打印出堆栈。这是一个'啊哈!'因为k命令打印出的堆栈窗口比堆栈窗口多得多,并显示发生了堆栈溢出。我发现可以传入一个附加参数来打印堆栈的深度,并打印出整个堆栈中的一个k 0xFFFF

相关问题