dillo  3.0.5
About: dillo is a small, fast, extensible Web browser particularly suitable for older or smaller computers and embedded systems (but only limited or no support for frames, CSS, JavaScript, Java).
  Fossies Dox: dillo-3.0.5.tar.gz  ("inofficial" and yet experimental doxygen-generated source code documentation)  

debug.hh
Go to the documentation of this file.
1 #ifndef __LOUT_DEBUG_H__
2 #define __LOUT_DEBUG_H__
3 
4 /*
5  * Simple debug messages. Add:
6  *
7  * #define DEBUG_LEVEL <n>
8  * #include "debug.h"
9  *
10  * to the file you are working on, or let DEBUG_LEVEL undefined to
11  * disable all messages. A higher level denotes a greater importance
12  * of the message.
13  */
14 
15 #include <stdio.h>
16 
17 #define D_STMT_START do
18 #define D_STMT_END while (0)
19 
20 # ifdef DEBUG_LEVEL
21 # define DEBUG_MSG(level, ...) \
22  D_STMT_START { \
23  if (DEBUG_LEVEL && (level) >= DEBUG_LEVEL) \
24  printf(__VA_ARGS__); \
25  } D_STMT_END
26 # else
27 # define DEBUG_MSG(level, ...)
28 # endif /* DEBUG_LEVEL */
29 
30 
31 
32 /*
33  * See <http://www.dillo.org/~sgeerken/rtfl/>.
34  */
35 
36 #ifdef DBG_RTFL
37 
38 #include <unistd.h>
39 #include <stdio.h>
40 
41 // "\n" at the beginning just in case that the previous line is not finished
42 // yet.
43 #define RTFL_PREFIX_FMT "\n[rtfl]%s:%d:%d:"
44 #define RTFL_PREFIX_ARGS __FILE__, __LINE__, getpid()
45 
46 #define DBG_OBJ_MSG(aspect, prio, msg) \
47  D_STMT_START { \
48  printf (RTFL_PREFIX_FMT "obj-msg:%p:%s:%d:%s\n", \
49  RTFL_PREFIX_ARGS, this, aspect, prio, msg); \
50  fflush (stdout); \
51  } D_STMT_END
52 
53 #define DBG_OBJ_MSGF(aspect, prio, fmt, ...) \
54  D_STMT_START { \
55  printf (RTFL_PREFIX_FMT "obj-msg:%p:%s:%d:" fmt "\n", \
56  RTFL_PREFIX_ARGS, this, aspect, prio, __VA_ARGS__); \
57  fflush (stdout); \
58  } D_STMT_END
59 
60 #define DBG_OBJ_MSG_START() \
61  D_STMT_START { \
62  printf (RTFL_PREFIX_FMT "obj-msg-start:%p\n", \
63  RTFL_PREFIX_ARGS, this); \
64  fflush (stdout); \
65  } D_STMT_END
66 
67 #define DBG_OBJ_MSG_END() \
68  D_STMT_START { \
69  printf (RTFL_PREFIX_FMT "obj-msg-end:%p\n", \
70  RTFL_PREFIX_ARGS, this); \
71  fflush (stdout); \
72  } D_STMT_END
73 
74 #define DBG_OBJ_CREATE(klass) \
75  D_STMT_START { \
76  printf (RTFL_PREFIX_FMT "obj-create:%p:%s\n", \
77  RTFL_PREFIX_ARGS, this, klass); \
78  fflush (stdout); \
79  } D_STMT_END
80 
81 #define DBG_OBJ_DELETE() \
82  D_STMT_START { \
83  printf (RTFL_PREFIX_FMT "obj-delete:%p\n", \
84  RTFL_PREFIX_ARGS, this); \
85  fflush (stdout); \
86  } D_STMT_END
87 
88 #define DBG_OBJ_BASECLASS(klass) \
89  D_STMT_START { \
90  printf (RTFL_PREFIX_FMT "obj-ident:%p:%p\n", \
91  RTFL_PREFIX_ARGS, this, (klass*)this); \
92  fflush (stdout); \
93  } D_STMT_END
94 
95 #define DBG_OBJ_ASSOC(parent, child) \
96  D_STMT_START { \
97  if (child) { \
98  printf (RTFL_PREFIX_FMT "obj-assoc:%p:%p\n", \
99  RTFL_PREFIX_ARGS, parent, child); \
100  fflush (stdout); \
101  } \
102  } D_STMT_END
103 
104 #define DBG_OBJ_ASSOC_PARENT(parent) \
105  D_STMT_START { \
106  printf (RTFL_PREFIX_FMT "obj-assoc:%p:%p\n", \
107  RTFL_PREFIX_ARGS, parent, this); \
108  fflush (stdout); \
109  } D_STMT_END
110 
111 #define DBG_OBJ_ASSOC_CHILD(child) \
112  D_STMT_START { \
113  if (child) { \
114  printf (RTFL_PREFIX_FMT "obj-assoc:%p:%p\n", \
115  RTFL_PREFIX_ARGS, this, child); \
116  fflush (stdout); \
117  } \
118  } D_STMT_END
119 
120 #define DBG_OBJ_SET_NUM(var, val) \
121  D_STMT_START { \
122  printf (RTFL_PREFIX_FMT "obj-set:%p:%s:%d\n", \
123  RTFL_PREFIX_ARGS, this, var, val); \
124  fflush (stdout); \
125  } D_STMT_END
126 
127 #define DBG_OBJ_SET_STR(var, val) \
128  D_STMT_START { \
129  printf (RTFL_PREFIX_FMT "obj-set:%p:%s:%s\n", \
130  RTFL_PREFIX_ARGS, this, var, val); \
131  fflush (stdout); \
132  } D_STMT_END
133 
134 #define DBG_OBJ_SET_PTR(var, val) \
135  D_STMT_START { \
136  printf (RTFL_PREFIX_FMT "obj-set:%p:%s:%p\n", \
137  RTFL_PREFIX_ARGS, this, var, val); \
138  fflush (stdout); \
139  } D_STMT_END
140 
141 #define DBG_OBJ_ARRSET_NUM(var, ind, val) \
142  D_STMT_START { \
143  printf (RTFL_PREFIX_FMT "obj-set:%p:" var ".%d:%d\n", \
144  RTFL_PREFIX_ARGS, this, ind, val); \
145  fflush (stdout); \
146  } D_STMT_END
147 
148 #define DBG_OBJ_ARRSET_STR(var, ind, val) \
149  D_STMT_START { \
150  printf (RTFL_PREFIX_FMT "obj-set:%p:" var ".%d:%s\n", \
151  RTFL_PREFIX_ARGS, this, ind, val); \
152  fflush (stdout); \
153  } D_STMT_END
154 
155 #define DBG_OBJ_ARRSET_PTR(var, ind, val) \
156  D_STMT_START { \
157  printf (RTFL_PREFIX_FMT "obj-set:%p:" var ".%d:%p\n", \
158  RTFL_PREFIX_ARGS, this, ind, val); \
159  fflush (stdout); \
160  } D_STMT_END
161 
162 #define DBG_OBJ_COLOR(color, klass) \
163  D_STMT_START { \
164  printf (RTFL_PREFIX_FMT "obj-color:%s:%s\n", \
165  RTFL_PREFIX_ARGS, color, klass); \
166  fflush (stdout); \
167  } D_STMT_END
168 
169 #else /* DBG_RTFL */
170 
171 #define DBG_OBJ_MSG(aspect, prio, msg)
172 #define DBG_OBJ_MSGF(aspect, prio, fmt, ...)
173 #define DBG_OBJ_MSG_START()
174 #define DBG_OBJ_MSG_END()
175 #define DBG_OBJ_CREATE(klass)
176 #define DBG_OBJ_DELETE()
177 #define DBG_OBJ_BASECLASS(klass)
178 #define DBG_OBJ_ASSOC_PARENT(parent)
179 #define DBG_OBJ_ASSOC_CHILD(child)
180 #define DBG_OBJ_ASSOC(parent, child)
181 #define DBG_OBJ_SET_NUM(var, val)
182 #define DBG_OBJ_SET_STR(var, val)
183 #define DBG_OBJ_SET_PTR(var, val)
184 #define DBG_OBJ_ARRSET_NUM(var, ind, val)
185 #define DBG_OBJ_ARRSET_STR(var, ind, val)
186 #define DBG_OBJ_ARRSET_PTR(var, ind, val)
187 #define DBG_OBJ_COLOR(klass, color)
188 
189 #endif /* DBG_RTFL */
190 
191 #endif /* __LOUT_DEBUG_H__ */
192 
193