当我调试一个C#程序并且我得到一个异常抛出(由代码抛出或由框架引发)时,IDE停止并让我到我的代码中的相应行。
现在一切都很好。
然后按“F5”继续。从这一刻起,它就像我在无限循环中一样接缝。 IDE总是让我回到异常行。我必须 Shift + F5 (停止调试/终止程序)才能离开他。
我在这里与一些同事交谈,他们告诉我,这种情况也会发生在他们身上。
发生了什么事?
答案 0 :(得分:47)
您可能在Visual Studio中选中了“解除未处理异常的调用堆栈”选项。当此选项打开时,Visual Studio将在异常之前展开,因此点击 F5 将保持撞击同一异常。
如果取消选中Visual Studio将在异常处理中断的选项,但点击 F5 将继续超过该行。
此选项位于菜单工具→选项→调试→常规。
答案 1 :(得分:17)
这是因为异常是未处理的,并且Visual Studio在没有以某种方式处理的情况下无法移过该行。简单地说,它是设计的。
您可以做的一件事是将执行点(黄线/箭头)拖放到代码中的上一个点并修改内存值(使用Visual Studio监视窗口),这样它们就不会导致例外。然后再次开始逐步执行代码 1 。
最好停止执行并修复导致异常的问题,或者如果不需要抛出则正确处理异常。
1 这可能会产生意想不到的后果,因为您实际上是在重新执行某些代码(而不是倒退执行)。
答案 2 :(得分:4)
当IDE在有问题的代码行中断时,它会在执行生成异常的行之前停止。如果你继续,它将再次执行该行,并再次获得异常。
如果你想超越错误以查看会发生什么,如果没有发生错误,你可以将黄色突出显示的行(下一步将执行的行)向下拖动到违规行为后的下一行代码行一。当然,根据违规行无法执行的操作,您的程序现在可能处于导致其他错误的状态,在这种情况下您并没有真正帮助自己,并且可能应该修复您的代码,以便异常或者没有发生,或处理得当。
答案 3 :(得分:3)
一旦获得异常,Visual Studio(或您可能正在使用的任何IDE)将不会让您继续前进,除非您的代码中处理了异常。
此行为是设计使然。
答案 4 :(得分:2)
未捕获的异常会降低您的应用。而不是这样,VS会让你处于未被捕获的异常状态,你必须终止或回退你的应用程序。