Debugging Tools for Windows

sx, sxd, sxe, sxi, sxn, sxr, sx- (Set Exceptions)

sx* 命令用来控制被调试的程序发生某个异常或特定事件时,调试器要采取的动作。

语法

sx 

sx{e|d|i|n} [-c "Cmd1"] [-c2 "Cmd2"] [-h] {Exception|Event|*

sx- [-c "Cmd1"] [-c2 "Cmd2"] {Exception|Event|*

sxr

参数

-c "Cmd1"
指定一个当异常或事件发生时要执行的命令。该命令在异常的第一次处理机会时执行,不管该异常是否会中断到调试器。Cmd1 字符串必须包含在引号中。该字符串可以包含多条用分号分隔的命令。-c 和括起来的命令字符串之间的空格是可选的。
-c2 "Cmd2"
指定当异常或事件发生并且没有在第一次处理机会被处理时执行的命令。该命令在异常的第二次处理机会时执行,不管它是否会中断到调试器。Cmd2 字符串必须包含在引号中。该字符串可以包含多条用分号分隔的命令。-c2 和括起来的命令字符串之间的空格是可选的。
-h
改变指定事件的处理状态而不是中断状态。如果Eventcchcbpecssec-h 选项不是一定需要。
Exception
以当前基数指定命令要作用的异常号码。
Event
指定命令要作用的事件号。这些事件都是用短的缩写指定的。事件列表查看控制异常和事件
*
作用于所有没有用sx 明确命令的异常。明确命名的异常的列表,查看控制异常和事件

环境

模式 用户模式、内核模式
目标 仅活动调试
平台 所有

注释

sx 命令显示当前进程的异常列表和所有非异常的事件列表,并且显示调试器遇到每个异常和事件时的行为。

sxesxdsxnsxi 命令控制调试器针对每个异常和事件的设置。

sxr 命令将所有异常和事件过滤器的状态重设为默认值。命令被清除、中断和继续选项被重设为默认值,等等。

sx- 命令不改变指定异常或事件的处理状态和中断状态。该命令在希望修改第一次处理机会命令或第二次处理机会命令,而不想修改其他任何东西的时候很有用。

如果包含-h 选项(或指定cchcbpecssec事件),sxesxdsxnsxi 命令控制异常或事件的处理状态。在所有其它情况下,这些命令都控制异常或事件的中断状态

设置中断状态时,这些命令有以下作用。

命令 状态名 说明
sxe   Break

(Enabled)

当发生该异常时,在任何错误处理器被激活之前目标立即中断到调试器中。这种处理类型称为第一次处理机会
sxd Second chance break

(Disabled)

发生该类异常时,调试器不会在第一次处理机会时中断(虽然会显示信息)。如果其他错误处理器没有处理掉该异常,执行会停止下来并中断到调试器。这种处理类型称为第二次处理机会
sxn Output

(Notify)

当该异常发生时,目标程序不中断到调试器中。但是,会通过一条消息提示发生了异常。
sxi Ignore 异常发生时,目标程序不中断到调试器,并且不会显示信息。

设置处理状态时,这些命令有以下作用:

命令 状态名 说明
sxe Handled 执行返回时,事件被标识为已处理。
sxd,
sxn,
sxi
Not Handled 执行返回时,事件被标识为未处理。

只有异常可以使用-h 选项,而事件不可以。将该选项和chbpesse一起使用来分别设置 hcbpecssec的处理状态。如果将-h 和其他任何事件一起使用,不会有任何效果。

hcbpecssec一起使用-c -c2 选项可以将指定命令分别和chbpesse关联起来。

下面的例子中,sxe 命令用来设置针对访问违例的第一次处理机会的中断状态,并且设置在第一次处理机会时执行r eax命令。sx- 命令用来将第一次处理机会命令改变为r ebx,而不会改变处理状态。最后,显示了一部分sx的输出,指明了访问违例事件的当前设置:

0:000> sxe -c "r eax" av 

0:000> sx- -c "r ebx" av 

0:000> sx 
  av - Access violation - break - not handled
       Command: "r ebx"
  . . .  

附加信息

关于中断状态和处理状态的更多信息、事件代码的说明、所有事件的默认状态列表、以及控制该状态的其他方法,查看控制异常和事件

Build machine: CAPEBUILD