Packets: Fix VariantParser invalid parser access bug
[senf.git] / Utils / Exception.cc
index a651239..b2c750f 100644 (file)
 #include <execinfo.h>
 #include <sstream>
 #include "../config.hh"
-
-// Copied from the binutils sources 
-#define HAVE_DECL_BASENAME 1
-#define HAVE_DECL_ASPRINTF 1
-#define HAVE_DECL_VASPRINTF 1
-#include "impl/demangle.h"
+#include "Backtrace.hh"
 
 #define prefix_
 ///////////////////////////////cc.p////////////////////////////////////////
@@ -48,30 +43,12 @@ prefix_ void senf::ExceptionMixin::addBacktrace()
 {
     void * entries[SENF_DEBUG_BACKTRACE_NUMCALLERS];
     unsigned nEntries( ::backtrace(entries, SENF_DEBUG_BACKTRACE_NUMCALLERS) );
-    char ** symbols = ::backtrace_symbols(entries, nEntries);
-    
+
     std::stringstream ss;
     ss << "\nException at\n";
-    for (unsigned i=0; i<nEntries; ++i) {
-        std::string sym (symbols[i]);
-        std::string::size_type fnStart (sym.find("("));
-        if (fnStart != std::string::npos) {
-            std::string::size_type fnEnd (sym.find(")",fnStart+1));
-            if (fnEnd != std::string::npos) {
-                std::string fn (sym,fnStart+1, fnEnd-fnStart-1);
-                char * demangled ( ::cplus_demangle(fn.c_str(), 
-                                                    DMGL_TYPES|DMGL_AUTO) );
-                if (demangled) {
-                    ss << "  " << demangled << "( ... )" << std::string(sym,fnEnd+1) << "\n";
-                    continue;
-                }
-            }
-        }
-        ss << "  " << sym << "\n";
-    }
+    formatBacktrace(ss, entries, nEntries);
     ss << "-- \n" << message_;
     message_ = ss.str();
-    free(symbols);
 }
 #endif