[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/boostorg/stacktrace/develop/example/terminate_handler.cpp [Back]  [Original]

// Copyright Antony Polukhin, 2016-2026.
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)

#include 
BOOST_NOINLINE void foo(int i);
BOOST_NOINLINE void bar(int i);
 
BOOST_NOINLINE void bar(int i) {
    boost::array a = {{-1, -231, -123, -23, -32}};
    if (i >= 0) {
        foo(a[i]);
    } else {
        std::terminate();
    }
}

BOOST_NOINLINE void foo(int i) {
    bar(--i);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//[getting_started_signal_handlers

#include      // ::signal, ::raise
#include 

void my_signal_handler(int signum) {
    ::signal(signum, SIG_DFL);

    // Outputs nothing or trash on majority of platforms
    boost::stacktrace::safe_dump_to("./backtrace.dump");

    ::raise(SIGABRT);
}
//]

void setup_handlers() {
//[getting_started_setup_signel_handlers
    ::signal(SIGSEGV, &my_signal_handler);
    ::signal(SIGABRT, &my_signal_handler);
//]
}


//[getting_started_terminate_handlers
#include        // std::abort
#include      // std::set_terminate
#include       // std::cerr

#include 

void my_terminate_handler() {
    try {
        std::cerr 

Web Proxy Viewer  |  New URL  |  Original Page