【发布时间】:2010-09-14 22:23:36
【问题描述】:
当我调试 C# 程序并抛出异常(由代码抛出或由框架抛出)时,IDE 会停止并将我转到代码中的相应行。
现在一切都很好。
然后我按“F5”继续。从这一刻起,我仿佛陷入了无限循环。 IDE 总是让我回到异常行。我必须 Shift + F5 (停止调试/终止程序)才能摆脱他。
我在这里与一些同事交谈,他们告诉我这有时也会发生在他们身上。
发生了什么事?
【问题讨论】:
当我调试 C# 程序并抛出异常(由代码抛出或由框架抛出)时,IDE 会停止并将我转到代码中的相应行。
现在一切都很好。
然后我按“F5”继续。从这一刻起,我仿佛陷入了无限循环。 IDE 总是让我回到异常行。我必须 Shift + F5 (停止调试/终止程序)才能摆脱他。
我在这里与一些同事交谈,他们告诉我这有时也会发生在他们身上。
发生了什么事?
【问题讨论】:
一旦您遇到异常,除非在您的代码中处理了异常,否则 Visual Studio(或您可能使用的任何 IDE)将不会让您继续前进。
此行为是设计使然。
【讨论】:
这是因为该异常未处理,并且 Visual Studio 无法在没有以某种方式处理的情况下越过该行。简而言之,这是设计使然。
您可以做的一件事是将执行点(黄线/箭头)拖放到代码中的前一个点,并修改内存中的值(使用 Visual Studio 监视窗口),这样它们就不会导致例外。然后再次开始单步执行代码1。
最好停止执行并修复导致异常的问题,或者在不需要抛出时正确处理异常。
1 这可能会产生意想不到的后果,因为您实际上是在重新执行某些代码(而不是倒回执行)。
【讨论】:
未捕获的异常会导致您的应用崩溃。相反,VS 只会让您处于未捕获的异常状态,您将不得不终止或回退您的应用程序。
【讨论】:
当 IDE 在有问题的代码行上中断时,它会在执行生成异常的行之前停止。如果继续,它将再次执行该行,并再次获取异常。
如果您想跳过错误以查看会发生什么,如果没有发生错误,您可以将黄色突出显示的行(接下来将执行的行)拖到违规后的下一行代码一。当然,根据违规行未能执行的操作,您的程序现在可能处于导致其他错误的状态,在这种情况下,您并没有真正帮助自己,并且可能应该修复您的代码,以便异常不会'不会发生,或者处理得当。
【讨论】:
您可能在 Visual Studio 中选中了“Unwind the callstack on unhandled exceptions”选项。当此选项打开时,Visual Studio 将在异常之前展开,因此按 F5 将继续进入相同的异常。
如果取消选中选项 Visual Studio 将在异常处中断,但按 F5 将继续超过该行。
此选项位于菜单工具 → 选项 → 调试 → 常规。
更新:According to Microsoft,此选项在 VS2017 中从 Visual Studio 中删除,可能更早。
【讨论】: