Bitcoin Core  27.99.0
P2P Digital Currency
exception.cpp
Go to the documentation of this file.
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 {
22 #ifdef WIN32
23  char pszModule[MAX_PATH] = "";
24  GetModuleFileNameA(nullptr, pszModule, sizeof(pszModule));
25 #else
26  const char* pszModule = "bitcoin";
27 #endif
28  if (pex)
29  return strprintf(
30  "EXCEPTION: %s \n%s \n%s in %s \n", typeid(*pex).name(), pex->what(), pszModule, thread_name);
31  else
32  return strprintf(
33  "UNKNOWN EXCEPTION \n%s in %s \n", pszModule, thread_name);
34 }
35 
36 void PrintExceptionContinue(const std::exception* pex, std::string_view thread_name)
37 {
38  std::string message = FormatException(pex, thread_name);
39  LogPrintf("\n\n************************\n%s\n", message);
40  tfm::format(std::cerr, "\n\n************************\n%s\n", message);
41 }
#define MAX_PATH
Definition: compat.h:70
static std::string FormatException(const std::exception *pex, std::string_view thread_name)
Definition: exception.cpp:20
void PrintExceptionContinue(const std::exception *pex, std::string_view thread_name)
Definition: exception.cpp:36
#define LogPrintf(...)
Definition: logging.h:244
void format(std::ostream &out, const char *fmt, const Args &... args)
Format list of arguments to the stream according to given format string.
Definition: tinyformat.h:1059
#define strprintf
Format arguments and return the string or write to given std::ostream (see tinyformat::format doc for...
Definition: tinyformat.h:1161