#重要说明

(1) windbg命令分为标准命令,元命令和扩展命令

标准命令提供最基本的调试功能,不区分大小写。如:bp  g  dt  dv  k等

元命令提供标准命令没有提供的功能,也内建在调试引擎中,以.开头。如.sympath  .reload等

扩展命令用于扩展某一方面的调试功能,实现在动态加载的扩展模块中,以!开头。如!analyze等

(2) 进入调试状态时,直接回车可重复执行上一条命令;按上下方向键可以浏览和选择以前输入过的命令

(3) 神奇的Tab键,进行命令补全;ESC清除当前命令输入框中的文本

(4) 使用;作为分隔符,可以在同一行输入多条命令

(5) 上图红色框中的“0:000”。【0为当前调试会话的进程号;000为调试会话的线程号

(6) 当命令提示符显示*BUSY*时,即使命令输入框可以输入命令,但输入的命令不会立即被执行,要等windbg空闲时才能执行。

可使用Ctrl + Break来终止一个长时间未完成的命令

#进程与线程

| // 列出调试进程

|* // 列出调试进程

|N // 参看序数为N的调试进程

|Ns // 切换序数为N的进程为当前调试进程

~ // 列出线程

~* // 所有线程

~* k // 所有线程堆栈信息

~* r // 所有线程寄存器信息

~. // 查看当前线程

~# // 查看导致当前事件或异常的线程

~N // 查看序数为N的线程

~~[n] // 查看线程ID为n的线程

~Ns // 切换序数为N的线程为当前调试线程

~N f // 冻结序数为N的线程

~N u // 解冻序数为N的线程

~N n // Suspend序数为N的线程

~N m // Resume序数为N的线程

#调用堆栈

k // 显示当前调用堆栈

kn // 带栈编号显示当前调用堆栈

kb // 打印出前3个函数参数的当前调用堆栈

kb 5 // 只显示最上的5层调用堆栈

.frame // 显示当前栈帧

.frame n // 设置编号n的栈帧为当前栈帧

.frame /r n // 设置编号n的栈帧为当前栈帧 并显示寄存器变量

!uniqstack // 显示所有线程的调用堆栈

#启动调试

windbg "notepad.exe" arguments // 使用windbg启动调试notepad.exe

windbg -p 4200 // 将windbg附加到一个正在运行的pid为4200的进程上

windbg -pn "notepad.exe" // 将windbg附加到一个正在运行的名为notepad.exe的进程上

windbg –z "c:\mydumpfile.dmp" // 调试mydumpfile.dmp文件

.attach 0n4220 // 4220为十进制pid,使用该命令附加调试时,必须先存在一个调试会话

.detach // 分离调试

.restart // 重启并调试

.kill // 强制结束当前调试

q // 退出windbg

#获取帮助

? // 打印出所有标准命令

.help // 打印出所有元命令

.hh // 打开windbg的chm帮助文件

command /? // 打印命令command具体参数用法

#注释符

* // 注释整行

$$ // 注释(遇到分号结束)

#配置调试环境

.sympath // 查看当前符号查找路径

.sympath c:\symbols // 将符号查找路径设为:c:\symbols

.sympath+ c:\symbols // 将c:\symbols添加到符号查找路径集合中

.symfix // 将符号查找路径设为:SRV*WinDbg安装目录\Sym*http://msdl.microsoft.com/download/symbols

.symfix f:\symbols // 将符号查找路径设为:SRV*f:\symbols*http://msdl.microsoft.com/download/symbols

.symfix+ f:\symbols // 将SRV*f:\symbols*http://msdl.microsoft.com/download/symbols添加到符号查找路径集合中

.srcpath // 查看当前源文件查找路径

.srcpath f:\src // 将源文件查找路径设为:f:\src

.srcpath+ f:\src // 将f:\src添加到源文件查找路径集合中

.exepath // 查看可执行文件查找路径

.exepath f:\bin // 将可执行文件查找路径设为:f:\bin

.exepath+ f:\bin // 将f:\bin添加到可执行文件查找路径集合中

#符号加载与查看

除了使用ld和.reload命令直接加载符号文件,某些使用符号的命令也可以触发调试器来加载符号,如:栈回溯命令(k*)和反汇编命令(u)等。

值得说明的是,windbg缺省使用的是懒惰式符号加载策略,当它收到模块加载事件时,它通常是不会加载符号的,符号状态显示为deferred(延迟加载)。

.symopt // 显示当前所有符号选项

.symopt+ flags // 添加符号选项

.symopt- flags // 删除符号选项

ld * // 为所有模块加载符号

ld kernel32 // 加载kernel32.dll的符号

.reload // 为所有模块加载符号信息

.reload /f /v // f:强制立即模式  v:详细模式

.reload /f @"c:\windows\System32\verifier.dll" // 为指定模块加载符号信息

x *! // 列出所有模块对应的符号信息

lm // 列出所有模块对应的符号信息

x ConsoleTest!* // 列出ConsoleTest模块中的所有符号

