summaryrefslogtreecommitdiff
path: root/client/debug.h
diff options
context:
space:
mode:
Diffstat (limited to 'client/debug.h')
-rw-r--r--client/debug.h101
1 files changed, 101 insertions, 0 deletions
diff --git a/client/debug.h b/client/debug.h
new file mode 100644
index 00000000..cf84296c
--- /dev/null
+++ b/client/debug.h
@@ -0,0 +1,101 @@
+/*
+ Copyright (C) 2009 Red Hat, Inc.
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of
+ the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _H_DEBUG
+#define _H_DEBUG
+
+#include <stdlib.h>
+#include <sstream>
+
+#include <log4cpp/Category.hh>
+#include <log4cpp/convenience.h>
+
+#ifdef WIN32
+#define snprintf _snprintf
+#endif
+
+#define ON_PANIC() ::abort()
+
+#ifdef RED_DEBUG
+
+#ifdef WIN32
+#define ASSERTBREAK DebugBreak()
+#else
+#define ASSERTBREAK ::abort()
+#endif
+
+#define ASSERT(x) if (!(x)) { \
+ printf("%s: ASSERT %s failed\n", __FUNCTION__, #x); \
+ ASSERTBREAK; \
+}
+
+#else
+
+#define ASSERT(cond)
+
+#endif
+
+#ifdef __GNUC__
+static inline std::string pretty_func_to_func_name(const std::string& f_name)
+{
+ std::string name(f_name);
+ std::string::size_type end_pos = f_name.find('(');
+ if (end_pos == std::string::npos) {
+ return f_name;
+ }
+ std::string::size_type start = f_name.rfind(' ', end_pos);
+ if (start == std::string::npos) {
+ return f_name;
+ }
+ end_pos -= ++start;
+ return name.substr(start, end_pos);
+}
+
+#define FUNC_NAME pretty_func_to_func_name(__PRETTY_FUNCTION__).c_str()
+#else
+#define FUNC_NAME __FUNCTION__
+#endif
+
+#define LOGGER_SECTION(section) LOG4CPP_LOGGER(section)
+
+LOG4CPP_LOGGER("spice")
+
+#define LOG(type, format, ...) { \
+ std::string log_message; \
+ string_printf(log_message, "%s: " format, FUNC_NAME, ## __VA_ARGS__); \
+ LOG4CPP_##type(logger, log_message.c_str()); \
+}
+
+#define LOG_INFO(format, ...) LOG(INFO, format, ## __VA_ARGS__)
+#define LOG_WARN(format, ...) LOG(WARN, format, ## __VA_ARGS__)
+#define LOG_ERROR(format, ...) LOG(ERROR, format, ## __VA_ARGS__)
+
+#define PANIC(format, ...) { \
+ LOG(FATAL, format, ## __VA_ARGS__); \
+ ON_PANIC(); \
+}
+
+#define DBGLEVEL 1000
+
+#define DBG(level, format, ...) { \
+ if (level <= DBGLEVEL) { \
+ LOG(DEBUG, format, ## __VA_ARGS__); \
+ } \
+}
+
+#endif // _H_DEBUG
+