00001 #ifndef __DEBUG_H__ 00002 #define __DEBUG_H__ 00003 00004 #include <stdio.h> 00005 00006 #ifndef DEBUG_LEVEL 00007 #define DEBUG_LEVEL 0 00008 #endif 00009 00010 #ifdef __GNUC__ 00011 #define PRETTY_FUNCTION __PRETTY_FUNCTION__ 00012 #else 00013 #ifdef __STDC__ 00014 #define PRETTY_FUNCTION __func__ 00015 #else 00016 #define PRETTY_FUNCTION "" 00017 #endif 00018 #endif 00019 00020 #define DEBUG_ERROR(...) \ 00021 do { fprintf(stderr, "%s(%s:%i) ", PRETTY_FUNCTION, __FILE__, __LINE__); \ 00022 fprintf(stderr, __VA_ARGS__); fputc(' ', stderr); perror(""); \ 00023 fflush(stderr); } while(0) 00024 00025 #if(DEBUG_LEVEL >= 1) 00026 #define DEBUG1(...) \ 00027 do { fprintf(stderr, "%s(%s:%i) ", PRETTY_FUNCTION, __FILE__, __LINE__); \ 00028 fprintf(stderr, __VA_ARGS__); fputc('\n', stderr); fflush(stderr); } while(0) 00029 #else 00030 #define DEBUG1(...) do { } while(0) 00031 #endif 00032 00033 #if(DEBUG_LEVEL >= 2) 00034 #define DEBUG2(...) \ 00035 do { fprintf(stderr, "%s(%s:%i) ", PRETTY_FUNCTION, __FILE__, __LINE__); \ 00036 fprintf(stderr, __VA_ARGS__); fputc('\n', stderr); fflush(stderr); } while(0) 00037 #else 00038 #define DEBUG2(...) do { } while(0) 00039 #endif 00040 00041 #if(DEBUG_LEVEL >= 3) 00042 #define DEBUG3(...) \ 00043 do { fprintf(stderr, "%s(%s:%i) ", PRETTY_FUNCTION, __FILE__, __LINE__); \ 00044 fprintf(stderr, __VA_ARGS__); fputc('\n', stderr); fflush(stderr); } while(0) 00045 #else 00046 #define DEBUG3(...) do { } while(0) 00047 #endif 00048 00049 #if(DEBUG_LEVEL > 0) 00050 #define ASSERT(test) \ 00051 do { \ 00052 if(!(test)) \ 00053 fprintf(stderr, "%s(%s:%i) Assertion failed: %s\n", \ 00054 PRETTY_FUNCTION, __FILE__, __LINE__, #test); \ 00055 } while(0) 00056 #define ASSERT_EQUAL(left, right) \ 00057 do { \ 00058 if((left) != (right)) \ 00059 fprintf(stderr, "%s(%s:%i) Assertion failed: %s != %s\n", \ 00060 PRETTY_FUNCTION, __FILE__, __LINE__, #left, #right); \ 00061 } while(0) 00062 #define ASSERT_NEQUAL(left, right) \ 00063 do { \ 00064 if((left) == (right)) \ 00065 fprintf(stderr, "%s(%s:%i) Assertion failed: %s == %s\n", \ 00066 PRETTY_FUNCTION, __FILE__, __LINE__, #left, #right); \ 00067 } while(0) 00068 #else 00069 #define ASSERT(test) do { } while(0) 00070 #define ASSERT_EQUAL(left, right) do { } while(0) 00071 #define ASSERT_NEQUAL(left, right) do { } while(0) 00072 #endif 00073 00074 #endif