当前位置: 首页 > news >正文

WinDbg 命令总结

WinDbg 命令总结

  • 1 常用命令
  • 2 详细分类命令
    • 2.0 界面含义
    • 2.1 启动方式
    • 2.2 分析崩溃/转储
    • 2.3 上下文切换:进程、线程、帧
    • 2.4 断点命令
    • 2.5 执行控制命令
    • 2.6 调用栈、寄存器、反汇编、局部变量
    • 2.7 内存查看、类型解释、字符串、搜索、修改
    • 2.8 符号、模块、源码相关命令
    • 2.9 表达式、脚本、别名、条件执行
    • 2.10 异常与事件控制命令
    • 2.11 较少用但要认识的命令

1 常用命令

.symfix // 先把公共符号服务器配好 .sympath+ C:\MyPdb // 再追加你的私有 PDB .reload /f // 强制重新加载符号!analyze-v// 自动分析 .exr-1// 看最近一次异常记录 .ecxr // 切到异常上下文 kv // 看详细调用栈 .frame<n>// 切到某一帧 dv // 看该帧的局部变量 r // 看寄存器 u @rip // 看当前反汇编(x64) lm // 看模块 x module!* // 看符号 bp module!func // 下断点 bl // 看断点 g // 继续运行

2 详细分类命令

2.0 界面含义

2:005>// 提示符:2=当前进程号,005=当前线程号3:2:005>// 远程/多系统调试时:3=当前系统号,2=当前进程号,005=当前线程号 Tab // 自动补全命令、符号、扩展命令 Shift+Tab // 反向补全 Enter // 在 CDB/KD 中重复上一条命令 Ctrl+C // 中断当前长输出或打断执行

2.1 启动方式

cdb-p<PID>// 附加到已运行进程 cdb-zdump.dmp // 打开转储 cdb app.exe // 直接启动程序调试 cdb-y<SymbolPath>... // 指定符号路径 cdb-c"<cmd1;cmd2;...>"// 启动后立即执行命令 cdb-cfinit.txt // 启动时执行脚本文件 cdb-cfrinit.txt // 启动和每次重启时都执行脚本 cdb-o// 调试子进程 cdb-g// 忽略初始断点 cdb-G// 忽略进程退出时的最终断点 cdb-lines// 启用源码行调试 cdb-n// noisy symbol load,输出详细符号加载信息

2.2 分析崩溃/转储

!analyze-v// 自动分析当前异常(用户态)或最近一次 bugcheck(内核态) .exr-1// 看最近一次异常记录:异常地址、异常码、参数 .ecxr // 切到异常上下文 k // 看当前线程调用栈 kv // 看更详细的调用栈 r // 看当前寄存器 u @rip // 反汇编当前指令附近(x64) u @eip // 反汇编当前指令附近(x86) lm // 看已加载模块 x module!* // 枚举模块里的符号 .frame<n>// 切到第 n 帧 dv // 看该栈帧作用域内的局部变量

2.3 上下文切换:进程、线程、帧

|// 进程状态|s // 切当前进程 ~ // 线程状态 ~s // 切当前线程 .cxr<addr>// 切到指定 CONTEXT .ecxr // 切到当前异常上下文 .frame<n>// 切栈帧 dv // 看局部变量

2.4 断点命令

bp module!func // 普通代码断点 bu module!func // 未解析前也可挂上的符号断点 bm module!*Pattern* // 批量模式断点 ba r4<addr>// 读访问断点(访问断点/数据断点) ba w4<addr>// 写访问断点 ba e1<addr>// 执行访问断点 bl // 列出断点 bd<id>// 禁用 be<id>// 启用bc<id>// 删除 br // 重新编号 bs / bsc // 更新断点命令/条件

2.5 执行控制命令

