简介

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
    更改指定事件的处理状态,而不是其中断状态。 如果事件cchcbpecssec,则无需使用 -h选项。
  • Exception
    以当前基数指定命令作用于的异常号。
  • Event
    指定命令所作用的事件。这些事件用简短的缩写来表示。
  • *
    影响所有未以其他方式显式命名为sx的异常。

支持环境

模块

用户模式,内核模式

目标

仅限实时调试

适用

全部

说明

sx命令显示当前进程的异常列表和所有非异常事件的列表,并显示每个异常和事件的调试器的默认行为。SXE、SXD、SXN和SXI命令控制每个异常和事件的调试器设置。sxr命令将所有异常和事件筛选器状态重置为默认设置。命令将被清除,中断和继续选项将重置为其默认设置,依此类推。sx-命令不会更改指定异常或事件的处理状态或中断状态。如果希望更改与特定事件关联的第一次机会命令或第二次机会命令,但不希望更改任何其他命令,则可以使用此命令。如果包含-h选项(或者如果指定了CC、HC、BPEC或SSEC事件),则SXE、SXD、SXN和SXI命令控制异常或事件的处理状态。在所有其他情况下,这些命令控制异常或事件的中断状态。
设置中断状态时,这些命令具有以下效果:

Command Status name Description

sxe

Break

(Enabled)

发生此异常时,目标会在激活任何其他错误处理程序之前立即中断调试器。 这种处理称为第一次机会处理。

sxd

Second chance break

(Disabled)

对于此类型的第一次异常,调试器不会中断(尽管显示了一条消息)。 如果其他错误处理程序未解决此异常,将停止执行,并将目标中断到调试器中。 这种处理称为第二次机会处理。

sxn

Output

(Notify)

发生此异常时,目标应用程序根本不会中断调试器。 但是,会显示一条消息,通知用户此异常。

sxi

Ignore

发生此异常时,目标应用程序根本不会中断调试器,而且不显示任何消息。

设置处理状态时,这些命令具有以下效果:

Command Status name Description

sxe

Handled

继续执行时,该事件被视为已处理。

sxd,sxn,sxi

Not Handled

继续执行时,该事件被视为未处理。

可以结合使用 -h选项和异常,而不是事件。 将此选项与chbpesse一起使用将分别设置hcbpecssec的处理状态。 如果对任何其他事件使用-h 选项,则该选项不起作用。-c-c2选项与hcbpecssec一起使用时,会将指定的命令分别与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"