当前位置:首页 > 电脑教程 > 正文

Windbg命令使用教程?

Windbg 通过输入调试命令分析问题,常用命令包括:加载dump文件 .opendump;启动调试 g;查看调用堆栈 k;分析崩溃原因 !analyze -v;查看线程 ~;查看内存 d;设置断点 bp;查看模块 lm

调试环境准备

  1. 设置符号路径(关键步骤)
    符号文件(.pdb)关联源代码与二进制文件,缺失会导致函数名显示为地址。

    .sympath SRV*C:Symbols*https://msdl.microsoft.com/download/symbols  # 加载微软公共符号
    .reload /f  # 强制重新加载符号
  2. 打开转储文件(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

内存与寄存器操作

  1. 查看内存内容

    Windbg命令使用教程?  第1张

    db 0x7ffd0000  # 显示指定地址内存(字节格式)
    dd 0x7ffd0000 L4  # 显示4个DWORD(4字节)数据
    !address 0x7ffd0000  # 分析内存属性(是否可读写)
  2. 寄存器操作

    r  # 查看所有寄存器值
    r eax=0  # 将EAX寄存器值设为0(慎用)

断点与代码跟踪

  1. 设置断点

    bp MyModule!MyFunction  # 在函数入口设断点
    bp /1 0x7ffd0000  # 一次性断点(触发后自动删除)
    bl  # 列出所有断点
    bc *  # 删除所有断点
  2. 单步执行

    p  # 执行一条指令(跳过CALL)
    t  # 执行一条指令(进入CALL)

高级诊断命令

  1. 句柄与内存泄漏检测

    !htrace -enable  # 开启句柄跟踪
    !htrace <Handle>  # 分析句柄创建堆栈
    !heap -s  # 统计堆内存使用
  2. 驱动调试(内核态)

    !drivers  # 列出所有加载的驱动
    !irql  # 查看当前中断请求级别
    !devobj <DeviceObject>  # 查看设备对象信息

实战案例:分析蓝屏转储

  1. 打开 dump 文件后立即运行:
    !analyze -v  # 获取错误码(如IRQL_NOT_LESS_OR_EQUAL)
  2. 查看崩溃线程栈:
    k  # 定位触发崩溃的驱动(如MyDriver.sys)
  3. 检查驱动版本:
    lm vm MyDriver  # 验证驱动是否兼容

安全提示

  • 生产环境谨慎操作g(恢复运行)可能导致服务中断。
  • 数据备份:修改内存/寄存器前保存工作状态。
  • 符号一致性:确保符号文件与二进制版本匹配。

学习资源

  • 官方文档:Windows Debugging Tools
  • 书籍推荐:《Advanced Windows Debugging》(Mario Hewardt)
  • 社区支持:OSR Online

引用说明:本文内容参考 Microsoft Docs 官方调试文档、Windbg 内置帮助命令(.hh)及行业公认调试实践,命令语法经 Windbg Preview(最新版)实测验证。

0