NS/main/source/util/Stacktrace.h

42 lines
1.7 KiB
C
Raw Normal View History

// ZASSERT AND STACKTRACE are an improved assertion system which augments
// the WIN32 assert.h standard _assert.
// (c) 1999 Zachary B. Simpson
// Code may be used and distributed freely as long as all
// changes are noted appropriately.
#ifndef STACKTRACE_H
#define STACKTRACE_H
char *stackTrace( int skipAssert );
// This function traces up the stack and creates a useful
// stack dump good for printing after an assert of fatal.
// It parses the symbol tables inside of the exe file
// in order to print a useful report. However, it
// only understands COFF format debugging. You must enable
// COFF in the Project Settings Linker Options. You may,
// if you choose, enable both COFF and MS formats.
// If COFF data is not available, it will print out using
// a hex dump, and may print more information than is valid.
// The traversal of the stack is predicated on assumptions
// about non-optimized MSVC stack frames. Thus, if optimizations
// are on, results may not be predicatble.
// If the skipAssert flag is true, it will not dump
// and functions with the word assert in them. Useful
// for ignoring the call to assert which is not helpful.
#ifdef WIN32
char *demangleMSDEVFuncName(
char *mangledName,
char funcName[], int funcNameMax,
char args[], int maxArgs,
int &numArgs
);
#endif
// This function is used by the stackTrace function in
// order to deceipher the mangled C++ function names
// generated by MSDEV in order to determine the argument list.
// The parser for this is very complicated and unfortunately
// may not be able to parse all names. In these cases,
// stackTrace should resort to printing a hex dump.
#endif