1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
#ifndef RELABSD_ERROR_H
#define RELABSD_ERROR_H
#include <stdio.h>
#include "config.h"
#include "pervasive.h"
#ifndef RELABSD_DEBUG_PROGRAM_FLOW
#define RELABSD_DEBUG_PROGRAM_FLOW 0
#endif
#ifndef RELABSD_DEBUG_CONFIG
#define RELABSD_DEBUG_CONFIG 0
#endif
#ifndef RELABSD_DEBUG_REAL_EVENTS
#define RELABSD_DEBUG_REAL_EVENTS 0
#endif
#ifndef RELABSD_DEBUG_VIRTUAL_EVENTS
#define RELABSD_DEBUG_VIRTUAL_EVENTS 0
#endif
#define RELABSD_ENABLE_WARNINGS_OUTPUT 1
#define RELABSD_ENABLE_RUNTIME_ERRORS_OUTPUT 1
#define RELABSD_ENABLE_PROGRAMMING_ERRORS_OUTPUT 1
#define RELABSD_ENABLE_FATAL_ERROR_OUTPUT 1
#ifdef RELABSD_ENABLE_ERROR_LOCATION
#define RELABSD_LOCATION "[" __FILE__ "][" RELABSD_TO_STRING(__LINE__) "]"
#else
#define RELABSD_LOCATION ""
#endif
#define RELABSD_PRINT_STDERR(symbol, str, ...)\
fprintf(stderr, "[" symbol "]" RELABSD_LOCATION " " str "\n", __VA_ARGS__);
/*
* Given that we use preprocessor contants as flags, we can expect the compilers
* to remove the test condition for disabled flags. No need to be shy about
* allowing many debug options.
*/
#define RELABSD_DEBUG(flag, str, ...)\
RELABSD_ISOLATE\
(\
if (flag)\
{\
RELABSD_PRINT_STDERR("D", str, __VA_ARGS__);\
}\
)
#define RELABSD_WARNING(str, ...)\
RELABSD_ISOLATE\
(\
if (RELABSD_ENABLE_WARNINGS_OUTPUT)\
{\
RELABSD_PRINT_STDERR("W", str, __VA_ARGS__);\
}\
)
#define RELABSD_ERROR(str, ...)\
RELABSD_ISOLATE\
(\
if (RELABSD_ENABLE_RUNTIME_ERRORS_OUTPUT)\
{\
RELABSD_PRINT_STDERR("E", str, __VA_ARGS__);\
}\
)
#define RELABSD_PROG_ERROR(str, ...)\
RELABSD_ISOLATE\
(\
if (RELABSD_ENABLE_PROGRAMMING_ERRORS_OUTPUT)\
{\
RELABSD_PRINT_STDERR("P", str, __VA_ARGS__);\
}\
)
#define RELABSD_FATAL(str, ...)\
RELABSD_ISOLATE\
(\
if (RELABSD_ENABLE_FATAL_ERROR_OUTPUT)\
{\
RELABSD_PRINT_STDERR("F", str, __VA_ARGS__);\
}\
)
/* For outputs without dynamic content (static). ******************************/
#define RELABSD_PRINT_S_STDERR(symbol, str)\
fprintf(stderr, "[" symbol "]" RELABSD_LOCATION " " str "\n");
#define RELABSD_S_DEBUG(flag, str)\
RELABSD_ISOLATE\
(\
if (flag)\
{\
RELABSD_PRINT_S_STDERR("D", str);\
}\
)
#define RELABSD_S_WARNING(str)\
RELABSD_ISOLATE\
(\
if (RELABSD_ENABLE_WARNINGS_OUTPUT)\
{\
RELABSD_PRINT_S_STDERR("W", str);\
}\
)
#define RELABSD_S_ERROR(str)\
RELABSD_ISOLATE\
(\
if (RELABSD_ENABLE_RUNTIME_ERRORS_OUTPUT)\
{\
RELABSD_PRINT_S_STDERR("E", str);\
}\
)
#define RELABSD_S_PROG_ERROR(str)\
RELABSD_ISOLATE\
(\
if (RELABSD_ENABLE_PROGRAMMING_ERRORS_OUTPUT)\
{\
RELABSD_PRINT_S_STDERR("P", str);\
}\
)
#define RELABSD_S_FATAL(str)\
RELABSD_ISOLATE\
(\
if (RELABSD_ENABLE_FATAL_ERROR_OUTPUT)\
{\
RELABSD_PRINT_S_STDERR("F", str);\
}\
)
#endif
|