exception.cpp raw

   1  // Copyright (c) 2009-2010 Satoshi Nakamoto
   2  // Copyright (c) 2009-present 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 <tinyformat.h>
   9  #include <util/log.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      LogWarning("\n\n************************\n%s", message);
  40      tfm::format(std::cerr, "\n\n************************\n%s\n", message);
  41  }
  42