2004-03-12 05:15:32 +00:00
|
|
|
#ifndef BACKTRACE_H
|
|
|
|
|
#define BACKTRACE_H
|
|
|
|
|
|
|
|
|
|
/* This API works like backtrace_pointers(), to retrieve a stack trace. */
|
|
|
|
|
|
|
|
|
|
/* This contains the information necessary to backtrace a thread. */
|
|
|
|
|
struct BacktraceContext
|
|
|
|
|
{
|
|
|
|
|
#if defined(LINUX)
|
2004-03-21 03:36:54 +00:00
|
|
|
const void *eip, *ebp, *esp;
|
2004-03-12 05:15:32 +00:00
|
|
|
pid_t pid;
|
|
|
|
|
#endif
|
2004-03-19 08:17:44 +00:00
|
|
|
|
|
|
|
|
#if defined(DARWIN)
|
|
|
|
|
void *FramePtr;
|
|
|
|
|
#endif
|
2004-03-12 05:15:32 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/* Initialize. This is optional. If not called explicitly, it will be
|
|
|
|
|
* called as necessary. This may do things that are not safe to do in
|
|
|
|
|
* crash conditions. */
|
|
|
|
|
void InitializeBacktrace();
|
|
|
|
|
|
|
|
|
|
/* Retrieve up to size-1 backtrace pointers in buf. The array will be
|
|
|
|
|
* null-terminated. If ctx is NULL, retrieve the current backtrace; otherwise
|
|
|
|
|
* retrieve a backtrace for the given context. (Not all backtracers may
|
|
|
|
|
* support contexts.) */
|
2004-03-19 06:25:45 +00:00
|
|
|
void GetBacktrace( const void **buf, size_t size, const BacktraceContext *ctx = NULL );
|
2004-03-12 05:15:32 +00:00
|
|
|
|
|
|
|
|
/* Set up a BacktraceContext to get a backtrace for a thread. ThreadID may
|
2004-03-19 20:39:15 +00:00
|
|
|
* not be the current thread. True is returned on success, false on failure. */
|
2004-03-19 09:25:45 +00:00
|
|
|
bool GetThreadBacktraceContext( int ThreadID, BacktraceContext *ctx );
|
2004-03-12 05:15:32 +00:00
|
|
|
|
2004-03-19 05:03:19 +00:00
|
|
|
/* Set up a BacktraceContext to get a backtrace after receiving a signal, given
|
|
|
|
|
* a ucontext_t (see sigaction(2)). (This interface is UNIX-specific.) */
|
2004-03-19 08:48:47 +00:00
|
|
|
#if !defined(DARWIN)
|
2004-03-19 05:03:19 +00:00
|
|
|
#include <ucontext.h>
|
|
|
|
|
void GetSignalBacktraceContext( BacktraceContext *ctx, const ucontext_t *uc );
|
2004-03-19 08:48:47 +00:00
|
|
|
#endif
|
2004-03-19 05:03:19 +00:00
|
|
|
|
2004-03-19 08:17:44 +00:00
|
|
|
#if defined(DARWIN)
|
|
|
|
|
#include <MachineExceptions.h>
|
|
|
|
|
|
|
|
|
|
/* Set up a BacktraceContext to get a backtrace after receiving an exception, given
|
|
|
|
|
* an ExceptionInformation*. */
|
2004-03-19 08:18:54 +00:00
|
|
|
void GetExceptionBacktraceContext( BacktraceContext *ctx, const ExceptionInformation *exception );
|
2004-03-19 08:17:44 +00:00
|
|
|
#endif
|
|
|
|
|
|
2004-03-12 05:15:32 +00:00
|
|
|
#define BACKTRACE_METHOD_NOT_AVAILABLE ((void*) -1)
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|