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

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

更改执行流

调试程序暂停时,源代码或“反汇编”窗口边距处的黄色箭头标记要运行的下一条语句的位置。 你可以通过移动此箭头来更改要运行的下一条语句。 你可以跳过代码,或者返回上一行。

Animation that shows how to move the pointer.

Animation that shows how to move the pointer.

如果要更改将运行的下一条语句,调试程序必须处于中断模式。 在源代码或“反汇编”窗口中,将黄色箭头拖动到另一行,或右键单击接下来要运行的行并选择“设置下一语句” 。

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

注意

  • 将下一条语句移动到另一个函数或作用域通常会导致调用堆栈损坏,进而导致运行时错误或异常。 如果尝试将下一条语句移动到另一个作用域,则调试程序会提供警告和取消操作的机会。
  • 在 Visual Basic 中,你无法将下一条语句移动到另一个作用域或函数。
  • 在原生 C++ 中,如果已启用运行时检查,则设置下一条语句会导致执行到达方法的结尾时引发异常。
  • 当启用“编辑并继续”时,如果你进行了“编辑并继续”无法立即重新映射的编辑,那么“设置下一语句”将失败 。 例如,如果你在 catch 块中编辑了代码,则可能会出现这种情况。 发生这种情况时,系统会显示一条错误消息,告诉你该操作不受支持。
  • 在托管代码中,如果出现以下情况,则不能移动下一条语句:
    • 下一条语句与当前语句不在同一个方法中。
    • 使用实时调试启动调试。
    • 正在展开调用堆栈。
    • 已引发一个 System.StackOverflowException 或 System.Threading.ThreadAbortException 异常。