是否有可能在Delphi中构建一小段代码,使得一个假想的EChuckNorrisException无法被捕获?
对于Java编程语言,我发现这个问题已经在Uncatchable ChuckNorrisException中被回答为是。
是否有可能在Delphi中构建一小段代码,使得一个假想的EChuckNorrisException无法被捕获?
对于Java编程语言,我发现这个问题已经在Uncatchable ChuckNorrisException中被回答为是。
在Delphi中,可以触发任何对象(TObject
的后代类),但按照惯例,通常只限于从基础Exception
类继承的对象。同时,可以创建一个全局异常处理程序来捕获任何异常。
大多数试图以某种方式报告信息的全局异常处理程序看起来像这样:
try
...
except
on E: Exception do
...
end;
如果你抛出的对象并不是从Exception
类继承而来的,那么它将通过这个样式而不被捕获。
然而,你也可以像这样写:
try
...
except
...
end;
那种异常处理方式不会错过任何东西。
如果您引发了一个没有被任何地方捕获的异常,程序将立即以错误终止。如果这是预期的效果,可以通过使用非零错误代码调用 Halt
来实现相同的效果。
Exception
派生还是不派生的Delphi中的异常,最终都会通过操作系统API调用来实际引发异常,例如在Windows上使用RaiseException()
。运行时库(RTL)已经设置了核心异常处理程序,以捕获操作系统可以报告的几乎所有类型的异常。抛出的对象会被包装成特殊的异常代码,以便这些处理程序可以识别它们,并在触发except
块时将原始异常数据解码回原始对象。 - Remy Lebeau