Add debugging constructs
This commit is contained in:
parent
a27e894fc1
commit
c88ee2d6e9
2 changed files with 55 additions and 0 deletions
14
util.cpp
14
util.cpp
|
@ -1,8 +1,22 @@
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
#include "util.hpp"
|
#include "util.hpp"
|
||||||
|
|
||||||
|
int debug;
|
||||||
|
|
||||||
|
void do_debugf(int level, const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
va_start(args, format);
|
||||||
|
if(debug >= level) {
|
||||||
|
vfprintf(stderr, format, args);
|
||||||
|
fflush(stderr);
|
||||||
|
}
|
||||||
|
va_end(args);
|
||||||
|
}
|
||||||
|
|
||||||
MsgException::MsgException(const std::string& msg, int code, bool is_perror)
|
MsgException::MsgException(const std::string& msg, int code, bool is_perror)
|
||||||
: _msg(msg), _code(code)
|
: _msg(msg), _code(code)
|
||||||
{
|
{
|
||||||
|
|
41
util.hpp
41
util.hpp
|
@ -3,6 +3,47 @@
|
||||||
#include <exception>
|
#include <exception>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
/* Debugging -- taken from babeld */
|
||||||
|
|
||||||
|
extern int debug;
|
||||||
|
|
||||||
|
#if defined(__GNUC__) && (__GNUC__ >= 3)
|
||||||
|
#define ATTRIBUTE(x) __attribute__ (x)
|
||||||
|
#define LIKELY(_x) __builtin_expect(!!(_x), 1)
|
||||||
|
#define UNLIKELY(_x) __builtin_expect(!!(_x), 0)
|
||||||
|
#else
|
||||||
|
#define ATTRIBUTE(x) /**/
|
||||||
|
#define LIKELY(_x) !!(_x)
|
||||||
|
#define UNLIKELY(_x) !!(_x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
|
||||||
|
#define debugf(...) \
|
||||||
|
do { \
|
||||||
|
if(UNLIKELY(debug >= 2)) do_debugf(2, __VA_ARGS__); \
|
||||||
|
} while(0)
|
||||||
|
#define kdebugf(...) \
|
||||||
|
do { \
|
||||||
|
if(UNLIKELY(debug >= 3)) do_debugf(3, __VA_ARGS__); \
|
||||||
|
} while(0)
|
||||||
|
#elif defined __GNUC__
|
||||||
|
#define debugf(_args...) \
|
||||||
|
do { \
|
||||||
|
if(UNLIKELY(debug >= 2)) do_debugf(2, _args); \
|
||||||
|
} while(0)
|
||||||
|
#define kdebugf(_args...) \
|
||||||
|
do { \
|
||||||
|
if(UNLIKELY(debug >= 3)) do_debugf(3, _args); \
|
||||||
|
} while(0)
|
||||||
|
#else
|
||||||
|
static inline void debugf(const char *format, ...) { return; }
|
||||||
|
static inline void kdebugf(const char *format, ...) { return; }
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void do_debugf(int level, const char *format, ...);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** MsgException -- an exception bearing a passed explanation message
|
/** MsgException -- an exception bearing a passed explanation message
|
||||||
*
|
*
|
||||||
* If `is_perror` is true, then the `strerror` corresponding message is appened
|
* If `is_perror` is true, then the `strerror` corresponding message is appened
|
||||||
|
|
Loading…
Reference in a new issue