x ConsoleTest!add* // 列出ConsoleTest模块中的所有add开头的符号

x /t /v ConsoleTest!* // 带数据类型、符号类型和大小信息,列出ConsoleTest模块中的所有符号

x kernel32!*LoadLib* // 列出kernel32模块中所有含LoadLib字样的符号

u  // 反编译

#断点

bl // 列出所有断点

bc * // 清除所有断点

bc 1 // 清除1号断点

bc 1 2 5 // 清除1号、2号、5号断点

be *  // 启用所有断点

be 1 // 启用1号断点

be 1 2 5 // 启用1号、2号、5号断点

bd * // 禁用所有断点

bd 1 // 禁用1号断点

bd 1 2 5 // 禁用1号、2号、5号断点

bp 7c801b00 // 在7c801b00地址处放置一个断点

bp `ConsoleTest.cpp:36` // 在ConsoleTest.cpp的36行处放置一个断点

bp main // 在main函数的起始处放置一个断点

bp CSecondLoader::CSecondLoader // 在CSecondLoader的构造函数处放置一个断点

bp `ConsoleTest.cpp:40` "j (poi(MyVar)>5) ''; 'g'" // 条件断点 MyVar>5,执行空语句(;),断住  否则继续执行

bp `ConsoleTest.cpp:40` "j @eax = 0xa3 ''; 'g'" // 条件断点 寄存器eax的值为0xa3时断住

bu // 保存断点,其用法和bp一样

bm add_* // 匹配add_开头的函数,并在这些函数起始处都打上断点

ba w4 0483dfe0 // 当对0483dfe0地址写操作时停下

// ba [r|w|e] [Size] Addr      [r=read/write, w=write, e=execute], Size=[1|2|4 bytes]

#调试执行控制

g // Go(F5)

gH // 执行gH命令强制让调试器返回已经处理了这个异常。【Go with Exception Handled】

// 系统收到这个回复后会停止分发异常(因为调试器声称已经处理了异常),恢复调试目标继续执行,

//  但由于异常条件仍在,所以还会产生异常,于是再次分发,WinDBG再次中断到命令模式。

gN // 【Go with Exception Not Handled】

// 执行gN命令强制让调试器返回没有处理了这个异常,那么系统会进一步分发该异常,

// 如果没有其他调试器也不处理,最后系统会弹出程序终止对话框。

gu // 执行到当前函数完成时停下 【Go Up】

p   // 单步执行(F10)  【Step】

p 2 // 2为步进数目

pc // 执行到下一个函数调用处停下 【Step to  Next Call】

pa 7c801b0b // 执行到7c801b0b地址处停下  【Step to Adress】

t // Step into(F11) 【Trace】

tc // 执行到下一个进入点处停下 【Trace to Next Call】

ta 7c801b12 // 执行到7c801b12地址处停下 【Trace to Adress】

# 查看变量

dt nRet // 查看变量nRet的类型与值

dv // 显示当前函数内所有局部变量,函数参数

dv n* // 显示当前函数内n开头的所有局部变量,函数参数

dv /t /i /V /a|/n|/z

/*****************************************

更加详细地显示当前函数内所有局部变量,函数参数信息
i = type (local, global, parameter)
t = data type
V = memory address or register location
-----------------------
a = sort by Addr, n = sort by name, z = sort by size

*****************************************/

#寄存器

r // 显示所有寄存器信息

r eax, edx // 显示eax,edx寄存器信息

r eax=5, edx=6 // 对寄存器eax赋值为5,edx赋值为6

#内存

da /c 5 7c801e02 // 从7c801e02内存处开始,显示5个ascii字符

/*****************************************

d[a| u| b| w| W| d| c| q| f| D] [/c 列数] [地址]

a = ascii chars
u = Unicode chars
b = byte + ascii
w = word (2b)
W = word (2b) + ascii
d = dword (4b)
c = dword (4b) + ascii
q = qword (8b)
f = floating point (single precision - 4b)
D = floating point (double precision - 8b)

*****************************************/

dyb /c 3 7c801e02 // 从7c801e02内存处开始,显示3个byte及二进制

/*****************************************

dy[b | d] ..   // b = binary+byte     d = binary+dword

*****************************************/

#dump输出

.dump /ma "d:\mydmpfile.dmp" // 将当前调试进程输出Dump文件

#其他元命令

.tlist  // 显示所有进程

.cls // 清除屏幕

#其他扩展命令

!analyze -v // 详细显示当前异常信息

!peb // 格式化输出PEB信息(process's environment block)

!gle  // 打印当前线程最近的错误信息

!gle -all  // 打印所有线程的最近的错误信息

!error  897// 显示错误码为897的详细描述信息

#帮助

中文在线帮助:http://www.dbgtech.net/windbghelp/index.html

windbg cmd: http://www.slideshare.net/kewuc/windbg-cmds

整理自http://www.cnblogs.com/Clingingboy/archive/2013/03/26/2983166.html

