标准命令:
控制调试目标:g/t/p(stepover)
观察修改寄存器:r
观察编辑和搜索内存:d/e/s
观察栈:k
设置维护断点:BP(软件断点)/BA(硬件断点)/BC(清除)/BD(禁止)/BE(启用)
显示和控制线程:~
显示进程:|
显示表达式:?
显示C++表达式:??
汇编的命令:a
反汇编命令:u
显示段选择子:dg
执行命令文件:$
设置调试事件处理方式:sx
显示调试器和调试目标版本:version
检查符号命令:x
搜索符号命令:ln
显示模块列表:lm
结束调试会话:q
元命令(以"."开始):
.symopt
.sympath
.symfix
.srcpath
.srcnoise
.srcfix
.extpath
.extmatch
.exepath
.asm
.expr
.restart
.abandon
.create
.attach
.opendump
.detach
.kill
.load
.unload
.unloadall
.chain --列出当前所有加载的扩展模块
.logfile
.logopen
.logappend
.logclose
.remote
.server
.servers
.send_file
.endpsrv
.endsrv
.sleep
.wake
.dbgdbg
.dump
.writemem
.time
.ttime
.tlist
.fromats
.help
.if
.else
.elseif
扩展命令调用格式:![扩展模块名].<扩展命令名>[参数]
使用.load加上扩展模块的完整路径来加载它
使用.loadby加上扩展模块的名称,Windbg会自动到当前配置中定义的扩展模块所有路径中搜索匹配的模块
切换系统:||systen_indexs
切换进程:|process_indexs
切换线程:~thread_indexs
常用技巧:
使用分号可以在同一行输入多条命令
直接按回车可以重复上一条命令
使用Ctrl+Break可以终止一个长时间未完成的指令
如果是KD或者CDB,使用Ctrl+C来终止一个长时间未完成的指令
注释(这两种命令前面都要有分号分隔):
*命令:后面所有内容都是注释
$$命令:可以用分号结尾,后面仍可以跟语句
自动别名(使用.echo查看):
$CurrentDumpFile
$CurrentDumpPath
$CurrentDumpArchiveFile
$CurrentDumpArchivePath
使用as来定义用户命名别名:
例如:as vversion(version为内部命令,v为用户命名别名)
使用时用v或者$v来使用用户命名别名
注:al可以列出所有用户命名别名,ad可以删除指定的,ad*可以删除全部
修改固定别名:
r $.u<0~9> =<别名实体>
使用z命令来循环执行一条或多条命令
!for_each_XXX扩展命令也可以循环执行多个命令
j<条件表达式>[表达式1];[表达式2]
如果需要执行一组表达式,需要将表达式用单引号括起来,如['表达式1';'表达式2';'表达式3']