Chinaunix首页 | 论坛 | 博客
  • 博客访问: 119607
  • 博文数量: 30
  • 博客积分: 2520
  • 博客等级: 少校
  • 技术积分: 395
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-10 10:31
文章分类
文章存档

2009年(7)

2008年(23)

我的朋友

分类: 系统运维

2008-11-04 21:30:03

 

调试器操作(常规)

控制目标

调试一个用户模式的目标程序或者内核模式的目标机时,目标可以被运行停止

当调试器连接到内核模式的目标时,调试器会继续让目标运行,除非使用了-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) 如果在或 选中一行,然后使用 运行到光标(Run to Cursor)命令,程序会一直运行直到遇到选中那一行。
  • (仅User Mode) 关闭目标程序并重新开始运行它,可以使用重新开始(Restart)命令。该命令只能用于调试器创建的进程。进程重起之后,会立即中断到调试器。
  • (仅WinDbg) 使用停止调试(Stop Debugging)命令关闭目标程序并清空调试器。该命令使得可以开始调试另一个目标。

命令窗体

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

以如下方式使用这些命令。

命令

WinDbg按钮

WinDbg命令

WinDbg快捷键

作用

 

 

F7

CTRL + F10

(仅WinDbg) 运行到光标位置。

 

 

SHIFT + F5

停止所有的调试并关闭目标。

(CDB/KD)

 

CTRL + BREAK

停止执行,调试器中断目标。

 

CTRL + SHIFT + F5

(仅User mode) 重起目标程序

 

F5

目标自由执行。

     

在一次之后恢复执行。

 

 

g (Go)相同,但是当前异常被当作已处理。

 

 

g (Go)相同,但是当前异常被当作未处理。

 

 

目标运行到当前函数执行完成。

 

 

目标执行一条指令。如果该指令是函数调用,则这个调用被当作一步执行。

     

目标运行直到到达指定的地址。该函数中执行的每一步都会显示出来(但是不显示被调用的函数中的内容。)

     

目标运行直到遇到下一个call指令。如果当前指令是call,则这个call会被完成并执行到下一个call

     

目标继续执行,直到遇到一个call指令或者return指令。

     

目标执行,直到到达任何一种分支指令,包括条件和非条件分支、call调用、函数返回和系统调用。

     

目标执行,直到遇到return指令。

 

F11

F8

目标执行一条指令。如果该指令是一条call,调试器跟踪到这个call中。

     

目标执行直到指定地址。本函数和被调用函数中的每一步都会显示出来。

     

(除内核模式之外的所有模式,仅在基于x86的系统上) 目标运行到下一条分支指令。

     

目标运行到下一条call指令。如果当前指令是call,该命令会跟踪进去直到遇到另一条call

     

目标运行到下一条call指令或return指令。如果当前指令是callreturn,命令会跟踪进去知道遇到另一个callreturn

     

目标执行直到遇到任意类型的分支指令,包括条件和非条件跳转、call、return和系统调用。如果当前指令是分支指令,该命令跟踪进入直到遇到下一个分支指令。

     

目标运行直到遇到return指令。如果当前指令是一条return,则跟踪进入直到另外一条return

     

目标执行,直到指定的函数执行完成。这时会显示统计信息。

关于如何重起目标机的更多信息,查看。

命令行选项

如果要在程序启动或加载时立即停止,可以在CDB或WinDbg使用-g命令行选项。更多信息,查看。

CDB和WinDbg也支持-G 。 该选项使得当应用程序正常结束时调试会话被结束。

下面的命令尝试从开始到结束的运行应用程序,调试器仅在发生错误时显示提示。

cdb -g -G ApplicationName 

使用-pt 来设置中断超时时间。有一些特定问题会造成目标不能和调试器通信。如果输入了某个中断命令但是调试器在这个时间到达之前未能中断目标,则调试器显示一条"Break-in timed out" 消息。

这时,调试器停止试图中断目标的行为。取而代之的是,暂停目标的执行使得可以检查(但不能控制)目标程序的状态。

默认的超时时间是30秒。

阅读(3283) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~