Branch data Line data Source code
1 : : // Copyright (c) 2009-2010 Satoshi Nakamoto 2 : : // Copyright (c) 2009-2023 The Bitcoin Core developers 3 : : // Distributed under the MIT software license, see the accompanying 4 : : // file COPYING or http://www.opensource.org/licenses/mit-license.php. 5 : : 6 : : #include <util/exception.h> 7 : : 8 : : #include <logging.h> 9 : : #include <tinyformat.h> 10 : : 11 : : #include <exception> 12 : : #include <iostream> 13 : : #include <string> 14 : : #include <typeinfo> 15 : : 16 : : #ifdef WIN32 17 : : #include <windows.h> 18 : : #endif // WIN32 19 : : 20 : 0 : static std::string FormatException(const std::exception* pex, std::string_view thread_name) 21 : : { 22 : : #ifdef WIN32 23 : : char pszModule[MAX_PATH] = ""; 24 : : GetModuleFileNameA(nullptr, pszModule, sizeof(pszModule)); 25 : : #else 26 : 0 : const char* pszModule = "bitcoin"; 27 : : #endif 28 [ # # ]: 0 : if (pex) 29 : 0 : return strprintf( 30 [ # # ]: 0 : "EXCEPTION: %s \n%s \n%s in %s \n", typeid(*pex).name(), pex->what(), pszModule, thread_name); 31 : : else 32 : 0 : return strprintf( 33 : : "UNKNOWN EXCEPTION \n%s in %s \n", pszModule, thread_name); 34 : 0 : } 35 : : 36 : 0 : void PrintExceptionContinue(const std::exception* pex, std::string_view thread_name) 37 : : { 38 : 0 : std::string message = FormatException(pex, thread_name); 39 [ # # # # : 0 : LogPrintf("\n\n************************\n%s\n", message); # # ] 40 [ # # ]: 0 : tfm::format(std::cerr, "\n\n************************\n%s\n", message); 41 : 0 : }