移动执行指针以更改调试器中的执行流

调试时,可以手动移动执行指针以更改将要执行的下一个语句。 移动指针对于跳过包含已知 bug 的代码等情况非常有用,并且是调试器更高级的功能。

更改执行流

暂停调试器时,源代码或反汇编窗口边缘的黄色箭头标记将指示接下来运行的语句的位置。 可以通过移动此箭头来更改将运行的下一个语句。 可以跳过代码或返回到上一行。

演示如何移动指针的动画。

如果要更改将运行的下一个语句,调试器必须处于中断模式。 在源代码或 反汇编 窗口中,将黄色箭头拖到其他行,或右键单击要下一步运行的行,然后选择“ 设置下一条语句”。

程序计数器直接跳转到新位置。 旧执行点和新执行点之间的指令不会运行。 但是,如果将执行点向后移动,则不会撤消干预指令。

注意

  • 将下一个语句移到另一个函数或范围通常会导致调用堆栈损坏,这会导致运行时错误或异常。 如果您尝试将下一条语句移动到另一个作用域,调试器会发出警告,并提供机会让您取消此操作。
  • 在 Visual Basic 中,无法将下一个语句移动到另一个范围或函数。
  • 在本机C++中,如果启用了运行时检查,则设置下一个语句可能会导致执行到达方法末尾时出现异常。
  • 启用编辑并继续后,如果进行的编辑无法被编辑并继续立即重新映射,则设置下一条语句将失败。 例如,如果在 catch 块中编辑了代码,则可能会出现这种情况。 发生这种情况时,错误消息会告诉你该操作不受支持。
  • 在托管代码中,如果满足以下条件之一,则无法移动下一个语句:
    • 下一语句位于与当前语句不同的方法中。
    • 调试是通过 Just-In-Time 调试启动的。
    • 正在展开调用堆栈。
    • 已引发 System.StackOverflowException 或 System.Threading.ThreadAbortException 异常。