发生异常后继续在Visual Studio调试器中

vIc*_*erg 44 c# debugging exception

当我调试一个C#程序并且我得到一个异常抛出(由代码抛出或由框架引发)时,IDE停止并让我到我的代码中的相应行.

现在一切都很好.

然后按"F5"继续.从这一刻起,它就像我在无限循环中一样接缝.IDE总是让我回到异常行.我必须Shift+ F5(停止调试/终止程序)才能离开他.

我在这里与一些同事交谈,他们告诉我,这种情况也会发生在他们身上.

发生了什么?

Mat*_*ard 47

您可能在Visual Studio中选中" 在未处理的异常上展开callstack "选项.当此选项打开时,Visual Studio将在异常之前展开,因此命中F5将保持撞击到同一个异常.

如果取消选中Visual Studio将在异常处断开的选项,但点击F5将继续超过该行.

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

  • 知道这个选项现在在 VS 2017 中的名称或位置吗? (9认同)
  • 似乎不久前就被删除了 https://github.com/MicrosoftDocs/visualstudio-docs/issues/305 (2认同)
  • 有针对这个的解决方法吗?我正在调试 ASP.net 网站,并且希望异常“冒泡”到 IIS,而不是强迫我停止调试、重新附加并重试。 (2认同)

Eri*_*ver 17

这是因为异常是未处理的,并且Visual Studio在没有以某种方式处理的情况下无法移过该行.简单地说,它是设计的.

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

虽然停止执行并修复导致异常的问题,但如果不需要抛出则正确处理异常,这是一个更好的主意.

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

  • 我没有得到黄线,而是显示带有绿色箭头的绿线,其中发生异常,我无法将绿色箭头移动到任何地方.在那种情况下我该怎么办? (5认同)
  • 这不是真的。当您继续时,它应该会进入黄色死亡屏幕。从我记得的 Visual Studio 的最早版本开始,它就一直以这种方式工作。但是,它现在在 VS2022 中为我执行无限循环,我不知道为什么。有谁知道发生了什么变化? (4认同)
  • 这看起来很奇怪……有时我们想看看遇到未处理的异常时会发生什么 (3认同)

Ces*_*sar 10

有人说这是设计使然,但以前从未有过这样的情况。您可以再次按 F5,代码将继续执行,直到结束或下一个异常捕获。

这是一种行之有效的有用行为,作为开发人员,我认为我们在调试和调查应用程序中的问题时不应该遇到人为障碍。

也就是说,我找到了一个解决方法(某种程度上):

  • 按 Ctr+Shift+E(例外设置)
  • 取消选中“公共语言运行时例外”框
  • 按 F10 仅继续您遇到的异常
  • 如果您希望再次发生中断,请再次检查“公共语言运行时异常”

对于过去比较简单的事情来说,这看起来很肮脏,工作量太大,但我想这就是我们今天要做的。


Joe*_*ler 5

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

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