工作中难免需要查看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
来源:CSDN
作者:spacegrass
链接:https://blog.csdn.net/spacegrass/article/details/53390998