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

aelbi1ox  于 2022-11-14  发布在  其他
关注(0)|答案(6)|浏览(262)

当我调试C#程序并引发异常(由代码引发或由框架引发)时,IDE将停止并转到代码中得相应行.
现在一切都很好。
然后我按下“F5”继续。从这一刻起,它似乎我在一个无限循环。IDE总是让我回到异常行。我必须Shift + F5(停止调试/终止程序)离开他的。
我和这里的一些同事聊过,他们告诉我,他们有时也会遇到这种情况。
发生什么事了?

8wtpewkr

8wtpewkr1#

您可能在Visual Studio中选中了“Unwind the callstack on unhandled exception”选项。启用此选项时,Visual Studio将展开到异常的前面,因此按F5将继续插入同一个异常。
如果您取消核取[Visual Studio会在例外状况处中断]选项,但按下F5键会继续执行,而不会经过该行。
此选项位于菜单 * 工具 * → * 选项 * → * 调试 * → * 常规 * 下。

更新:According to Microsoft,此选项已从VS2017或更早版本的Visual Studio中 * 移除 *。

a64a0gku

a64a0gku2#

这是因为该异常未被处理,如果不以某种方式对其进行处理,Visual Studio就无法越过该行。简单地说,这是设计使然。
您可以做的一件事是将执行点(黄线/箭头)拖放到代码中的前一个点,并修改内存中的值(使用Visual Studio监视窗口),使它们不会导致异常。然后重新开始单步执行代码1。
不过,最好停止执行并修正造成例外状况的问题,或在不需要掷回时适当地行程例外状况。
1这可能会产生意想不到的后果,因为您实际上是在重新执行某些代码(而不是回退执行)。

n6lpvg4x

n6lpvg4x3#

当IDE在出错的代码行上中断时,它会在执行生成异常的代码行之前停止。如果继续,它将再次执行该行,并再次获取异常。
如果要跳过错误以查看如果未发生错误会发生什么情况,可以拖动黄色突出显示的线(下一行将执行的代码行),直到出错代码行之后的下一行代码。当然,根据出错代码行失败的地方,程序现在可能处于导致其他错误的状态,在这种情况下,您实际上并没有帮上什么忙,并且可能应该修复您的代码,使异常不会发生或得到正确处理。

snvhrwxg

snvhrwxg4#

一旦您获得异常,Visual Studio(或您可能正在使用的任何IDE)将不允许您进一步操作,除非在代码中处理该异常。
这种行为是设计使然。

ehxuflar

ehxuflar5#

一个未捕获的异常会导致你的应用程序崩溃。相反,VS会让你停留在未捕获的异常上,你必须终止或回溯你的应用程序。

tyky79it

tyky79it6#

有些人说这是设计好的,但以前从来没有过。您可以再次按F5,代码将继续,直到结束或下一个异常捕获。
这是一个非常有用的行为,作为开发人员,我认为我们在调试和调查应用程序中的问题时不应该遇到人为的障碍。
也就是说,我找到了一个解决办法:

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

这看起来很脏,对于一件过去很简单的事情来说工作太多了,但我想这就是我们今天所要做的。

相关问题