|
|
@ -23,6 +23,21 @@ namespace absl { |
|
|
|
ABSL_NAMESPACE_BEGIN |
|
|
|
ABSL_NAMESPACE_BEGIN |
|
|
|
namespace debugging_internal { |
|
|
|
namespace debugging_internal { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Type of function used for printing in stack trace dumping, etc.
|
|
|
|
|
|
|
|
// We avoid closures to keep things simple.
|
|
|
|
|
|
|
|
typedef void OutputWriter(const char*, void*); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// RegisterDebugStackTraceHook() allows to register a single routine
|
|
|
|
|
|
|
|
// `hook` that is called each time DumpStackTrace() is called.
|
|
|
|
|
|
|
|
// `hook` may be called from a signal handler.
|
|
|
|
|
|
|
|
typedef void (*SymbolizeUrlEmitter)(void* const stack[], int depth, |
|
|
|
|
|
|
|
OutputWriter writer, void* writer_arg); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Registration of SymbolizeUrlEmitter for use inside of a signal handler.
|
|
|
|
|
|
|
|
// This is inherently unsafe and must be signal safe code.
|
|
|
|
|
|
|
|
void RegisterDebugStackTraceHook(SymbolizeUrlEmitter hook); |
|
|
|
|
|
|
|
SymbolizeUrlEmitter GetDebugStackTraceHook(); |
|
|
|
|
|
|
|
|
|
|
|
// Returns the program counter from signal context, or nullptr if
|
|
|
|
// Returns the program counter from signal context, or nullptr if
|
|
|
|
// unknown. `vuc` is a ucontext_t*. We use void* to avoid the use of
|
|
|
|
// unknown. `vuc` is a ucontext_t*. We use void* to avoid the use of
|
|
|
|
// ucontext_t on non-POSIX systems.
|
|
|
|
// ucontext_t on non-POSIX systems.
|
|
|
|