我尝试用Windbg分析这个转储。但它无法显示x86 callstack。 符号路径被标记为:
srv*D:\dev_head\win_symbols*
某些命令结果:
0:000> !teb
Wow64 TEB32 at 000000007efdd000
*************************************************************************
*** ***
*** ***
*** Your debugger is not using the correct symbols ***
*** ***
*** In order for this command to work properly, your symbol path ***
*** must point to .pdb files that have full type information. ***
*** ***
*** Certain .pdb files (such as the public OS symbols) do not ***
*** contain the required information. Contact the group that ***
*** provided you with these symbols if you need this command to ***
*** work. ***
*** ***
*** Type referenced: wow64!_TEB32 ***
*** ***
*************************************************************************
error InitTypeRead( wow64!_TEB32 )...
Wow64 TEB at 000000007efdb000
ExceptionList: 000000007efdd000
StackBase: 000000000016fcfc
StackLimit: 000000000016b000
SubSystemTib: 0000000000000000
FiberData: 0000000000001e00
ArbitraryUserPointer: 0000000000230bf0
Self: 000000007efdb000
EnvironmentPointer: 0000000000000000
ClientId: 00000000000007e0 . 0000000000000ecc
RpcHandle: 0000000000000000
Tls Storage: 0000000000000000
PEB Address: 000000007efdf000
LastErrorValue: 0
LastStatusValue: 0
Count Owned Locks: 0
HardErrorMode: 0
0:000> !load wow64exts
0:000> !sw
The current thread doesn't have an x86 context.
符号文件wow64.pdb,wow64win.pdb可以正确下载/加载,但只有wow64cpu.pdb才能下载。这个问题会导致分析失败吗?
答案 0 :(得分:0)
通常,您需要配置Microsoft的符号服务器和下游(本地)缓存位置。
在本地网络中使用Samba / CIFS服务器的示例(您必须能够写入它):
symsrv*symsrv.dll*\\sambasrv\symbols*http://msdl.microsoft.com/download/symbols
...或者改为磁盘位置:
symsrv*symsrv.dll*C:\Windows\Symbols*http://msdl.microsoft.com/download/symbols
在WinDbg中使用.symfix
将MS符号服务器设置为默认值,然后.reload
重新加载所有符号信息。
通常配置名为_NT_SYMBOL_PATH
的全局环境变量:
setx /s _NT_SYMBOL_PATH=symsrv*symsrv.dll*\\sambasrv\symbols*http://msdl.microsoft.com/download/symbols
(以上是批处理/ NT脚本语法...咨询setx /?
)
如果您像我一样,使用各种不同的命令行创建快捷方式(例如,调试VM),请查看WinDbg的命令行开关-y
。
答案 1 :(得分:0)
我假设你有一个完整的转储而不是一个小的内存转储文件。 WOW64CPU程序数据库应该是带有符号包库的download。
使用以下标志强制加载特定的pdb :(但请注意,由于不匹配,调试结果可能在多个点处出错)
.reload /f [name] /i
其他开发者报告了类似的问题。 请参阅“Unable to get the symbols file for wow64cpu.dll from 64-bit Windows 2003 Server SP2”
您还可以考虑在VirtualBox或VMWare中运行的另一个Windows版本。
另见:
How to read the small memory dump files that Windows creates for debugging