g // 继续运行 gc // 从条件断点继续 gh // 继续运行,并把当前异常标记为“已处理” gn // 继续运行,并把当前异常标记为“未处理” gN // 同 gn gu // 运行直到当前函数返回到上一层
p // 单步越过(step over) pa<addr>// 运行到指定地址 pc // 单步到下一次调用 pct // 单步到下一次调用或返回 ph // 单步到下一条分支指令 pt // 单步直到当前函数返回
t // 单步进入(trace into) ta<addr>// 跟踪到指定地址 tb // 跟踪到下一条分支 tc // 跟踪到下一次调用 tct // 跟踪到下一次调用或返回 th // 跟踪到下一条分支指令 tt // 跟踪到下一次返回 wt // 跟踪并观察调用数据
q // 退出调试器 qq // 立即退出调试器 qd // 先从目标脱离,再退出调试器

2.6 调用栈、寄存器、反汇编、局部变量

k // 显示调用栈 kb // 显示较简洁的调用栈 kc // 显示带参数的调用栈 kd // 显示原始调用栈信息 kp // 显示完整参数 kP // 更详细参数形式 kv // 显示更详细的栈信息,例如调用约定/FPO 等 r // 显示或修改寄存器rm// 显示或设置寄存器掩码 u<addr>// 从指定地址开始反汇编 uf module!func // 反汇编整个函数ln<addr>// 显示地址附近最近的符号 dv // 显示当前作用域的局部变量 dt module!TYPE<addr>// 按类型解释地址内容 dtx module!TYPE<addr>// 按类型解释,并附加扩展调试器对象模型信息 dx<expr>// 显示调试器对象模型表达式

2.7 内存查看、类型解释、字符串、搜索、修改

d // 以最近一次 d* 的格式继续显示内存 db<addr>// 按字节显示内存dc<addr>// 以双字节/字符混合方式显示内存dd<addr>// 按 DWORD 显示内存 dD<addr>// 按 double 显示内存df<addr>// 按 float 显示内存 dp<addr>// 按指针显示内存 dq<addr>// 按 QWORD 显示内存du<addr>// 按 Unicode 字符串显示 dw<addr>// 按 WORD 显示 dW<addr>// 按某种宽格式显示 WORD da<addr>// 按 ASCII 字符串显示 dds<addr>// 显示内存中的地址值及其符号 dps<addr>// 显示指针及其符号 dqs<addr>// 显示 QWORD 指针及其符号 dda / ddp / ddu // 显示“引用到的内存” dpa / dpp / dpu // 按指针/ASCII/Unicode 方式显示“引用到的内存” dqa / dqp / dqu // 按 QWORD/指针/Unicode 方式显示“引用到的内存” ds<addr>// 显示字符串 dS<addr>// 显示另一种字符串格式 dl<addr>// 按链表方式显示 c<range1><range2>// 比较两段内存 e / ea / eb / ed / eD / ef / ep / eq / eu / ew / eza / ezu // 向内存写入值 f / fp<range><value>// 用指定值填充内存 m<src><dst><len>// 移动/复制内存 s<range><pattern>// 在内存中搜索内容

2.8 符号、模块、源码相关命令

lm // 列出已加载模块 ld<module>// 加载指定模块符号ln<addr>// 列出地址附近最近的符号 x module!* // 枚举符号 l+ // 打开某些源码显示选项 l- // 关闭某些源码显示选项ls// 列出源码行 lsa // 列出更多源码行 lsc // 列出当前源码位置 lse // 启动源码编辑器 lsf<file>// 加载源码文件 lsf-<file>// 卸载源码文件 lsp<n>// 设置源码显示行数

2.9 表达式、脚本、别名、条件执行

?<expr>// 用默认表达式求值器求值;默认通常是 MASM ??<expr>// 用 C++ 表达式求值器求值 $<file// 执行脚本文件 $><file// 执行脚本文件的一种变体$$<file// 执行脚本文件的另一种变体$$><file// 执行脚本文件并展开输出的变体$$>a<file// 执行带参数脚本 j<cond>'<cmd1>';'<cmd2>'// 条件执行 if-else z<cond>'<cmd>'// 条件循环执行whilead // 删除别名 al // 列出别名 as / aS // 设置别名

