X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FUtils%2FBacktrace.cc;h=039cffceab73d560e1126c238d7cf761610203bd;hb=5b2e9a63a43027c71ac470ac9bdecb72e8974951;hp=9ae708de3a07207c834f5e0bd23884e3b3b3557b;hpb=601d1f509f5bb24df167a4dd5a20da67a0af9af8;p=senf.git diff --git a/senf/Utils/Backtrace.cc b/senf/Utils/Backtrace.cc index 9ae708d..039cffc 100644 --- a/senf/Utils/Backtrace.cc +++ b/senf/Utils/Backtrace.cc @@ -1,6 +1,6 @@ // $Id$ // -// Copyright (C) 2008 +// Copyright (C) 2008 // Fraunhofer Institute for Open Communication Systems (FOKUS) // Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund @@ -27,20 +27,24 @@ //#include "Backtrace.ih" // Custom includes -#include +#include +#ifdef SENF_BACKTRACE + #include +#endif #include #include #include "Buffer.hh" //#include "Backtrace.mpp" #define prefix_ -///////////////////////////////cc.p//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// prefix_ void senf::formatBacktrace(std::ostream & os, void ** backtrace, unsigned numEntries) { +#ifdef SENF_BACKTRACE char ** symbols (::backtrace_symbols(backtrace, numEntries)); - static boost::regex const backtraceRx + static boost::regex const backtraceRx ("(.*)\\((.*)\\+(0x[0-9a-f]+)\\) \\[(0x[0-9a-f]+)\\]"); enum { File = 1, Symbol = 2, @@ -58,7 +62,7 @@ prefix_ void senf::formatBacktrace(std::ostream & os, void ** backtrace, unsigne symbol = std::string(demangled); free(demangled); } - os << " " << symbol << " + " << match[Offset] + os << " " << symbol << " + " << match[Offset] << "\n in " << match[File] << " [" << match[Address] << "]\n"; } else if (sym == "[0xffffe410]") @@ -71,16 +75,23 @@ prefix_ void senf::formatBacktrace(std::ostream & os, void ** backtrace, unsigne os << " " << sym << "\n"; } free(symbols); +#endif +#ifndef SENF_DEBUG + os << "no backtrace available please compile SENF without final=1\n"; +#endif + } prefix_ void senf::backtrace(std::ostream & os, unsigned numEntries) { - SENF_SCOPED_BUFFER( void*, entries, numEntries); - unsigned n ( ::backtrace(entries, numEntries) ); - senf::formatBacktrace(os, entries, n); +#ifdef SENF_BACKTRACE + SENF_SCOPED_BUFFER( void*, entries, numEntries); + unsigned n ( ::backtrace(entries, numEntries) ); + senf::formatBacktrace(os, entries, n); +#endif } -///////////////////////////////cc.e//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_ //#include "Backtrace.mpp"