RE/flex debug logs. More...
Macros | |
#define | DBGLOG(...) (void)0 |
When compiled with -DDEBUG, adds a timestamped log entry with a printf-formatted message. More... | |
#define | DBGLOGN(...) (void)0 |
When compiled with -DDEBUG, adds a log entry with a printf-formatted message. More... | |
#define | DBGLOGA(...) (void)0 |
When compiled with -DDEBUG, appends a printf-formatted message to the last log entry. More... | |
RE/flex debug logs.
Exploiting macro magic to simplify debug logging.
DBGLOG(format, ...)
creates a timestamped log entry with a printf-formatted message. The log entry is added to a log file or sent to stderr
as specified:
Source files compiled with | DBGLOG(...) entry added to |
---|---|
c++ -DDEBUG | DEBUG.log |
c++ -DDEBUG=TEST | TEST.log |
c++ -DDEBUG= | stderr |
DBGLOGN(format, ...)
creates a log entry without a timestamp.
DBGLOGA(format, ...)
appends the formatted string to the previous log entry.
The utility macro DBGSTR(const char *s)
returns string s
or "(null)"
when s == NULL
.
Compiled with -DDEBUG
this example logs the following messages in DEBUG.log
:
The first column records the date (140201 is February 1, 2014) and the time (225654 is 10:56PM + 54 seconds) with microsecond fraction. The second column records the source code file name and the line number of the DBGLOG
command. The third column shows the printf-formatted message.
The DEBUG.log
file is created in the current directory when it does not already exist.
Techniques used:
__VA_ARGS__
.__FILE__
and __LINE__
.DEBUG
as a string in a macro body.#if DEBUG + 0
to test whether macro DEBUG
is set to a value, since DEBUG
is 1 when set without a value (for example at the command line)."" __VA_ARGS__
forces __VA_ARGS__
to start with a literal format string (printf security advisory). #define DBGLOG | ( | ... | ) | (void)0 |
When compiled with -DDEBUG, adds a timestamped log entry with a printf-formatted message.
#define DBGLOGA | ( | ... | ) | (void)0 |
When compiled with -DDEBUG, appends a printf-formatted message to the last log entry.
#define DBGLOGN | ( | ... | ) | (void)0 |
When compiled with -DDEBUG, adds a log entry with a printf-formatted message.