mirror of
https://github.com/dashpay/dash.git
synced 2024-12-27 13:03:17 +01:00
48d92f116e
* Add libbacktrace to depends This is currently only useful to extract symbols. It fails to gather stacktraces when compiled with MinGW, so we can only use it to get symbol information from a stack trace which we gathered outside of libbacktrace. * Add -mbig-obj to CXXFLAGS for MinGW builds * Implement stacktraces for C++ exceptions This is a hack and should only be used for debugging. It works by wrapping the C++ ABI __wrap___cxa_allocate_exception. The wrapper records a backtrace and stores it in a global map. Later the stacktrace can be retrieved with GetExceptionStacktraceStr. This commit also adds handlers to pretty print uncaught exceptions and signals. * Use GetPrettyExceptionStr for all unhandled exceptions * Use --enable-stacktraces in CI for linux32/linux64 * Register exception translators to pretty print exceptions in unit tests * Catch and print python exceptions when stopping nodes Otherwise the code at the bottom is never executed when nodes crash, leading to no output of debug.log files on Travis. * Remove now unneeded/unused TestCrash methods
45 lines
1.0 KiB
C++
45 lines
1.0 KiB
C++
// Copyright (c) 2014-2018 The Dash Core developers
|
|
// Distributed under the MIT/X11 software license, see the accompanying
|
|
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
|
|
|
#ifndef DASH_STACKTRACES_H
|
|
#define DASH_STACKTRACES_H
|
|
|
|
#include <string>
|
|
#include <sstream>
|
|
#include <exception>
|
|
|
|
#include <cxxabi.h>
|
|
|
|
#include "tinyformat.h"
|
|
|
|
std::string DemangleSymbol(const std::string& name);
|
|
|
|
std::string GetCurrentStacktraceStr(size_t skip = 0, size_t max_depth = 16);
|
|
|
|
std::string GetExceptionStacktraceStr(const std::exception_ptr& e);
|
|
std::string GetPrettyExceptionStr(const std::exception_ptr& e);
|
|
|
|
template<typename T>
|
|
std::string GetExceptionWhat(const T& e);
|
|
|
|
template<>
|
|
inline std::string GetExceptionWhat(const std::exception& e)
|
|
{
|
|
return e.what();
|
|
}
|
|
|
|
// Default implementation
|
|
template<typename T>
|
|
inline std::string GetExceptionWhat(const T& e)
|
|
{
|
|
std::ostringstream s;
|
|
s << e;
|
|
return s.str();
|
|
}
|
|
|
|
void RegisterPrettyTerminateHander();
|
|
void RegisterPrettySignalHandlers();
|
|
|
|
#endif//DASH_STACKTRACES_H
|