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 : 0 : "UNKNOWN EXCEPTION \n%s in %s \n", pszModule, thread_name);
34 : : }
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 : }
|