所有信息参考官方文档:开始使用 WinDbg(用户模式) - Windows drivers | Microsoft Learn
需要着重关注的标签页如下:
用户模式(入门)
命令摘要
Help
菜单上的命令Contents
- .sympath(设置符号路径)
- .reload(重新加载模块)
- x(检查符号)
- g(转到)
Debug
菜单上的命令Break
- lm(列出已加载的模块)
- k(显示堆栈回溯)
- bu(设置断点)
- bl(断点列表)
- ~(线程状态)
- ~s(设置当前线程)
- .sympath+(设置符号路径)附加到现有符号路径
- srcpath(设置源路径)
Debug
菜单上的命令Step Into
(F11)- !analyze -v
- qd(退出和分离)
内核模式(入门)
命令摘要
- “帮助”菜单上的“内容”命令
- .sympath(设置符号路径)
- .reload(重新加载模块)
- x(检查符号)
- g(转到)
- dt(显示类型)
- 在“调试”菜单上“中断”命令
- lm(列出已加载的模块)
- k(显示堆栈回溯)
- bu(设置断点)
- bl(断点列表)
- bc(断点清除)
- “调试”菜单上的“单步调试”命令 (F11)
- dt nt!_FILE_OBJECT 检查数据类型,如图:
- !process (!process 0 0 查看所有进程的列表)
- !thread
- !devnode
- !devstack
- !drvobj
- qd(退出和分离)
调试方法
标准
- 使用断点
- 读取和写入内存
- 使用 !analyze 扩展
- 在启用驱动程序验证程序的情况下处理 Bug 检查
- 非侵入式调试(用户模式)
- 在程序集模式下调试
- 在源模式下调试
- 调试优化的代码和内联函数
- 使用 Windows 调试器调试托管代码
- 使用 Windows 调试器调试 Windows 应用
- 更改上下文
- 控制进程和线程
- 使用调试器标记语言
- 控制异常和事件
- 查找进程 ID
- 调试堆栈溢出
- 手动遍历堆栈
- 调试包含 JScript 帧的堆栈跟踪
- 调试应用程序错误
- 重新附加到目标应用程序
- 使目标计算机崩溃和重新启动目标计算机
- 与目标计算机同步
- 查找内存泄漏
- 调试超时
- 调试已停止的系统
- 调试多个目标
- 跟踪占用大量处理器资源的进程
- 确定对象的 ACL
- 显示关键节
- 调试死锁
- 调试失败的驱动程序卸载
- 读取 Bug 检查回调数据
- 使用 KD 调试用户模式故障
- 映射驱动程序文件
- 来自目标的消息
专业
- 调试 Arm64
- Windows 运行时调试
- 内核模式驱动程序框架调试
- 用户模式驱动程序框架调试
- 调试托管代码
- 调试设备节点和设备堆栈
- 调试即插即用和电源问题
- 使用 KD 调试用户模式故障
- 调试设备安装包中的辅助安装程序
- 调试双重引导计算机
- 调试 Windows 安装程序和 OS 加载程序
- 调试 CSRSS
- 调试 WinLogon
- 调试 BIOS 代码
- 指定模块和函数所有者