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 : }