Skip to content
This repository has been archived by the owner on Oct 12, 2022. It is now read-only.

Commit

Permalink
lazier generation of stack traces
Browse files Browse the repository at this point in the history
  • Loading branch information
adamdruppe committed Feb 8, 2014
1 parent 20c67d0 commit 8b9d9dc
Showing 1 changed file with 9 additions and 5 deletions.
14 changes: 9 additions & 5 deletions src/core/runtime.d
Expand Up @@ -442,8 +442,6 @@ Throwable.TraceInfo defaultTraceHandler( void* ptr = null )
{
this()
{
static enum MAXFRAMES = 128;
void*[MAXFRAMES] callstack;
numframes = 0; //backtrace( callstack, MAXFRAMES );
if (numframes < 2) // backtrace() failed, do it ourselves
{
Expand Down Expand Up @@ -475,12 +473,10 @@ Throwable.TraceInfo defaultTraceHandler( void* ptr = null )
}
}
}
framelist = backtrace_symbols( callstack.ptr, numframes );
}

~this()
{
free( framelist );
}

override int opApply( scope int delegate(ref const(char[])) dg ) const
Expand Down Expand Up @@ -512,6 +508,9 @@ Throwable.TraceInfo defaultTraceHandler( void* ptr = null )
}
int ret = 0;

const framelist = backtrace_symbols( callstack.ptr, numframes );
scope(exit) free(cast(void*) framelist);

for( int i = FIRSTFRAME; i < numframes; ++i )
{
char[4096] fixbuf;
Expand All @@ -535,7 +534,8 @@ Throwable.TraceInfo defaultTraceHandler( void* ptr = null )

private:
int numframes;
char** framelist;
static enum MAXFRAMES = 128;
void*[MAXFRAMES] callstack;

private:
const(char)[] fixline( const(char)[] buf, ref char[4096] fixbuf ) const
Expand Down Expand Up @@ -597,6 +597,10 @@ Throwable.TraceInfo defaultTraceHandler( void* ptr = null )
}

assert(symBeg < buf.length && symEnd < buf.length);
if(symBeg == symEnd)
{
return buf;
}
assert(symBeg < symEnd);

enum min = (size_t a, size_t b) => a <= b ? a : b;
Expand Down

0 comments on commit 8b9d9dc

Please sign in to comment.