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

当Windbg或Visual Studio 2015无法准确解析某些dump文件的函数堆栈时,可以使用Windbg进行手动处理。通过输入`knb`和`kvn`命令获取更多信息,然后解析异常地址内容,最后使用`.cxr`命令重新解析堆栈并定位错误位置。

工作中难免需要查看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    

WinDbg 中分析 dump 文件并查看崩溃时的系统信息,可以通过以下步骤进行详细分析: ### 查看崩溃时的系统信息 当使用 WinDbg 打开 dump 文件后,首先可以执行 `.dumpdebug` 命令来查看 dump 文件的详细信息,包括系统版本、处理器架构、崩溃时的异常信息等。此命令会输出关于 dump 文件的元数据,例如崩溃发生的时间、系统版本(如 Windows 10、Windows Server 等)、CPU 类型、内存使用情况等[^1]。 此外,还可以使用以下命令来获取更具体的系统信息: - **`!systeminfo`**:该命令会显示当前 dump 文件中记录的系统信息,包括操作系统版本、内核版本、处理器类型、物理内存大小、可用内存等详细信息。它还能展示崩溃时的系统环境变量、加载的驱动程序列表等[^1]。 - **`vertarget`**:该命令用于查看当前目标系统的版本信息,包括操作系统版本号、Service Pack 版本、内核构建版本等。这对于确认崩溃是否与系统补丁或更新有关非常有帮助[^1]。 - **`lm`(列出模块)**:该命令可以查看崩溃时加载的所有 DLL 模块及其版本信息。通过分析模块列表,可以判断是否由于某个特定的驱动程序或库文件导致了崩溃。例如,某些第三方驱动或不兼容的软件可能会导致系统不稳定[^2]。 - **`!process 0 0` 和 `!thread 0 0`**:这些命令可以查看当前 dump 文件中所有进程和线程的状态。通过分析进程和线程的信息,可以进一步定位崩溃发生时哪个进程或线程处于异常状态,以及其调用堆栈信息。 - **`.ecxr` 和 `kn`**:如果 dump 文件是在异常发生时生成的,可以使用 `.ecxr` 命令切换到异常上下文,然后使用 `kn` 命令查看函数调用堆栈。这有助于理解崩溃发生时的执行路径,并结合系统信息判断崩溃的根本原因[^2]。 ### 示例命令输出 ```shell 0:000> .dumpdebug Debuggee is a 64-bit AMD64 system Primary image for system is: ntoskrnl.exe Debuggee version is: 10.0.19041.928 AMD64 Number of processors 4 Page size 0x1000 System Uptime: 0 days 1:23:45.67 Kernel uptime: 0 days 1:23:45.67 0:000> !systeminfo System Information ------------------ OS Version: Windows 10 Pro 21H1 Kernel Version: 10.0.19043.928 Build Type: Multiprocessor Free Processor: AMD64 Physical Memory: 16384 MB Available Physical Memory: 4096 MB 0:000> vertarget Windows 10 Pro 21H1, build 19043.928 0:000> lm start end module name 00007fff`5a100000 00007fff`5a1a0000 ntdll.dll 00007fff`59f00000 00007fff`59f60000 kernel32.dll 00007fff`59d00000 00007fff`59df0000 KERNELBASE.dll 00007fff`59c00000 00007fff`59c90000 msvcrt.dll ``` 通过上述命令,可以全面了解崩溃时的系统状态、加载的模块、进程和线程信息,以及异常上下文。这为后续的故障排查提供了坚实的基础[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值