上一篇
Windbg命令使用教程?
- 电脑教程
- 2025-06-15
- 4555
Windbg 通过输入调试命令分析问题,常用命令包括:加载dump文件
.opendump
;启动调试
g
;查看调用堆栈
k
;分析崩溃原因
!analyze -v
;查看线程
~
;查看内存
d
;设置断点
bp
;查看模块
lm
。
调试环境准备
-
设置符号路径(关键步骤)
符号文件(.pdb)关联源代码与二进制文件,缺失会导致函数名显示为地址。.sympath SRV*C:Symbols*https://msdl.microsoft.com/download/symbols # 加载微软公共符号 .reload /f # 强制重新加载符号
-
打开转储文件(Dump)或附加进程
windbg -y "C:Symbols" -z "C:dump.dmp" # 启动时指定符号和转储文件 .attach <PID> # 附加到运行中的进程(替换<PID>为实际进程ID)
基础调试命令
命令 | 作用 | 示例 |
---|---|---|
g |
继续运行程序 | g (恢复暂停的程序) |
k |
显示当前调用栈 | k (查看崩溃时的函数调用链) |
!analyze -v |
自动分析错误原因 | !analyze -v (诊断蓝屏根源) |
lm |
列出已加载模块 | lm (检查驱动/DLL是否加载) |
.cls |
清屏 | .cls |
内存与寄存器操作
-
查看内存内容
db 0x7ffd0000 # 显示指定地址内存(字节格式) dd 0x7ffd0000 L4 # 显示4个DWORD(4字节)数据 !address 0x7ffd0000 # 分析内存属性(是否可读写)
-
寄存器操作
r # 查看所有寄存器值 r eax=0 # 将EAX寄存器值设为0(慎用)
断点与代码跟踪
-
设置断点
bp MyModule!MyFunction # 在函数入口设断点 bp /1 0x7ffd0000 # 一次性断点(触发后自动删除) bl # 列出所有断点 bc * # 删除所有断点
-
单步执行
p # 执行一条指令(跳过CALL) t # 执行一条指令(进入CALL)
高级诊断命令
-
句柄与内存泄漏检测
!htrace -enable # 开启句柄跟踪 !htrace <Handle> # 分析句柄创建堆栈 !heap -s # 统计堆内存使用
-
驱动调试(内核态)
!drivers # 列出所有加载的驱动 !irql # 查看当前中断请求级别 !devobj <DeviceObject> # 查看设备对象信息
实战案例:分析蓝屏转储
- 打开 dump 文件后立即运行:
!analyze -v # 获取错误码(如IRQL_NOT_LESS_OR_EQUAL)
- 查看崩溃线程栈:
k # 定位触发崩溃的驱动(如MyDriver.sys)
- 检查驱动版本:
lm vm MyDriver # 验证驱动是否兼容
安全提示
- 生产环境谨慎操作:
g
(恢复运行)可能导致服务中断。 - 数据备份:修改内存/寄存器前保存工作状态。
- 符号一致性:确保符号文件与二进制版本匹配。
学习资源
- 官方文档:Windows Debugging Tools
- 书籍推荐:《Advanced Windows Debugging》(Mario Hewardt)
- 社区支持:OSR Online
引用说明:本文内容参考 Microsoft Docs 官方调试文档、Windbg 内置帮助命令(
.hh
)及行业公认调试实践,命令语法经 Windbg Preview(最新版)实测验证。