forked from 0ad/0ad
janwas
11904b70b3
basically extracted all portable symbol code from wdbg and mmgr, so that we can use it on linux as well. This was SVN commit r1891.
83 lines
1.8 KiB
C
Executable File
83 lines
1.8 KiB
C
Executable File
#ifndef DEBUG_H__
|
|
#define DEBUG_H__
|
|
|
|
// we need to include the platform-specific version here, so it can
|
|
// define debug_break. if it can be implemented as a macro (e.g. on ia32),
|
|
// the debugger will break directly at the target, instead of one function
|
|
// below it as with a conventional implementation.
|
|
#ifdef _WIN32
|
|
# include "win/wdbg.h"
|
|
#else
|
|
# include "unix/udbg.h"
|
|
#endif
|
|
|
|
|
|
//
|
|
// logging
|
|
//
|
|
|
|
// output to the debugger (may take ~1 ms!)
|
|
extern void debug_out(const char* fmt, ...);
|
|
|
|
// log to memory buffer (fast)
|
|
#define MICROLOG debug_microlog
|
|
extern void debug_microlog(const wchar_t* fmt, ...);
|
|
|
|
|
|
|
|
const size_t DBG_SYMBOL_LEN = 1000;
|
|
const size_t DBG_FILE_LEN = 100;
|
|
|
|
extern void* debug_get_nth_caller(uint n);
|
|
|
|
extern int debug_resolve_symbol(void* ptr_of_interest, char* sym_name, char* file, int* line);
|
|
|
|
|
|
|
|
//
|
|
// crash notification
|
|
//
|
|
|
|
// notify the user that an assertion failed.
|
|
// displays a stack trace with local variables on Windows.
|
|
// return values: 0 = continue; 1 = suppress; 2 = break
|
|
// .. or exits the program if the user so chooses.
|
|
extern int debug_assert_failed(const char* source_file, int line, const char* assert_expr);
|
|
|
|
extern int debug_write_crashlog(const char* file, const wchar_t* header, void* context);
|
|
|
|
|
|
extern void debug_check_heap(void);
|
|
|
|
|
|
|
|
// superassert
|
|
// recommended use: assert2(expr && "descriptive string")
|
|
#define assert2(expr) STMT(\
|
|
static int suppress__ = 0;\
|
|
if(!suppress__ && !(expr))\
|
|
switch(debug_assert_failed(__FILE__, __LINE__, #expr))\
|
|
{\
|
|
case 1:\
|
|
suppress__ = 1;\
|
|
break;\
|
|
case 2:\
|
|
debug_break();\
|
|
break;\
|
|
}\
|
|
)
|
|
|
|
|
|
|
|
|
|
#ifdef _WIN32
|
|
# define debug_warn(str) assert2(0 && (str))
|
|
#else
|
|
# define debug_warn(str) debug_out("Debug Warning Fired at %s:%d: %s\n", __FILE__, __LINE__, str)
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#endif // #ifndef DEBUG_H__
|