194 lines
3.9 KiB
C
194 lines
3.9 KiB
C
![]() |
/**
|
||
|
* @file re_dbg.h Interface to debugging module
|
||
|
*
|
||
|
* Copyright (C) 2010 Creytiv.com
|
||
|
*/
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
/** Debug levels */
|
||
|
enum {
|
||
|
DBG_EMERG = 0, /**< System is unusable */
|
||
|
DBG_ALERT = 1, /**< Action must be taken immediately */
|
||
|
DBG_CRIT = 2, /**< Critical conditions */
|
||
|
DBG_ERR = 3, /**< Error conditions */
|
||
|
DBG_WARNING = 4, /**< Warning conditions */
|
||
|
DBG_NOTICE = 5, /**< Normal but significant condition */
|
||
|
DBG_INFO = 6, /**< Informational */
|
||
|
DBG_DEBUG = 7 /**< Debug-level messages */
|
||
|
};
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @def DEBUG_MODULE
|
||
|
*
|
||
|
* Module name defined by application
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @def DEBUG_LEVEL
|
||
|
*
|
||
|
* Debug level defined by application
|
||
|
*/
|
||
|
|
||
|
#ifndef DEBUG_MODULE
|
||
|
# warning "DEBUG_MODULE is not defined"
|
||
|
#define DEBUG_MODULE "?"
|
||
|
#endif
|
||
|
|
||
|
#ifndef DEBUG_LEVEL
|
||
|
# warning "DEBUG_LEVEL is not defined"
|
||
|
#define DEBUG_LEVEL 7
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @def DEBUG_WARNING(...)
|
||
|
*
|
||
|
* Print warning message
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @def DEBUG_NOTICE(...)
|
||
|
*
|
||
|
* Print notice message
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @def DEBUG_INFO(...)
|
||
|
*
|
||
|
* Print info message
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* @def DEBUG_PRINTF(...)
|
||
|
*
|
||
|
* Print debug message
|
||
|
*/
|
||
|
|
||
|
|
||
|
/* Check for ISO C99 variable argument macros */
|
||
|
#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \
|
||
|
|| (__GNUC__ >= 3)
|
||
|
|
||
|
#if (DEBUG_LEVEL >= 4)
|
||
|
#define DEBUG_WARNING(...) \
|
||
|
dbg_printf(DBG_WARNING, DEBUG_MODULE ": " __VA_ARGS__)
|
||
|
#else
|
||
|
#define DEBUG_WARNING(...)
|
||
|
#endif
|
||
|
|
||
|
#if (DEBUG_LEVEL >= 5)
|
||
|
#define DEBUG_NOTICE(...) \
|
||
|
dbg_printf(DBG_NOTICE, DEBUG_MODULE ": " __VA_ARGS__)
|
||
|
#else
|
||
|
#define DEBUG_NOTICE(...)
|
||
|
#endif
|
||
|
|
||
|
#if (DEBUG_LEVEL >= 6)
|
||
|
#define DEBUG_INFO(...) \
|
||
|
dbg_printf(DBG_INFO, DEBUG_MODULE ": " __VA_ARGS__)
|
||
|
#else
|
||
|
#define DEBUG_INFO(...)
|
||
|
#endif
|
||
|
|
||
|
#if (DEBUG_LEVEL >= 7)
|
||
|
#define DEBUG_PRINTF(...) \
|
||
|
dbg_printf(DBG_DEBUG, DEBUG_MODULE ": " __VA_ARGS__)
|
||
|
#else
|
||
|
#define DEBUG_PRINTF(...)
|
||
|
#endif
|
||
|
|
||
|
/* GNU extensions for variable argument macros */
|
||
|
#elif defined(__GNUC__)
|
||
|
|
||
|
#if (DEBUG_LEVEL >= 4)
|
||
|
#define DEBUG_WARNING(a...) dbg_printf(DBG_WARNING, DEBUG_MODULE ": " a)
|
||
|
#else
|
||
|
#define DEBUG_WARNING(a...)
|
||
|
#endif
|
||
|
|
||
|
#if (DEBUG_LEVEL >= 5)
|
||
|
#define DEBUG_NOTICE(a...) dbg_printf(DBG_NOTICE, DEBUG_MODULE ": " a)
|
||
|
#else
|
||
|
#define DEBUG_NOTICE(a...)
|
||
|
#endif
|
||
|
|
||
|
#if (DEBUG_LEVEL >= 6)
|
||
|
#define DEBUG_INFO(a...) dbg_printf(DBG_INFO, DEBUG_MODULE ": " a)
|
||
|
#else
|
||
|
#define DEBUG_INFO(a...)
|
||
|
#endif
|
||
|
|
||
|
#if (DEBUG_LEVEL >= 7)
|
||
|
#define DEBUG_PRINTF(a...) dbg_printf(DBG_DEBUG, DEBUG_MODULE ": " a)
|
||
|
#else
|
||
|
#define DEBUG_PRINTF(a...)
|
||
|
#endif
|
||
|
|
||
|
/* No variable argument macros */
|
||
|
#else
|
||
|
|
||
|
#if (DEBUG_LEVEL >= 4)
|
||
|
#define DEBUG_WARNING dbg_warning
|
||
|
#else
|
||
|
#define DEBUG_WARNING dbg_noprintf
|
||
|
#endif
|
||
|
|
||
|
#if (DEBUG_LEVEL >= 5)
|
||
|
#define DEBUG_NOTICE dbg_notice
|
||
|
#else
|
||
|
#define DEBUG_NOTICE dbg_noprintf
|
||
|
#endif
|
||
|
|
||
|
#if (DEBUG_LEVEL >= 6)
|
||
|
#define DEBUG_INFO dbg_info
|
||
|
#else
|
||
|
#define DEBUG_INFO dbg_noprintf
|
||
|
#endif
|
||
|
|
||
|
#if (DEBUG_LEVEL >= 7)
|
||
|
#define DEBUG_PRINTF dbg_noprintf
|
||
|
#else
|
||
|
#define DEBUG_PRINTF dbg_noprintf
|
||
|
#endif
|
||
|
|
||
|
#endif
|
||
|
|
||
|
|
||
|
/** Debug flags */
|
||
|
enum dbg_flags {
|
||
|
DBG_NONE = 0, /**< No debug flags */
|
||
|
DBG_TIME = 1<<0, /**< Print timestamp flag */
|
||
|
DBG_ANSI = 1<<1, /**< Print ANSI color codes */
|
||
|
DBG_ALL = DBG_TIME|DBG_ANSI /**< All flags enabled */
|
||
|
};
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Defines the debug print handler
|
||
|
*
|
||
|
* @param level Debug level
|
||
|
* @param p Debug string
|
||
|
* @param len String length
|
||
|
* @param arg Handler argument
|
||
|
*/
|
||
|
typedef void (dbg_print_h)(int level, const char *p, size_t len, void *arg);
|
||
|
|
||
|
void dbg_init(int level, enum dbg_flags flags);
|
||
|
void dbg_close(void);
|
||
|
int dbg_logfile_set(const char *name);
|
||
|
void dbg_handler_set(dbg_print_h *ph, void *arg);
|
||
|
void dbg_printf(int level, const char *fmt, ...);
|
||
|
void dbg_noprintf(const char *fmt, ...);
|
||
|
void dbg_warning(const char *fmt, ...);
|
||
|
void dbg_notice(const char *fmt, ...);
|
||
|
void dbg_info(const char *fmt, ...);
|
||
|
const char *dbg_level_str(int level);
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|