2.10 异常与事件控制命令

sx // 显示当前异常/事件处理设置 sxe<code>// 发生指定异常/事件时中断 sxd<code>// 禁止在指定异常/事件上中断 sxn<code>// 仅在更后阶段中断该异常 sxi<code>// 忽略指定异常/事件 sxr // 重置异常设置 sx-<code>// 删除指定异常/事件的自定义规则

2.11 较少用但要认识的命令

n16// 设置数字基数,例如切到十六进制 ib / iw /id// 从 I/O 端口读1/2/4 字节 ob / ow / od // 向 I/O 端口写1/2/4 字节 rdmsr<msr>// 读取模型特定寄存器 MSR wrmsr<msr><value>// 写入模型特定寄存器 MSR so // 设置内核调试选项 sq // 设置静默模式 ss<suffix>// 设置符号后缀 vercommand // 显示当前调试器命令行 version // 显示调试器版本 vertarget // 显示目标版本
http://www.cnnetsun.cn/news/2076770.html

相关文章:

  • 别再手动算了!用Matlab的dec2hex/dec2bin函数搞定进制转换(附硬件寄存器操作实例)
  • STM32F405+SOEM调试EtherCAT电机,卡在Safe-OP状态?一个SMtype配置的坑我帮你踩了
  • Fish Tasks API 集成与使用指南
  • 低成本智能反射面(IRS)在6G毫米波通信中的设计与性能优化
  • 避开这3个大坑,你的AIGC自学之路能省下90%时间
  • DeepEar开源对话系统:从语音识别到多轮对话的完整实践指南
  • 港科夜闻|香港科大于THE亚洲大学排名2026位列第12位,彰显顶尖亚洲大学地位
  • 深度学习归一化技术:原理与TensorFlow实践
  • 保姆级教程:用IDEA插件Flowable BPMN visualizer画请假流程图,再配Spring Boot跑起来
  • iPhone上也能跑SQLmap?用A-Shell免越狱搭建移动渗透测试环境(保姆级教程)
  • AI入门数学基础:不用死磕公式,掌握这3点就够了(新手友好)
  • AI 深度研究工具的闭源隐形代价:Onyx + CrewAI + Voxtral 自托管栈的实战路径
  • 分布式量子计算中的多体纠缠与全局门技术
  • PyTorch单层神经网络实现CIFAR-10图像分类
  • 从收音机到蓝牙音箱:三极管功放电路的前世今生与实战避坑指南
  • AgentQL:基于大语言模型的智能网页数据抓取实战指南
  • 从零手搓大模型:白盒化构建Transformer、RAG与Agent的完整技术栈
  • PX4飞控实战:TFmini激光雷达高度融合与跳变问题深度解析
  • Agent 是怎么规划和拆任务的?把它的大脑拆开给你看
  • 国内主流瓶口分液器品牌排行:精准性与合规性对比
  • 从IBUF到OBUFDS:手把手拆解Spartan-6 SelectIO原语,搞定你的自定义接口
  • CentOS 7 SSH连接被拒?除了内存不足,这3个隐藏配置项(20-nproc.conf, sshd_config)才是关键
  • 百度发通告:一年查144人,33人直接进司法
  • 2026-04-25:反转元音数相同的单词。用go语言,给定一个由小写英文单词组成的字符串,各单词之间用单空格分隔。 先统计第一个单词里出现的元音字母数量(元音为 a/e/i/o/u)。记这个数量为
  • MATLAB GPU加速避坑指南:从‘搬砖’到‘起飞’,我的三个关键教训
  • 实测5款AI论文工具,我明白了什么才是真正的“过稿神器”:好写作AI凭什么能同时解决查重和AIGC?
  • Weka机器学习标准化流程:从数据预处理到模型部署
  • 深度学习优化算法Adam的核心原理与实践技巧
  • Uni-app图片上传别再踩坑了!手把手教你搞定6MB限制和GIF格式过滤
  • LayerNorm、BatchNorm、RMSNorm(个人理解)