当你正在调试程序的时候,你是否曾经看到过消息窗口输出关于“First Chance Exception”(第一轮异常)的信息?也许有人会问,“什么是第一轮异常?”、“出现第一轮异常的提示意味着代码有问题吗?”
什么是第一轮异常?
(1)当一个程序被调试的时候,如果有异常发生调试器会得到通知,这个时候,被调试的应用程序将会被挂起并且调试器决定如何来处理这个异常。当一个异常第一次经过这种机制就是所谓的“第一轮异常”。根据调试器的设置,调试器可能会忽略这个异常并让程序继续执行,或者保持被调试程序的挂起状态并进入调试模式。
如果应用程序无法处理这个异常,调试器会再次得到通知,这个就是所谓的“Second Chance Exception”(第二轮异常)了。同样调试器会再次挂起被调试程序并决定如何来处理这个异常。通常情况下,当第二轮异常发生的时候,调试器都被配置为进入调试模式,来允许用户进行调试。
出现第一轮异常的提示意味着代码有问题吗?
第一轮异常的提示消息通常并不意味着代码有问题,对于那些能完善处理异常的程序或者组件来说,出现第一轮异常的提示信息意味着出现了一个异常并且得到了妥善的处理。
对于没有异常处理代码的程序来说,调试器会收到第二轮异常通知并且会提示没有处理的异常信息。
(以上信息整理自《What is a First Chance Exception》)
异常与调试器
Microsoft Visual Studio的调试器为异常调试提供了出色的支持。当进程中的某个线程抛出异常,操作系统会马上通知调试器(如果调试器已经附着)。这个通知被称为“首次机会通知”(first-chance notification)。调试器将响应这个通知,促使线程寻找异常过滤程序。如果所有的异常过滤程序都返回EXCEPTION_CONTINUE_SEARCH,操作系统会给调试器一个“最后机会通知”(last-chance notification)。这两个通知的存在使得软件开发人员能够更好的控制异常调试的过程。
针对每个解决方案,我们可以通过Visual Studio调试器的“调试”-“异常”菜单打开Exceptions对话框决定调试器如何响应首次机会异常通知。
![Visual-Studio-Exceptions Visual Studio Exceptions对话框](http://www.programlife.net/wp-content/uploads/2011/10/Visual-Studio-Exceptions.jpg)
(以上信息整理自《Windows核心编程》)
个人总结:对于First Chance Exception和Second/Last Chance Exception,这些都只会出现于调试器中。前者意味着被调试程序确实产生了一个异常,如果被调试程序自己处理掉了这个异常,那么就不会出现Second/Last Chance Exception的提示,反之如果没有处理则出现Second/Last Chance Exception的提示;如果是一个正常执行的程序,Second/Last Chance Exception意味着这个程序的终止运行。
本文出自程序人生 >> What is a First Chance Exception(什么是第一轮异常)
推荐阅读:
来用低级键盘钩子实现键盘改键QQScLauncher逆向分析