WinDbg分析dump文件


一、 符号文件路径设置

Windbg分析dump文件需要有与当前程序匹配的符号文件 pdb ,否则无法有效的进行分析。首先设置符号文件pdb的路径,在调试自己的程序崩溃问题时,可以移除默认符号路径中包含的微软服务器路径,以避免大量时间在下载系统对应的符号文件,常用的设置符号路径可以在界面设置或者用命令行进行设置:

  • 在Settings页面进行设置:
  • 在命令行进行设置,打开dmp文件之后无法正确加载对应的pdb文件,需要重新设置路径并加载:
    • .sympath D:\WorkSpace\Test_Cpp\x64\Debug;D:\tmp:使用 .sympath 设置路径,多个路径时用分号隔开。
    • .reload:设置完成之后重新加载
    • .reload /f 模块名称:强制加载某个模块

二、 打开并分析 dump 文件

通过 Open dump file来打开文件相关的dmp文件,WinDbg界面会显示相关的信息。

1. 指令分析:

2. 检查模块是否匹配

如果执行以上的分析之后,无有效的信息输出,那可能是pdb与崩溃的程序版本不匹配,可以使用如下指令进行分析:
lm vm A00_GeneralTest :其中A00_GeneralTest为当前模块的名称,输出包含:

  • C (export symbols) : 表示未能成功加载pdb文件
  • C (private pdb symbols):表示已经成功加载对应的pdb文件,显示如下

3. 问题:执行堆栈指令 k 不显示崩溃代码行

在执行指令的时候,不显示崩溃代码的具体行号,一般需要进行如下操作进行尝试:

  1. 确认符号路径是否正确,是否正确加载符号文件pdb:
    • .sympath D:\PdbFolder\:设置pdb的正确路径,会直接覆盖之前的符号文件路径
    • .reload: 重新加载pdb
  2. 必须要切换到异常上下文
    • .ecxr:将寄存器和堆栈恢复到崩溃发生那一瞬间的状态
  3. 查看堆栈信息:
    • k:查看基本的堆栈信息,此时会显示具体的行号。(如果仍旧不能显示,可能是行号显示被关闭,需要先执行 .lines -e 开启行号显示,再执行 k 显示堆栈信息)

其它command

  • .symfix:让 WinDbg 自动去微软的服务器下载 Windows 系统文件(如 ntdll.dll, kernel32.dll 等)的符号文件,如果缺少系统文件一般分析时会报错 WRONG_SYMBOLS

【参考资料】
Using WinDbg and the debugger commands

posted @ 2025-12-30 11:56  Jeffxue  阅读(1107)  评论(0)    收藏  举报