作者:手机用户2502852037 | 2023-08-30 14:26
什么是第一次机会异常?它是如何以及在何处从.NET程序中产生的?为什么它被这个特殊的名字所称(我们谈论的是什么'机会')?
1> annakata..:
这是一个调试概念.基本上抛出异常给调试器第一,然后到如果不处理它被扔在了调试器的实际程序第二的时候,给你一个机会,之前和应用程序本身后,用它做的东西在你的IDE.这似乎是Microsoft Visual Studio的发明.
它不仅仅是一个调试概念; C#没有提供在运行时观察两遍异常处理的方便方法,但vb.net确实如此.基本上,当抛出异常时,运行时通过搜索调用堆栈来查找是否有人要捕获它.该过程发生在*任何`finally`块运行之前*.一旦系统决定谁将捕获异常(并确定某人确实要去),系统将开始展开堆栈.请注意,如果从`finally`块抛出异常...
...期望捕获原始异常的代码最终可能不会这样做; 有很多奇怪的角落案件.
当您将调试器配置为在所有_thrown_异常(不仅仅是未处理的异常)中中断时,或者如果您"步入"某个抛出的语句时,就会发生这种情况.您看到消息**YourApp.exe**中出现'foo'类型的第一次机会异常**.您仍然可以继续(F5)或继续前进(F11).然后,如果有一个`catch`,那么控制就在那里.如果没有`catch`块,你得到"第二次机会"中断,这次消息是**在YourApp.exe**中发生类型'foo'的未处理异常.从这里开始,尝试继续或继续前进将不会成功.
@NoSaidTheCompiler:我读过各种博客中的异常处理; 我希望搜索"异常过滤器.net"应该会出现一些关于这个主题的博客.
2> Ian G..:
抛出异常时会引发第一次机会异常通知.第二次机会通知是在没有被抓住的时候.(机会 - 就像在调试器中闯入代码的机会一样).
第一次和第二次机会异常处理