From 6de7a4e1d775955bdc0dc8e7c41cd83fefc2d6ec Mon Sep 17 00:00:00 2001 From: Chris Cantwell <c.cantwell@imperial.ac.uk> Date: Tue, 16 Apr 2019 07:09:12 +0100 Subject: [PATCH] Added option to disable backtrace in ErrorUtil. --- library/Demos/LibUtilities/ErrorStream.cpp | 1 + library/LibUtilities/BasicUtils/ErrorUtil.cpp | 1 + library/LibUtilities/BasicUtils/ErrorUtil.hpp | 37 +++++++++++++------ 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/library/Demos/LibUtilities/ErrorStream.cpp b/library/Demos/LibUtilities/ErrorStream.cpp index a5fe27faa4..e29a0f90da 100644 --- a/library/Demos/LibUtilities/ErrorStream.cpp +++ b/library/Demos/LibUtilities/ErrorStream.cpp @@ -46,6 +46,7 @@ int main(int argc, char *argv[]) // Set up a stringstream to catch any error output. std::stringstream ss; ErrorUtil::SetErrorStream(ss); + ErrorUtil::SetPrintBacktrace(false); // Set up output that will be overwritten with exception error (any // non-empty string). diff --git a/library/LibUtilities/BasicUtils/ErrorUtil.cpp b/library/LibUtilities/BasicUtils/ErrorUtil.cpp index 2c1fa97fd1..c9355396a2 100644 --- a/library/LibUtilities/BasicUtils/ErrorUtil.cpp +++ b/library/LibUtilities/BasicUtils/ErrorUtil.cpp @@ -40,5 +40,6 @@ namespace Nektar { // Defines default outstream in library. std::ostream *ErrorUtil::m_outStream = &std::cerr; +bool ErrorUtil::m_printBacktrace = true; } diff --git a/library/LibUtilities/BasicUtils/ErrorUtil.hpp b/library/LibUtilities/BasicUtils/ErrorUtil.hpp index 98232ee67e..fdb5c1946f 100644 --- a/library/LibUtilities/BasicUtils/ErrorUtil.hpp +++ b/library/LibUtilities/BasicUtils/ErrorUtil.hpp @@ -74,6 +74,11 @@ public: m_outStream = &o; } + inline static void SetPrintBacktrace(bool b) + { + m_printBacktrace = b; + } + inline static bool HasCustomErrorStream() { return m_outStream != &std::cerr; @@ -117,18 +122,21 @@ public: std::string btMessage(""); #if defined(NEKTAR_FULLDEBUG) #ifndef _WIN32 - void *btArray[40]; - int btSize; - char **btStrings; + if (m_printBacktrace) + { + void *btArray[40]; + int btSize; + char **btStrings; - btSize = backtrace(btArray, 40); - btStrings = backtrace_symbols(btArray, btSize); + btSize = backtrace(btArray, 40); + btStrings = backtrace_symbols(btArray, btSize); - for (int i = 0 ; i < btSize ; ++i) - { - btMessage += std::string(btStrings[i]) + "\n"; + for (int i = 0 ; i < btSize ; ++i) + { + btMessage += std::string(btStrings[i]) + "\n"; + } + free(btStrings); } - free(btStrings); #endif #endif @@ -137,7 +145,10 @@ public: case efatal: if (!rank) { - (*m_outStream) << btMessage; + if (m_printBacktrace) + { + (*m_outStream) << btMessage; + } (*m_outStream) << "Fatal : " << baseMsg << std::endl; } @@ -155,7 +166,10 @@ public: case ewarning: if (!rank) { - (*m_outStream) << btMessage; + if (m_printBacktrace) + { + (*m_outStream) << btMessage; + } (*m_outStream) << "Warning: " << baseMsg << std::endl; } break; @@ -176,6 +190,7 @@ public: private: LIB_UTILITIES_EXPORT static std::ostream *m_outStream; + LIB_UTILITIES_EXPORT static bool m_printBacktrace; }; /// Assert Level 0 -- Fundamental assert which -- GitLab