您的位置:首页 > 其它

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

2016-11-29 11:58 274 查看
工作中难免需要查看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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  windbg