如何抛出Delphi无法捕获的异常?

mjn*_*mjn 4 delphi exception-handling exception

是否有可能在Delphi中构造一段代码片段,使得假设的EChuckNorrisException无法捕获?

对于我刚刚发现的Java编程语言,在Uncatchable ChuckNorrisException中回答了Yes

Mas*_*ler 9

在Delphi中,可以引发任何对象(TObject后代),但是按照惯例,这通常仅限于从基Exception类下降的对象.并且可以创建一个可以捕获任何内容的覆盖异常处理程序.

尝试以某种方式报告信息的大多数catchall异常处理程序如下所示:

try
...
except
  on E: Exception do
    ...
end;
Run Code Online (Sandbox Code Playgroud)

因此,如果你提出一些不会降临的东西Exception,它就会经历这种风格而不会被抓住.

但是,它也可以像这样写:

try
...
except
  ...
end;
Run Code Online (Sandbox Code Playgroud)

什么样的异常处理程序都没有.

如果引发未在任何地方捕获的异常,程序将立即以错误终止.如果这是预期的效果,可以通过Halt使用非零错误代码调用来做同样的事情.

  • 除此之外,Delphi中的异常(无论是否从"异常"派生)最终都会通过OS API调用来实际引发异常,例如Windows上的`RaiseException()`.RTL具有核心异常处理程序,可以捕获操作系统可以报告的任何类型的异常.引发的对象包含一个特殊的异常代码,因此这些处理程序可以识别它们,并在触发`except`块时将原始异常数据解码回原始对象. (5认同)