X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fdebug%2Fbacktrace.cpp;h=1236145aa67088d0b2aae1fd02031bd4b14068a6;hp=5e96005538eed6830bcb87b6e0e967467aa4af2b;hb=HEAD;hpb=9f2774a500d779af9a38f42bfb03b507444a47b0 diff --git a/source/debug/backtrace.cpp b/source/debug/backtrace.cpp index 5e96005..1236145 100644 --- a/source/debug/backtrace.cpp +++ b/source/debug/backtrace.cpp @@ -1,13 +1,6 @@ -/* $Id$ - -This file is part of libmspcore -Copyright © 2007 Mikko Rasa, Mikkosoft Productions -Distributed under the LGPL -*/ - // Must include something to test for glibc #include -#if !defined(WIN32) && defined(__GLIBC__) +#if !defined(_WIN32) && defined(__GLIBC__) #include #include #endif @@ -21,24 +14,24 @@ namespace Debug { Backtrace Backtrace::create() { -#if !defined(WIN32) && defined(__GLIBC__) +#if !defined(_WIN32) && defined(__GLIBC__) void *addresses[50]; - int count=::backtrace(addresses, 50); + int count = ::backtrace(addresses, 50); Backtrace bt; Dl_info dli; for(int i=0; iaddress<<" in "<symbol<<" from "<file<<'\n'; + for(const Backtrace::StackFrame &f: bt.get_frames()) + out << f << '\n'; + + return out; +} + +ostream &operator<<(ostream &out, const Backtrace::StackFrame &sf) +{ + out << sf.address; + if(!sf.symbol.empty()) + out << " in " << sf.symbol; + out << " from " << sf.file; return out; }