OC Systems

Home | Contact | Advanced Search 

Technology

Is there a way to catch and suppress exceptions?

You can catch exceptions in the on_exit section of your probes. To catch exceptions, all you have to do is to distinguish between a normal exit from your subprogram and an exception exit from it, as both would trigger your probe's on_exit actions.

For example, if subprogram "fred()" may leave via exception, you could test for this as follows:

probe thread
{
  probe "fred()"
  {
    on_exit
    {
      switch(ap_ProbeActionReason)
      {
        case ap_AdaExceptionPropagated:
        case ap_CppExceptionPropagated:
          log("Exception exit from fred()\n");
      }
    }
  }
}

If you need to, you can find other action reasons defined in aprobe.h. The example above works well when you know where the exception may be raised. But when you don't know, you can log all exceptions raised in your program. To do so, use the following probe:

probe thread
{
   ap_LogExceptionsInThread;
}

There are also other macros for this: ap_PrintExceptionsInThread, ap_PrintAndLogExceptionsInThread. These are all defined in aprobe.h.

Aprobe Technology Overview

Schedule a web demo

Contact us