Application.OnException无法处理所有异常 - Delphi

Aar*_*i S 1 delphi delphi-7

我正在使用Delphi 7并试图处理在程序运行期间抛出的所有可能的异常.我用过Application.OnException:= HandlerProcedure; 处理异常,但是当异常发生时,HandlerProcedure永远不会被调用.为了确保它是否真的有效,我在分配Application.OnException后引发了异常,如下所示:

Application.OnException := HandlerProcedure;
raise Exception.Create('Exception');
Run Code Online (Sandbox Code Playgroud)

并将HandlerProcedure定义为:

procedure TFormMain.HandlerProcedure(Sender: TObject; E: Exception);
begin
    ShowMessage('Exception.');      
    Exit;
end;
Run Code Online (Sandbox Code Playgroud)

但HandlerProcedure永远不会被调用.如何让它处理所有异常?

Arn*_*hez 12

如果要拦截所有异常,则需要实现RTLUnwindProc低级别过程.

这有点低级(例如,它需要asm技能),所以你应该更好地依赖现有的代码.看到这个堆栈溢出问题.我甚至在我自己的回答中添加了一些参考代码(包括低级asm,在Del32下使用Win32).

  • Asker肯定不明白你推断的细微差别 (4认同)
  • @DavidHeffernan OP写道他是"*试图处理在程序运行期间抛出的所有可能异常*"......听起来好像我的回答符合这个问题,不是吗? (3认同)
  • 因为您认为OP可能会进行融资而进行投票是非常不公平的.谷歌搜索'处理所有Delphi程序的例外'肯定会指出这个问题.我有时厌倦了SO选民. (2认同)