00001
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #ifndef __GNUC__
00036 # error unknown compiler (not gcc/g++), no glibc backtracing
00037 #endif
00038
00039 #ifndef _STACKTRACE_H_
00040 #define _STACKTRACE_H_
00041
00042 #ifdef __cplusplus
00043 extern "C" {
00044 #endif
00045
00046 #include <stdio.h>
00047
00048 #ifdef DEBUG
00049 # define start_log(x)
00050 # define log_info(...) fprintf(stdout, __VA_ARGS__)
00051 # define log_error(...) fprintf(stderr, __VA_ARGS__)
00052 # define stop_log()
00053 unsigned printStackTrace(const char *exception, const char *file,
00054 unsigned int line);
00055 #else
00056 #ifndef TINYOS
00057 # include <syslog.h>
00058 # define start_log(x) openlog(x, LOG_PID | LOG_CONS, LOG_DAEMON)
00059 # define log_info(...) syslog(LOG_INFO, __VA_ARGS__)
00060 # define log_error(...) syslog(LOG_ALERT, __VA_ARGS__)
00061 # define stop_log() closelog()
00062 static inline unsigned printStackTrace(const char *exception, const char *file,
00063 unsigned int line) { return 0; }
00064 #else
00065 # define log_info(...)
00066 # define log_error(...)
00067 #endif
00068 #endif
00069
00070 int enable_backtrace();
00071
00072 #ifdef __cplusplus
00073 }
00074 #endif
00075
00076 #endif // _STACKTRACE_H_