分析一个dump的一般步骤
- 看清楚是何种异常导致的崩溃.
- 对齐symbol, 找到发生崩溃的函数名字, 以及对应的汇编代码和源代码.
- 列出callstack
- 检查callstack是否合理
- 检查发生崩溃的函数是否得到了正确的参数.
- 检查发生崩溃的函数使用的数据是否正确.
- 结合上面的信息, 构思来龙去脉, 然后用资料来证明, 或者反驳自己的猜想.
- 通过进一步的操作来获取更有意义的资料. 比如激活pageheap后, 重新抓取dump, 或者干脆进行Live debug
命令 | 功能 | 适用范围 |
---|---|---|
uf /c /D 地址 | 打印当前函数对其他函数的调用 | 用户态/内核态 |
# 函数名 起始地址 l长度 | 打印在某段地址范围内代码对该函数的引用 | 内核态/用户态 |
一、什么是工作空间
Windbg把和调试相关的所有配置称为workspace。WinDbg使用工作空间来描述和存储调试项目的属性、参数及调试器设置等信息。工作空间与vc中的项目文件很相似。退出windbg时,它会将会话配置保存在工作区中。工作区使您能够轻松地保留从一个会话到另一个会话的设置。您还可以手动保存或清除工作区,甚至可以使用工作区保存仍在进行中的调试会话。
二、工作空间保存的信息
WinDbg的工作空间中保存了一下信息:
当您使用windbg作为调试客户机时,它的工作区只保存您通过图形界面设置的值。不会保存通过调试器命令窗口所做的更改。(此限制保证只反映本地客户端所做的更改,因为调试器命令窗口接受来自所有客户端和调试服务器的输入。
此外,断点信息保存在工作区中,包括断点地址和状态。会话结束时处于活动状态的断点在下一个会话启动时处于活动状态。但是,如果尚未加载适当的模块,那么其中一些断点可能无法解析。通过符号表达式、行号、数字地址或在源窗口中使用鼠标指定的断点都保存在工作区中。在反汇编或调用窗口中使用鼠标指定的断点不会保存在工作区中。 如果正在调试多个用户模式进程,则只保存与进程零关联的断点。
三、工作空间保存的位置
WinDbg默认使用注册表来保存工作空间设置,其路径为:HKEY_CURRENT_USER/Software/Microsoft/WinDBG/Workspaces,在此路径下有四个键:User、Kernel、Dump和Explicit。前三个键分别用来保存用户态调试、内核态调试、调试转储文件时使用的默认空间。Explicit用以存储命名的工作空间。在四个键下的每个键对应于一个工作空间。键值名为工作空间的名称,键值就是这个工作空间的配置数据。WinDbg支持使用文件来保存工作空间。这可以使用菜单Save workspace to File。使用Delete workSpaces可以删除工作空间。更快的方法是直接删除保存在注册表中的键值。
四、工作空间分类
WinDbg定义了两种工作空间,一种为默认工作空间,另一种为命名的工作空间。当没有明确使用某个命名空间时,WinDbg总是使用默认工作空间。
五、WinDbg的默认工作空间
WinDbg在安装后就有预先创建了一些列默认空间。分别为基础工作空间、默认内核工作空间、默认远程调试工作空间、特定处理器工作空间、默认用户态工作空间。它们分别定义了在WinDbg在各种条件下的一些配置、参数设置等。
当WinDbg打开一个应用程序开始调试时,调试器会 根据可执行文件的路径和文件名为其创建一个默认工作空间,如果已经存在工作空间,就使用已存在的。在WinDbg的文件菜单中可以使用另存为..创建一个命名的工作空间。
六、工作空间的创建和加载
当windbg创建用于调试的用户模式进程时,将为该可执行文件创建一个工作区。每个创建的可执行文件都有自己的工作区。当windbg分析转储文件时,将为该转储文件分析会话创建一个工作区。每个转储文件都有自己的工作区。开始调试会话时,将加载相应的工作区。结束调试会话或退出windbg时,将显示一个对话框,询问您是否要保存对当前工作区所做的更改。如果使用-qycommand line选项启动windbg,则不会显示此对话框,工作空间将自动保存。此外,如果使用-q命令行选项启动windbg,则不会显示此对话框,也不会保存任何更改。
工作区以累积方式加载。基本工作区始终首先加载。开始特定调试操作时,将加载相应的工作区。因此,大多数调试是在加载两个工作区之后完成的。内核模式调试在加载了三个工作区(基本工作区、默认内核模式工作区和特定于处理器的工作区)之后完成。
注意:调试信息窗口的布局是工作区累积行为的一个例外。每个窗口的位置、停靠状态和大小仅由您打开的最新工作区决定。此行为包括监视窗口的内容和在每个内存窗口中查看的位置。打开新工作区时,不会清除调试器命令窗口中的命令历史记录,但会重置所有其他窗口状态。
在WinDBG的Command窗口中, 默认情况下, 你输入的命令很容易和该命令以及附近命令的输出混杂在一起. 在寻找之前命令的结果的时候, 眼睛看起来会很累.
WinDBG提供了一个选项, 通过这个选项, 你可以把命令输入与输出的颜色进行设置.
选项名:
结果如下: