WinDbg查看没有正常显示的函数堆栈信息

工作中难免需要查看dump,现在VC2015对dump的解析已经非常好了,自动化程度做的也很不错,只要设置了symbol路径,则绝大部分dump都可以自动解析。但有的dump,函数堆栈不够清晰,默认情况下windbg/cv2015都无法准确解析,这里就需要windbg来手动处理了。处理步骤如下:

1. 问题示例。

0:025> knb
 # ChildEBP RetAddr  
WARNING: Stack unwind information not available. Following frames may be wrong.
00 3211f0c0 76273520 ntdll!NtDelayExecution+0x15
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for kernel32.dll - 
01 3211f0d0 75c2270d KERNELBASE!Sleep+0xf
02 3211f0e4 75c07890 kernel32!GetProfileStringW+0x15161
03 3211f0f4 75c0780f kernel32!UnhandledExceptionFilter+0x161
04 3211f180 77bd21d7 kernel32!UnhandledExceptionFilter+0xe0
05 3211ffd4 77b99ea5 ntdll!RtlKnownExceptionFilter+0xb7
06 3211ffec 00000000 ntdll!RtlInitializeExceptionChain+0x36


这里输入knb没有显示自己的库堆栈信息。


2. 输入kvn,得到更多信息。

 # ChildEBP RetAddr  Args to Child              
WARNING: Stack unwind information not available. Following frames may be wrong.
00 3211f0c0 76273520 000003e8 00000000 3211f0e4 ntdll!NtDelayExecution+0x15
01 3211f0d0 75c2270d 000003e8 00000000 00000001 KERNELBASE!Sleep+0xf
02 3211f0e4 75c07890 3211f1b0 00000001 3211f180 kernel32!GetProfileStringW+0x15161
03 3211f0f4 75c0780f 3211f1b0 00000001 52cfe7e1 kernel32!UnhandledExceptionFilter+0x161
04 3211f180 77bd21d7 00000000 77bd20b4 00000000 kernel32!UnhandledExceptionFilter+0xe0
05 3211ffd4 77b99ea5 00403640 16ce9280 00000000 ntdll!RtlKnownExceptionFilter+0xb7
06 3211ffec 00000000 00403640 16ce9280 00000000 ntdll!RtlInitializeExceptionChain+0x36

可以看到红色标注的堆栈异常,需要解析 0x3211f1b0 地址内容。

4. 解析异常地址内容。

0:025> dd 3211f1b0 L2
3211f1b0  3211f2b0 3211f300

这里 3211f300 可以正常解析堆栈的关键。


5. 输入解析命令。

.cxr 3211f300

这样windbg就会自动重新解析这个函数堆栈,并定位到报错的位置。OVER

你可能感兴趣的:(编程)