在高级编程语言(例如 Java)中,有异常的概念。
这些异常可以隐式或显式抛出。抛出异常后,可在某些特殊的错误处理分支中捕获该异常。
现在我想知道:引擎盖下发生了什么?
对于操作系统来说什么是例外?
如何“捕获”异常?
答案1
来自 MSDN 的信息:这里
异常类似于 CPU 处理的中断。当发生异常时,无论是软件还是硬件,处理器都会停止执行并将控制权移交给系统。系统会保存当前线程状态和异常信息。然后它会尝试查找处理程序。这基本上就是“捕获”的方式。
寻找处理程序的顺序是:
- 附加到程序的调试器
- 查找基于框架的异常处理程序(特定于语言)
- 再次询问调试器
- 如果未调试,或者调试器未处理异常,则操作系统将提供其默认处理。对于大多数异常,默认操作是调用 ExitProcess。
如果是内核模式代码(操作系统),则它会尝试查找异常处理程序。如果没有,或者可用的异常处理程序无法处理该特定异常,则调用 ExitWindows 函数。如果您能猜出它的作用,则可获得加分。
换句话说,处理异常的是高级语言,操作系统只是提供了最后的选择。