我正在尝试弄清楚使用windbg崩溃的代码。
我们在以下文件夹中有.pdb符号:
E:MyApplication
为了加载符号,我们将符号路径设置为:
E:MyApplication;srv*E:Symbols*https://msdl.microsoft.com/download/symbols;
这应该从e驱动器加载我们的本地PDB文件,然后将所有其他符号从符号服务器加载并缓存到E: Symbols文件夹。
但是,如果我设置了!sym noisy
,然后运行!analyze -v
:
SYMSRV: UNC:
e:MyApplicationMyApplication.exe5AB2A76A278000MyApplication.exe - path not found
SYMSRV: UNC: e:MyApplicationMyApplication.exe5AB2A76A278000MyApplication.ex_ - path not found
SYMSRV: UNC: e:MyApplicationMyApplication.exe5AB2A76A278000file.ptr - path not found
SYMSRV: RESULT: 0x80070003
SYMSRV: BYINDEX: 0x1A
e:symbols*https://msdl.microsoft.com/download/symbols
MyApplication.exe
5AB2A76A278000
SYMSRV: UNC: e:symbolsMyApplication.exe5AB2A76A278000MyApplication.exe - path not found
SYMSRV: UNC: e:symbolsMyApplication.exe5AB2A76A278000MyApplication.ex_ - path not found
SYMSRV: UNC: e:symbolsMyApplication.exe5AB2A76A278000file.ptr - path not found
SYMSRV: HTTPGET: /download/symbols/MyApplication.exe/5AB2A76A278000/MyApplication.exe
SYMSRV: HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV: HTTPGET: /download/symbols/MyApplication.exe/5AB2A76A278000/MyApplication.ex_
SYMSRV: HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV: HTTPGET: /download/symbols/MyApplication.exe/5AB2A76A278000/file.ptr
SYMSRV: HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV: RESULT: 0x80190194
DBGHELP: C:Program Files (x86)Windows Kits10DebuggersMyApplication.exe - file not found
DBGHELP: e:MyApplicationMyApplication.exe - OK
DBGHELP: e:MyApplicationMyApplication.exe found
DBGENG: Partial symbol load found image e:MyApplicationMyApplication.exe.
SYMSRV: BYINDEX: 0x1B
e:MyApplication
MyApplication.pdb
AC8AC5D12F6C47259920050B2F46CEF81
SYMSRV: UNC: e:MyApplicationMyApplication.pdbAC8AC5D12F6C47259920050B2F46CEF81MyApplication.pdb - path not found
SYMSRV: UNC: e:MyApplicationMyApplication.pdbAC8AC5D12F6C47259920050B2F46CEF81MyApplication.pd_ - path not found
SYMSRV: UNC: e:MyApplicationMyApplication.pdbAC8AC5D12F6C47259920050B2F46CEF81file.ptr - path not found
SYMSRV: RESULT: 0x80070003
SYMSRV: BYINDEX: 0x1C
e:symbols*https://msdl.microsoft.com/download/symbols
MyApplication.pdb
AC8AC5D12F6C47259920050B2F46CEF81
SYMSRV: UNC: e:symbolsMyApplication.pdbAC8AC5D12F6C47259920050B2F46CEF81MyApplication.pdb - path not found
SYMSRV: UNC: e:symbolsMyApplication.pdbAC8AC5D12F6C47259920050B2F46CEF81MyApplication.pd_ - path not found
SYMSRV: UNC: e:symbolsMyApplication.pdbAC8AC5D12F6C47259920050B2F46CEF81file.ptr - path not found
SYMSRV: HTTPGET: /download/symbols/MyApplication.pdb/AC8AC5D12F6C47259920050B2F46CEF81/MyApplication.pdb
SYMSRV: HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV: HTTPGET: /download/symbols/MyApplication.pdb/AC8AC5D12F6C47259920050B2F46CEF81/MyApplication.pd_
SYMSRV: HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV: HTTPGET: /download/symbols/MyApplication.pdb/AC8AC5D12F6C47259920050B2F46CEF81/file.ptr
SYMSRV: HttpQueryInfo: 80190194 - HTTP_STATUS_NOT_FOUND
SYMSRV: RESULT: 0x80190194
DBGHELP: MyApplication.pdb - file not found
DBGHELP: D:ServicesTEST_SETBuildAgentwork5862d9870f4438d8sourceMyApplicationobjReleaseMyApplication.pdb - file not found
*** WARNING: Unable to verify checksum for MyApplication.exe
*** ERROR: Module load completed but symbols could not be loaded for MyApplication.exe
e: myApplication目录确实包含myApplication.pdb文件。
然后,由于我们的应用程序的方法名称未知,因此运行分析是没有用的,例如,如果我尝试检查崩溃的异常:
0:000> !PrintException /d 00000223b92c1f28
Exception object: 00000223b92c1f28
Exception type: System.Runtime.InteropServices.SEHException
Message: External component has thrown an exception.
InnerException: <none>
StackTrace (generated):
SP IP Function
000000BEE7BFD900 0000000000000000 MyApplication.Wpf.UserControls.dll!Unknown+0x1
000000BEE7BFD9B0 00007FF8AD7EAF10 System_Core_ni!System.Linq.Enumerable+WhereSelectListIterator`2[[System.__Canon, mscorlib],[System.__Canon, mscorlib]].MoveNext()+0x70
000000BEE7BFDA00 00007FF8549A7CF2 MyApplication.Util.Wpf.dll!Unknown+0x82
000000BEE7BFDA60 00007FF856EF9B02 MyApplication.Wpf.UserControls.dll!Unknown+0xc2
我缺少正确的符号加载?
您可以从WindBG所在的!sym noisy
日志中看到;如果所有其他方法都失败了,则可以将PDB准确地放置在其搜索位置。例如,创建此路径:
e:symbolsMyApplication.pdbAC8AC5D12F6C47259920050B2F46CEF81
然后将myApplication.pdb复制到文件夹中。
但是,一种适当的方法可能是了解Symstore并使用它来建立您的本地符号服务器。