Delphi – Is it possible to have a global exception hook

delphiexception handling

my code is fairly well covered with exception handling (try..except). Some exceptions are not expected to happen and some exceptions happen fairly often, which is expected and ok. Now I want to add some automated tests for this code. It would be good to know how many exceptions happened during execution, so I can later see if the expected number was raised or anything unexpected happened. I don't want to clutter every exception handling block with debug code, so my question is:

Is there a way to install some kind of global exception handler which sits right before all other exception handling blocks? I am searching for a central place to log these exceptions.

Thanks for any suggestions!

(And if this matters: it is Delphi 2009)

Best Answer

You can do the following:

  • preserve the value of System.RaiseExceptObjProc variable, which in normal Delphi app is pointing to SysUtils.RaiseExceptObject
  • create your own "RaiseExceptObject" proc and assign it to the RaiseExceptObjProc variable
  • in your own "RaiseExceptObject" proc you can do what you want, then call saved RaiseExceptObjProc value

For details, see above variable and procedure declarations.