什么是"第一次机会例外"?

Fre*_*ool 96 .net debugging exception first-chance-exception visual-studio

什么是第一次机会异常?它是如何以及在何处从.NET程序中产生的?为什么它被这个特殊的名字所称(我们谈论的是什么'机会')?

ann*_*ata 73

这是一个调试概念.基本上抛出异常给调试器第一,然后到如果不处理它被扔在了调试器的实际程序第二的时候,给你一个机会,之前和应用程序本身后,用它做的东西在你的IDE.这似乎是Microsoft Visual Studio的发明.

  • 它不仅仅是一个调试概念; C#没有提供在运行时观察两遍异常处理的方便方法,但vb.net确实如此.基本上,当抛出异常时,运行时通过搜索调用堆栈来查找是否有人要捕获它.该过程发生在*任何`finally`块运行之前*.一旦系统决定谁将捕获异常(并确定某人确实要去),系统将开始展开堆栈.请注意,如果从`finally`块抛出异常... (18认同)
  • ...期望捕获原始异常的代码最终可能不会这样做; 有很多奇怪的角落案件. (15认同)
  • 当您将调试器配置为在所有_thrown_异常(不仅仅是未处理的异常)中中断时,或者如果您"步入"某个抛出的语句时,就会发生这种情况.您看到消息**YourApp.exe**中出现'foo'类型的第一次机会异常**.您仍然可以继续(F5)或继续前进(F11).然后,如果有一个`catch`,那么控制就在那里.如果没有`catch`块,你得到"第二次机会"中断,这次消息是**在YourApp.exe**中发生类型'foo'的未处理异常.从这里开始,尝试继续或继续前进将不会成功. (5认同)
  • @NoSaidTheCompiler:我读过各种博客中的异常处理; 我希望搜索"异常过滤器.net"应该会出现一些关于这个主题的博客. (2认同)

Ian*_*n G 16

抛出异常时会引发第一次机会异常通知.第二次机会通知是在没有被抓住的时候.(机会 - 就像在调试器中闯入代码的机会一样).

第一次和第二次机会异常处理


cod*_*tty 7

我刚刚开始使用调试器并遇到了这个。在我的研究中,我发现了 MSDN 博客文章什么是第一次机会异常?这为我解决了问题。

对我来说,这篇博文的最大收获是它指的是向调试器发出的通知,而不是我的代码必须需要处理的内容,最重要的是,

“第一次机会异常消息通常并不意味着代码中存在问题。”