windbg学习进阶之——dump分析常用命令收集的更多相关文章

  1. (转载)shell日志分析常用命令

    shell日志分析常用命令总结 时间:2016-03-09 15:55:29来源:网络 导读:shell日志分析的常用命令,用于日志分析的shell脚本,统计日志中百度蜘蛛的抓取量.抓取最多的页面.抓 ...

  2. redis学习-列表(list)常用命令

    redis学习-列表(list)常用命令   lpush:从列表左侧头部添加数据 rpush:从右侧尾部添加数据 lpop:从给左侧头部取出一个元素 rpop:从右侧尾部取出一个元素 lrange:取 ...

  3. linux基础学习之软件安装以及常用命令

    linux基础学习之软件安装以及常用命令 调用中央仓库: yum install wget 然后下载nodejs: wget https://nodejs.org/dist/v10.14.2/node ...

  4. Android学习第三天-打包常用命令

    在前面<Android学习第一天-adb常用命令>和 <Android学习第二天-android常用命令>两篇博文中,我们重点讲解了adb和android的常用命令,下面我们讲 ...

  5. liunx学习笔记(一:常用命令)

    linux: 在学习linux之前我们应该多少了解windows的一些相关操作,linux也就是类似windows的另一种操作系统,用来管理软硬件的一种应用.在windows下你可以通过鼠标点击相关的 ...

  6. Android学习第三天-签名常用命令

    由于怕篇幅过长,所以把这个打包常用命令分开成两篇博文来进行讲解,下面我们直接进入主题吧. 8.keytool 这是我们JDK自带的密钥和证书管理工具 命令: -certreq 生成证书请求 -chan ...

  7. Redis学习笔记(三)常用命令整理

    Redis 常用命令 1.DEL key 删除key2.EXISTS key 检查key是否存在3.KEYS * 查看所有的key4.EXPIRE key seconds 设置key的过期时间5.TT ...

  8. Linux基础学习(4)--Linux常用命令

    第四章——Linux常用命令 一.文件处理命令 1.命令格式与目录处理命令ls: (1)命令格式:命令 [-选项] [参数]   例:ls -la /etc (2)说明:个别命令使用不遵循此格式;当有 ...

  9. 学习操作Mac OS 之 常用命令

    ~ 符号在 Mac 甚至所有基于 Unix 和 Linux 的系统中都是代表当前用户的用户目录,.代表当前目录 配置环境变量语句:  source ~/.bash_profile 查看host文件语句 ...

随机推荐

  1. 【jquery】一款不错的音频播放器——Amazing Audio Player

    前段时间分享了一款视频播放器,点击这里.今天介绍一款不错的音频播放器——Amazing Audio Player. 介绍: Amazing Audio Player 是一个使用很方便的 Windows ...

  2. Cocos2dx使用wxsqlite开源加密SQLite3数据库

    最近使用wxsqlite加密sqlite3数据库,刚开始折腾好几天,在xcode上一直编译不通过,后来在sqlite3.c找到配置,编译顺利通过,太激动了,哈哈,废话少说!总结一下android和io ...

  3. C# 代码转化为Java代码

    http://www.tangiblesoftwaresolutions.com/Free_Editions.html Install Instant C# (converts VB.NET code ...

  4. 给The Lab Renderer for Unity中地形添加阴影

    The Lab Renderer for Unity是Valve针对VR在Unity的体验渲染器,提高VR的渲染效率,更多的大家可以查相应资料,在这,说个The Lab Renderer for Un ...

  5. WinDbg 命令集锦

    //断点相关 bp + 地址 设置断点bl  显示已经设定的断点bu + 地址 设置断点,但是这种类型断点再下一次启动时被记录bc 清除断点对于断点范围,可以用*匹配,-表示一个范围,表达多个可用,号 ...

  6. Xcode工程使用CocoaPods管理第三方库新建工程时出现错误

    工程使用CocoaPods管理第三方库,在新的目录update版本的时候出现如下问题   问题1描述: diff: /../Podfile.lock: No such file or director ...

  7. java-cef系列视频第二集:搭建开发环境

    上一集我们介绍了如何从官方代码编译java-cef. 本视频介绍了如何使用eclipse搭建java-cef二次开发环境. 下一集我们将给java-cef添加flash支持. 本作品采用知识共享署名- ...

  8. css3实现进度条的模拟

    两种进度条动画的实现: 1.css3,但IE9-不支持. 2.js动画,兼容性好,但没有css3实现的顺畅 Demo: <html>    <head>        < ...

  9. 兼容IE与firefox的css 线性渐变(linear-gradient)

    IE系列 filter: progid:DXImageTransform.Microsoft.Gradient(startColorStr='#FF0000',endColorStr='#F9F900 ...

  10. keil l251 command summary --Lib

    keil l251 command summaryLIB251 LIST MYLIB.LIB TO MYLIB.LST PUBLICS LIB251 EXTRACT MYLIB.LIB (GOODCO ...