免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2188 | 回复: 0
打印 上一主题 下一主题

WinDbg调试 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-04 21:30 |只看该作者 |倒序浏览


调试器操作(常规)

控制目标
调试一个用户模式的目标程序或者内核模式的目标机时,目标可以被运行或停止。
当调试器连接到内核模式的目标时,调试器会继续让目标运行,除非使用了-b 命令行选项、目标系统停止相应(即崩溃)或目标系统因为先前的内核调试行为而处于中断状态。
当调试器启动或连接到一个用户模式目标时,会立即中断目标的执行,除非使用-g 命令行选项。更多信息,查看初始断点。
运行中的目标
当目标正在运行时,大多数调试操作都不可用。
如果要停止运行中的目标,可以输入中断(Break)命令。该命令使得调试器中断到目标中。即调试器停止目标,并获得所有控制权。应用程序可能不会立即中断下来。例如,如果所有线程当前正在执行系统代码,或者在等待操作,中断会延迟到控制返回应用程序代码时发生。
如果运行中的目标发生异常、特定事件发生、遇到断点或程序正常关闭,目标会中断到调试器。 该动作停止目标并将所有控制权交给调试器。调试器命令窗口会显示一条消息来描述这个错误、事件或断点。
停止的目标
通过下面一些方法来开始或控制目标的执行:

  • 使用运行(Go)命令使得程序开始运行。
  • 一次单步执行一条指令,使用单步进入(Step Into) 或单步步过( Step Over )命令。如果发生函数调用,Step Into会进入函数体重并继续开始单步执行每条指令。Step Over将函数调用当作单步。当调试器运行于汇编模式时,单步操作每次执行一条指令。当调试器运行于源码模式时,单步操作一次执行一行代码。
  • 结束当前函数的执行并在返回时中断,使用执行到返回(Step Out)或 or 跟踪和监视(Trace and Watch)命令。Step Out命令继续程序执行知道当前函数结束。Trace and Watch 继续执行知道当前函数结束,并显示函数调用的摘要信息。但是,必须在函数的第一条指令使用Trace and Watch 命令。在基于Itanium的处理器上跟踪到分支(Trace to Next Branch) 运行直到遇到分支指令。
  • 如果有异常发生,可以使用处理异常并运行(Go with Exception Handled)和不处理异常并运行(Go with Exception Not Handled)命令来恢复执行和控制异常状态。(关于异常的更多信息,查看控制异常和事件。)
  • (仅WinDbg) 如果在反汇编窗口(Disassembly window)或 源码窗口(Source window)选中一行,然后使用 运行到光标(Run to Cursor)命令,程序会一直运行直到遇到选中那一行。
  • (仅User Mode) 关闭目标程序并重新开始运行它,可以使用重新开始(Restart)命令。该命令只能用于调试器创建的进程。进程重起之后,会立即中断到调试器。
  • (仅WinDbg) 使用停止调试(Stop Debugging)命令关闭目标程序并清空调试器。该命令使得可以开始调试另一个目标。

命令窗体
大多数用于开始或控制目标执行的命令都以文本命令、菜单命令、工具栏按钮和快捷键方式存在。基本的文本命令可以在CDB、KD或WinDbg中使用。(文本命令一般都支持附加的选项,例如改变程序计数器的位置或执行指定数量的指令。)可以在WinDbg中使用菜单命令、工具栏按钮和快捷键。
以如下方式使用这些命令。
命令
WinDbg按钮
WinDbg命令
WinDbg快捷键
作用
  



Debug | Run to Cursor
F7
CTRL + F10
(仅WinDbg) 运行到光标位置。
  



Debug | Stop Debugging
SHIFT + F5
停止所有的调试并关闭目标。
(仅CDB/KD) CTRL+C



Debug | Break
CTRL + BREAK
停止执行,调试器中断目标。
.restart (Restart Target Application)



Debug | Restart
CTRL + SHIFT + F5
(仅User mode) 重起目标程序
g (Go)



Debug | Go
F5
目标自由执行。
gc (Go from Conditional Breakpoint)
  
  
  
在一次条件断点之后恢复执行。
gh (Go with Exception Handled)
  
Debug | Go Handled Exception
  
g (Go)相同,但是当前异常被当作已处理。
gn (Go with Exception Not Handled)
  
Debug | Go Unhandled Exception
  
g (Go)相同,但是当前异常被当作未处理。
gu (Go Up)



Debug | Step Out
  
目标运行到当前函数执行完成。
p (Step)



Debug | Step Over
  
目标执行一条指令。如果该指令是函数调用,则这个调用被当作一步执行。
pa (Step to Address)
  
  
  
目标运行直到到达指定的地址。该函数中执行的每一步都会显示出来(但是不显示被调用的函数中的内容。)
pc (Step to Next Call)
  
  
  
目标运行直到遇到下一个call指令。如果当前指令是call,则这个call会被完成并执行到下一个call
pct (Step to Next Call or Return)
  
  
  
目标继续执行,直到遇到一个call指令或者return指令。
ph (Step to Next Branching Instruction)
  
  
  
目标执行,直到到达任何一种分支指令,包括条件和非条件分支、call调用、函数返回和系统调用。
pt (Step to Next Return)
  
  
  
目标执行,直到遇到return指令。
t (Trace)



Debug | Step Into
F11
F8
目标执行一条指令。如果该指令是一条call,调试器跟踪到这个call中。
ta (Trace to Address)
  
  
  
目标执行直到指定地址。本函数和被调用函数中的每一步都会显示出来。
tb (Trace to Next Branch)
  
  
  
(除内核模式之外的所有模式,仅在基于x86的系统上) 目标运行到下一条分支指令。
tc (Trace to Next Call)
  
  
  
目标运行到下一条call指令。如果当前指令是call,该命令会跟踪进去直到遇到另一条call
tct (Trace to Next Call or Return)
  
  
  
目标运行到下一条call指令或return指令。如果当前指令是callreturn,命令会跟踪进去知道遇到另一个callreturn
th (Trace to Next Branching Instruction)
  
  
  
目标执行直到遇到任意类型的分支指令,包括条件和非条件跳转、call、return和系统调用。如果当前指令是分支指令,该命令跟踪进入直到遇到下一个分支指令。
tt (Trace to Next Return)
  
  
  
目标运行直到遇到return指令。如果当前指令是一条return,则跟踪进入直到另外一条return
wt (Trace and Watch Data)
  
  
  
目标执行,直到指定的函数执行完成。这时会显示统计信息。
关于如何重起目标机的更多信息,查看崩溃和重起目标机。
命令行选项
如果要在程序启动或加载时立即停止,可以在CDB或WinDbg使用-g命令行选项。更多信息,查看初始断点。
CDB和WinDbg也支持-G 命令行选项。 该选项使得当应用程序正常结束时调试会话被结束。
下面的命令尝试从开始到结束的运行应用程序,调试器仅在发生错误时显示提示。
cdb -g -G ApplicationName
使用-pt 命令行选项来设置中断超时时间。有一些特定问题会造成目标不能和调试器通信。如果输入了某个中断命令但是调试器在这个时间到达之前未能中断目标,则调试器显示一条"Break-in timed out" 消息。
这时,调试器停止试图中断目标的行为。取而代之的是,暂停目标的执行使得可以检查(但不能控制)目标程序的状态。
默认的超时时间是30秒。





本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/38252/showart_1359859.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP