/root/bitcoin/src/util/exception.cpp
Line | Count | Source |
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 | | static std::string FormatException(const std::exception* pex, std::string_view thread_name) |
21 | 0 | { |
22 | | #ifdef WIN32 |
23 | | char pszModule[MAX_PATH] = ""; |
24 | | GetModuleFileNameA(nullptr, pszModule, sizeof(pszModule)); |
25 | | #else |
26 | 0 | const char* pszModule = "bitcoin"; |
27 | 0 | #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 | 0 | else |
32 | 0 | return strprintf( |
33 | 0 | "UNKNOWN EXCEPTION \n%s in %s \n", pszModule, thread_name); |
34 | 0 | } |
35 | | |
36 | | void PrintExceptionContinue(const std::exception* pex, std::string_view thread_name) |
37 | 0 | { |
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 | } |