【发布时间】:2010-10-08 13:24:41
【问题描述】:
究竟什么是第一次机会异常?它是如何以及从何处起源于 .NET 程序的?为什么会用那个奇特的名字来称呼它(我们所说的“机会”是什么)?
【问题讨论】:
标签: .net visual-studio debugging exception first-chance-exception
究竟什么是第一次机会异常?它是如何以及从何处起源于 .NET 程序的?为什么会用那个奇特的名字来称呼它(我们所说的“机会”是什么)?
【问题讨论】:
标签: .net visual-studio debugging exception first-chance-exception
这是一个调试概念。基本上异常会被抛出到调试器 first 然后到实际的程序,如果它没有被处理,它会在 second 时间被抛出到调试器,给你一个 机会 在应用程序之前和之后在 IDE 中使用它。这似乎是 Microsoft Visual Studio 的一项发明。
【讨论】:
finally 块运行之前。一旦系统决定谁将捕获异常(并确定某人实际上会捕获异常),系统将开始展开堆栈。请注意,如果从 finally 块中抛出异常...
catch,控制就到那里。如果没有catch 块,您将获得“第二次机会”中断,这一次消息是YourApp.exe 中发生'foo' 类型的未处理异常。从这里开始,尝试继续或更进一步将不会成功。
抛出异常时会引发第一次机会异常通知。第二次机会通知是当它没有被捕获时。 (机会 - 有机会闯入调试器中的代码)。
【讨论】:
我刚开始使用调试器并遇到了这个问题。在我的研究中,我发现 MSDN 博客文章 What is a First Chance Exception? 为我清除了它。
对我来说,这篇博文的最大收获是它指的是对调试器的通知,而不是我的代码必须处理的事情,最重要的是,
“第一次机会异常消息通常并不意味着存在 代码有问题。”
【讨论】:
在调试应用程序时,只要遇到异常,调试器就会收到通知。此时,应用程序被挂起,调试器决定如何处理异常。第一次通过这种机制称为“第一次机会”异常。
根据调试器的配置,它要么恢复应用程序并传递异常,要么让应用程序暂停并进入调试模式。如果应用程序处理了异常,它会继续正常运行。
第一次机会异常消息通常并不意味着代码中存在问题。对于优雅地处理异常的应用程序/组件,第一次机会异常消息让开发人员知道遇到并处理了异常情况。
【讨论】:
从开发人员的角度来看,它更多地涉及第二次机会异常,因为这意味着它没有在代码中处理;因此应用程序将停止。
第一次机会可能很多,但从开发的角度来看,需要关注更多的是第二次机会,因为它会导致应用程序崩溃。
【讨论】: