【问题标题】:Continuing in the Visual Studio debugger after an exception occurs发生异常后在 Visual Studio 调试器中继续
【发布时间】:2010-09-14 22:23:36
【问题描述】:

当我调试 C# 程序并抛出异常(由代码抛出或由框架抛出)时,IDE 会停止并将我转到代码中的相应行。

现在一切都很好。

然后我按“F5”继续。从这一刻起,我仿佛陷入了无限循环。 IDE 总是让我回到异常行。我必须 Shift + F5 (停止调试/终止程序)才能摆脱他。

我在这里与一些同事交谈,他们告诉我这有时也会发生在他们身上。

发生了什么事?

【问题讨论】:

    标签: c# debugging exception


    【解决方案1】:

    一旦您遇到异常,除非在您的代码中处理了异常,否则 Visual Studio(或您可能使用的任何 IDE)将不会让您继续前进。

    此行为是设计使然。

    【讨论】:

      【解决方案2】:

      这是因为该异常未处理,并且 Visual Studio 无法在没有以某种方式处理的情况下越过该行。简而言之,这是设计使然。

      您可以做的一件事是将执行点(黄线/箭头)拖放到代码中的前一个点,并修改内存中的值(使用 Visual Studio 监视窗口),这样它们就不会导致例外。然后再次开始单步执行代码1

      最好停止执行并修复导致异常的问题,或者在不需要抛出时正确处理异常。

      1 这可能会产生意想不到的后果,因为您实际上是在重新执行某些代码(而不是倒回执行)。

      【讨论】:

      • 我没有得到黄线,而是在发生异常的地方显示带有绿色箭头的绿线,我无法将绿色箭头移动到任何地方。在这种情况下我该怎么办?
      • @Anirudh Goel,同样的问题。
      • 这看起来很奇怪......有时我们想看看当遇到未处理的异常时会发生什么
      • 哇,不知道你可以把黄色箭头拖过来!
      【解决方案3】:

      未捕获的异常会导致您的应用崩溃。相反,VS 只会让您处于未捕获的异常状态,您将不得不终止或回退您的应用程序。

      【讨论】:

        【解决方案4】:

        当 IDE 在有问题的代码行上中断时,它会在执行生成异常的行之前停止。如果继续,它将再次执行该行,并再次获取异常。

        如果您想跳过错误以查看会发生什么,如果没有发生错误,您可以将黄色突出显示的行(接下来将执行的行)拖到违规后的下一行代码一。当然,根据违规行未能执行的操作,您的程序现在可能处于导致其他错误的状态,在这种情况下,您并没有真正帮助自己,并且可能应该修复您的代码,以便异常不会'不会发生,或者处理得当。

        【讨论】:

          【解决方案5】:

          您可能在 Visual Studio 中选中了“Unwind the callstack on unhandled exceptions”选项。当此选项打开时,Visual Studio 将在异常之前展开,因此按 F5 将继续进入相同的异常。

          如果取消选中选项 Visual Studio 将在异常处中断,但按 F5 将继续超过该行。

          此选项位于菜单工具选项调试常规


          更新:According to Microsoft,此选项在 VS2017 中从 Visual Studio 中删除,可能更早。

          【讨论】:

          • 好点!请注意,您可以通过即时窗口或简单地通过变量监视来更改有问题的异常导致变量的值,从而让您的程序继续运行
          • 知道在 VS 2017 中这个选项现在叫什么,或者它的位置吗?
          猜你喜欢
          • 1970-01-01
          • 2019-02-21
          • 2020-12-03
          • 1970-01-01
          • 2015-06-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多