Customizing termination behavior for uncaught exception In C++

Whenever an exception arises in C++, it is handled as per the behavior defined using the try-catch block. However, there is often the case when an exception is thrown but isn’t caught because the exception handling subsystem fails to find a matching catch block for that particular exception. In that case, the following set of actions takes place:

  1. The exception handling subsystem calls the function: unexpected(). This function, provided by the default C++ library, defines the behavior when an uncaught exception arises. By default, unexpected calls terminate().
  2. The terminate function defines the actions that are to be performed during process termination. This, by default, calls abort().
  3. The process is aborted.

The terminate() and unexpected() simply call other functions to actually handle an error. As explained above, terminate calls abort(), and unexpected() calls terminate(). Thus, both functions halt the program execution when an exception handling error occurs. However, you can change the way termination occurs.

To change the terminate handler, the function used is set_terminate(terminate_handler newhandler), which is defined in the header <exception>.

The following program demonstrates how to set a custom termination handler:

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP program to set a new termination handler
// for uncaught exceptions.
#include <exception>
#include <iostream>
using namespace std;
  
// definition of custom termination function
void myhandler()
{
    cout << "Inside new terminate handler\n";
    abort();
}
  
int main()
{
    // set new terminate handler
    set_terminate(myhandler); 
    try {
        cout << "Inside try block\n";
        throw 100;
    }
    catch (char a) // won't catch an int exception
    {
        cout << "Inside catch block\n";
    }
    return 0;
}

chevron_right


Output:

Inside try block
Inside new terminate handler


Runtime Error:

Abort signal from abort(3) (SIGABRT)

It is to be duly noted that the only thing that your custom terminate handler must do is stop the program execution. It must not return to the program or resume it in any way.



My Personal Notes arrow_drop_up

Intern Technical Content Writing at GeeksforGeeks

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.




Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.