gwenhywfar 5.12.0
debug.h
Go to the documentation of this file.
1/***************************************************************************
2 $RCSfile$
3 -------------------
4 cvs : $Id$
5 begin : Thu Nov 28 2002
6 copyright : (C) 2002 by Martin Preuss
7 email : martin@libchipcard.de
8
9 ***************************************************************************
10 * *
11 * This library is free software; you can redistribute it and/or *
12 * modify it under the terms of the GNU Lesser General Public *
13 * License as published by the Free Software Foundation; either *
14 * version 2.1 of the License, or (at your option) any later version. *
15 * *
16 * This library is distributed in the hope that it will be useful, *
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
19 * Lesser General Public License for more details. *
20 * *
21 * You should have received a copy of the GNU Lesser General Public *
22 * License along with this library; if not, write to the Free Software *
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, *
24 * MA 02111-1307 USA *
25 * *
26 ***************************************************************************/
27
28
29#ifndef GWEN_DEBUG_H
30#define GWEN_DEBUG_H
31
32#include <stdio.h>
34#include <gwenhywfar/logger.h>
35#include <gwenhywfar/error.h>
36#include <gwenhywfar/types.h>
37
38#ifdef __cplusplus
39extern "C" {
40#endif
41
42#if (defined HAVE_FUNC && (DEBUGMODE>10))
43# define DBG_ENTER fprintf(stderr,"Enter \""__func__"\" \n")
44# define DBG_LEAVE fprintf(stderr,"Leave \""__func__"\" \n")
45#else
46# define DBG_ENTER
47# define DBG_LEAVE
48#endif
49
50#define GWEN_MEMORY_DEBUG_MODE_ALL 0
51#define GWEN_MEMORY_DEBUG_MODE_OPEN 1
52#define GWEN_MEMORY_DEBUG_MODE_DETAILED 2
53#define GWEN_MEMORY_DEBUG_MODE_SHORT 3
54
56
58void GWEN_MemoryDebug_Increment(const char *name,
59 const char *wFile,
60 int wLine,
61 int attach);
63void GWEN_MemoryDebug_Decrement(const char *name,
64 const char *wFile,
65 int wLine);
66
68void GWEN_MemoryDebug_Dump(uint32_t mode);
69
71void GWEN_MemoryDebug_DumpObject(const char *name,
72 uint32_t mode);
73
75long int GWEN_MemoryDebug_GetObjectCount(const char *name);
76
79
80
81#ifdef GWEN_MEMORY_DEBUG
82# define DBG_MEM_INC(o, attach)\
83 GWEN_MemoryDebug_Increment(o, __FILE__, __LINE__, attach)
84# define DBG_MEM_DEC(o)\
85 GWEN_MemoryDebug_Decrement(o, __FILE__, __LINE__)
86#else
87# define DBG_MEM_INC(o, attach)
88# define DBG_MEM_DEC(o)
89#endif
90
92uint32_t GWEN_Debug_Snprintf(char *buffer,
93 uint32_t size,
94 const char *fmt, ...);
95
96#ifndef NO_VARIADIC_MACROS
97# define DBG_ERROR(dbg_logger, format, ...) {\
98 if (GWEN_Logger_GetLevel(dbg_logger)>=GWEN_LoggerLevel_Error) {\
99 char dbg_buffer[300]; \
100 \
101 if (snprintf(dbg_buffer, sizeof(dbg_buffer)-1,\
102 __FILE__":%5d: " format , __LINE__ , ## __VA_ARGS__)>0) { \
103 dbg_buffer[sizeof(dbg_buffer)-1]=(char)0; \
104 GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Error, dbg_buffer);\
105 }\
106 }\
107 };
108#else /* #ifndef NO_VARIADIC_MACROS */
110void DBG_ERROR(const char *logdomain, const char *format, ...);
111#endif /* #ifndef NO_VARIADIC_MACROS */
112
113#define DBG_ERROR_ERR(dbg_logger, dbg_err) {\
114 char dbg_buffer[300]; \
115 char dbg_errbuff[256]; \
116 \
117 GWEN_Error_ToString(dbg_err,dbg_errbuff, sizeof(dbg_errbuff)); \
118 if (snprintf(dbg_buffer, sizeof(dbg_buffer)-1,\
119 __FILE__":%5d: %s" , __LINE__ , dbg_errbuff)>0) { \
120 dbg_buffer[sizeof(dbg_buffer)-1]=0; \
121 GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Error, dbg_buffer);}; \
122 };
123
124#ifndef NO_VARIADIC_MACROS
125# define DBG_WARN(dbg_logger, format, ...) {\
126 if (GWEN_Logger_GetLevel(dbg_logger)>=GWEN_LoggerLevel_Warning) {\
127 char dbg_buffer[300]; \
128 \
129 if (snprintf(dbg_buffer, sizeof(dbg_buffer)-1,\
130 __FILE__":%5d: " format , __LINE__ , ## __VA_ARGS__)>0) { \
131 dbg_buffer[sizeof(dbg_buffer)-1]=(char)0; \
132 GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Warning, dbg_buffer);\
133 }\
134 }\
135 };
136#else /* #ifndef NO_VARIADIC_MACROS */
138void DBG_WARN(const char *logdomain, const char *format, ...);
139#endif /* #ifndef NO_VARIADIC_MACROS */
140
141#define DBG_WARN_ERR(dbg_logger, dbg_err) {\
142 char dbg_buffer[300]; \
143 char dbg_errbuff[256]; \
144 GWEN_Error_ToString(dbg_err,dbg_errbuff, sizeof(dbg_errbuff)); \
145 if (snprintf(dbg_buffer, sizeof(dbg_buffer)-1,\
146 __FILE__":%5d: %s" , __LINE__ , dbg_errbuff)>0) { \
147 dbg_buffer[sizeof(dbg_buffer)-1]=0; \
148 GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Warning, dbg_buffer);}; \
149 };
150
151#ifndef NO_VARIADIC_MACROS
152# define DBG_NOTICE(dbg_logger, format, ...) \
153 if (GWEN_Logger_GetLevel(dbg_logger)>=GWEN_LoggerLevel_Notice) {\
154 char dbg_buffer[300]; \
155 \
156 if (snprintf(dbg_buffer, sizeof(dbg_buffer)-1,\
157 __FILE__":%5d: " format , __LINE__ , ## __VA_ARGS__)>0) { \
158 dbg_buffer[sizeof(dbg_buffer)-1]=(char)0; \
159 GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Notice, dbg_buffer);\
160 }\
161 };
162#else /* #ifndef NO_VARIADIC_MACROS */
164void DBG_NOTICE(const char *logdomain, const char *format, ...);
165#endif /* #ifndef NO_VARIADIC_MACROS */
166
167#define DBG_NOTICE_ERR(dbg_logger, dbg_err) \
168 if (GWEN_Logger_GetLevel(dbg_logger)>=GWEN_LoggerLevel_Notice) {\
169 char dbg_buffer[300]; \
170 char dbg_errbuff[256]; \
171 \
172 GWEN_Error_ToString(dbg_err,dbg_errbuff, sizeof(dbg_errbuff)); \
173 if (snprintf(dbg_buffer, sizeof(dbg_buffer)-1, __FILE__":%5d: %s" , __LINE__ , dbg_errbuff)>0) {\
174 dbg_buffer[sizeof(dbg_buffer)-1]=0; \
175 GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Notice, dbg_buffer);\
176 } \
177 };
178
179
180#ifndef NO_VARIADIC_MACROS
181# define DBG_INFO(dbg_logger, format, ...) \
182 if (GWEN_Logger_GetLevel(dbg_logger)>=GWEN_LoggerLevel_Info) {\
183 char dbg_buffer[300]; \
184 \
185 if (snprintf(dbg_buffer, sizeof(dbg_buffer)-1,\
186 __FILE__":%5d: " format , __LINE__ , ## __VA_ARGS__)>0) { \
187 dbg_buffer[sizeof(dbg_buffer)-1]=(char)0; \
188 GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Info, dbg_buffer);\
189 }\
190 };
191#else /* #ifndef NO_VARIADIC_MACROS */
193void DBG_INFO(const char *logdomain, const char *format, ...);
194#endif /* #ifndef NO_VARIADIC_MACROS */
195
196#define DBG_INFO_ERR(dbg_logger, dbg_err) \
197 if (GWEN_Logger_GetLevel(dbg_logger)>=GWEN_LoggerLevel_Info) {\
198 char dbg_buffer[300]; \
199 char dbg_errbuff[256]; \
200 \
201 GWEN_Error_ToString(dbg_err,dbg_errbuff, sizeof(dbg_errbuff)); \
202 if (snprintf(dbg_buffer, sizeof(dbg_buffer)-1, __FILE__":%5d: %s" , __LINE__ , dbg_errbuff)>0) { \
203 dbg_buffer[sizeof(dbg_buffer)-1]=0; \
204 GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Info, dbg_buffer);\
205 }\
206 };
207
208
209
210
211#ifndef DISABLE_DEBUGLOG
212
213# ifndef NO_VARIADIC_MACROS
214# define DBG_DEBUG(dbg_logger, format, ...) \
215 if (GWEN_Logger_GetLevel(dbg_logger)>=GWEN_LoggerLevel_Debug) {\
216 char dbg_buffer[300]; \
217 \
218 if (snprintf(dbg_buffer, sizeof(dbg_buffer)-1, __FILE__":%5d: " format , __LINE__ , ## __VA_ARGS__)>0) { \
219 dbg_buffer[sizeof(dbg_buffer)-1]=0; \
220 GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Debug, dbg_buffer);\
221 }\
222 };
223
224# define DBG_VERBOUS(dbg_logger, format, ...) \
225 if (GWEN_Logger_GetLevel(dbg_logger)>=GWEN_LoggerLevel_Verbous) {\
226 char dbg_buffer[300]; \
227 \
228 if (snprintf(dbg_buffer, sizeof(dbg_buffer)-1, __FILE__":%5d: " format , __LINE__ , ## __VA_ARGS__)>0) { \
229 dbg_buffer[sizeof(dbg_buffer)-1]=0; \
230 GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Verbous, dbg_buffer);\
231 }\
232 };
233# endif /* #ifndef NO_VARIADIC_MACROS */
234
235# define DBG_DEBUG_ERR(dbg_logger, dbg_err) \
236 if (GWEN_Logger_GetLevel(dbg_logger)>=GWEN_LoggerLevel_Debug) {\
237 char dbg_buffer[300]; \
238 char dbg_errbuff[256]; \
239 \
240 GWEN_Error_ToString(dbg_err,dbg_errbuff, sizeof(dbg_errbuff)); \
241 if (snprintf(dbg_buffer, sizeof(dbg_buffer)-1, __FILE__":%5d: %s" , __LINE__ , dbg_errbuff)>0) { \
242 dbg_buffer[sizeof(dbg_buffer)-1]=0; \
243 GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Debug, dbg_buffer);\
244 }\
245 };
246
247# define DBG_VERBOUS_ERR(dbg_logger, dbg_err) \
248 if (GWEN_Logger_GetLevel(dbg_logger)>=GWEN_LoggerLevel_Verbous) {\
249 char dbg_buffer[300]; \
250 char dbg_errbuff[256]; \
251 \
252 GWEN_Error_ToString(dbg_err,dbg_errbuff, sizeof(dbg_errbuff)); \
253 if (snprintf(dbg_buffer, sizeof(dbg_buffer)-1, __FILE__":%5d: %s" , __LINE__ , dbg_errbuff)>0) {\
254 dbg_buffer[sizeof(dbg_buffer)-1]=0; \
255 GWEN_Logger_Log(dbg_logger, GWEN_LoggerLevel_Verbous, dbg_buffer);\
256 }\
257 };
258
259
260
261#else
262
263# ifndef NO_VARIADIC_MACROS
264# define DBG_DEBUG(dbg_logger, format, ...)
265# define DBG_VERBOUS(dbg_logger, format, ...)
266# endif /* ifndef NO_VARIADIC_MACROS */
267
268# define DBG_DEBUG_ERR(dbg_logger, dbg_err)
269# define DBG_VERBOUS_ERR(dbg_logger, dbg_err)
270
271#endif /* DISABLE_DEBUGLOG */
272
273#ifdef NO_VARIADIC_MACROS
275void DBG_DEBUG(const char *logdomain, const char *format, ...);
277void DBG_VERBOUS(const char *logdomain, const char *format, ...);
278#endif /* #ifdef NO_VARIADIC_MACROS */
279
280
281#ifdef __cplusplus
282}
283#endif
284
285
286#endif
287
288
GWENHYWFAR_API const char * fmt
Definition buffer.h:283
struct GWEN_MEMORY_DEBUG_OBJECT GWEN_MEMORY_DEBUG_OBJECT
Definition debug.h:55
GWENHYWFAR_API uint32_t GWEN_Debug_Snprintf(char *buffer, uint32_t size, const char *fmt,...)
GWENHYWFAR_API void GWEN_MemoryDebug_DumpObject(const char *name, uint32_t mode)
#define DBG_VERBOUS(dbg_logger, format,...)
Definition debug.h:224
#define DBG_INFO(dbg_logger, format,...)
Definition debug.h:181
GWENHYWFAR_API void GWEN_MemoryDebug_CleanUp(void)
#define DBG_NOTICE(dbg_logger, format,...)
Definition debug.h:152
GWENHYWFAR_API void GWEN_MemoryDebug_Decrement(const char *name, const char *wFile, int wLine)
#define DBG_ERROR(dbg_logger, format,...)
Definition debug.h:97
GWENHYWFAR_API void GWEN_MemoryDebug_Dump(uint32_t mode)
GWENHYWFAR_API long int GWEN_MemoryDebug_GetObjectCount(const char *name)
#define DBG_WARN(dbg_logger, format,...)
Definition debug.h:125
#define DBG_DEBUG(dbg_logger, format,...)
Definition debug.h:214
GWENHYWFAR_API void GWEN_MemoryDebug_Increment(const char *name, const char *wFile, int wLine, int attach)
#define GWENHYWFAR_API