xref: /Universal-ctags/main/trace.h (revision fb6a19e76ca9b7363e7ea7ee19d4013a802ed044)
1d33423e3SSzymon Tomasz Stefanek #ifndef ctags_trace_h_
2d33423e3SSzymon Tomasz Stefanek #define ctags_trace_h_
3d33423e3SSzymon Tomasz Stefanek /*
4d33423e3SSzymon Tomasz Stefanek *   Copyright (c) 2016, Szymon Tomasz Stefanek
5d33423e3SSzymon Tomasz Stefanek *
6d33423e3SSzymon Tomasz Stefanek *   This source code is released for free distribution under the terms of the
7d33423e3SSzymon Tomasz Stefanek *   GNU General Public License version 2 or (at your option) any later version.
8d33423e3SSzymon Tomasz Stefanek *
9d33423e3SSzymon Tomasz Stefanek *   Tracing facility.
10d33423e3SSzymon Tomasz Stefanek */
11d33423e3SSzymon Tomasz Stefanek 
12d33423e3SSzymon Tomasz Stefanek #include "general.h"
13d33423e3SSzymon Tomasz Stefanek #include "debug.h"
14d33423e3SSzymon Tomasz Stefanek 
15d33423e3SSzymon Tomasz Stefanek //
16d33423e3SSzymon Tomasz Stefanek // Master tracing switch.
17d33423e3SSzymon Tomasz Stefanek //
18d33423e3SSzymon Tomasz Stefanek // Uncomment this to enable extensive debugging to stderr in code.
19d33423e3SSzymon Tomasz Stefanek // Use only for development as tracing reduces performance.
20d33423e3SSzymon Tomasz Stefanek //
21f9921800SMasatake YAMATO // "./configure --enable-debugging" defines DEBUG.
22782707aeSMasatake YAMATO // When running ctags, pass --_trace=<LANG>[,<LANG>]* option.
23f9921800SMasatake YAMATO //
24f9921800SMasatake YAMATO #ifdef DEBUG
25782707aeSMasatake YAMATO #define DO_TRACING
26f9921800SMasatake YAMATO #endif
27d33423e3SSzymon Tomasz Stefanek 
28a219c98cSMasatake YAMATO bool isTraced (void);
29a219c98cSMasatake YAMATO void traceLanguage (langType language);
30a219c98cSMasatake YAMATO bool isLanguageTraced (langType language);
31a219c98cSMasatake YAMATO 
32d33423e3SSzymon Tomasz Stefanek void traceEnter(const char * szFunction,const char * szFormat,...);
33d33423e3SSzymon Tomasz Stefanek void traceLeave(const char * szFunction,const char * szFormat,...);
34d33423e3SSzymon Tomasz Stefanek void tracePrint(const char * szFunction,const char * szFormat,...);
35d33423e3SSzymon Tomasz Stefanek 
3649c14f67SMasatake YAMATO void tracePrintPrefix(const char * szFunction);
3749c14f67SMasatake YAMATO void tracePrintFmt(const char * szFormat,...);
3849c14f67SMasatake YAMATO void tracePrintNewline(void);
3949c14f67SMasatake YAMATO 
40*fb6a19e7SMasatake YAMATO void traceMain(void);
41*fb6a19e7SMasatake YAMATO bool isMainTraced(void);
42*fb6a19e7SMasatake YAMATO 
43*fb6a19e7SMasatake YAMATO #ifdef DO_TRACING
44*fb6a19e7SMasatake YAMATO 
451906ae4dSMasatake YAMATO 	#define TRACE_ENTER() traceEnter(__func__,"")
461906ae4dSMasatake YAMATO 	#define TRACE_LEAVE() traceLeave(__func__,"")
47d33423e3SSzymon Tomasz Stefanek 
48d33423e3SSzymon Tomasz Stefanek 	#define TRACE_ENTER_TEXT(_szFormat,...) \
491906ae4dSMasatake YAMATO 		traceEnter(__func__,_szFormat,## __VA_ARGS__)
50d33423e3SSzymon Tomasz Stefanek 
51d33423e3SSzymon Tomasz Stefanek 	#define TRACE_LEAVE_TEXT(_szFormat,...) \
521906ae4dSMasatake YAMATO 		traceLeave(__func__,_szFormat,## __VA_ARGS__)
53d33423e3SSzymon Tomasz Stefanek 
54d33423e3SSzymon Tomasz Stefanek 	#define TRACE_PRINT(_szFormat,...) \
551906ae4dSMasatake YAMATO 		tracePrint(__func__,_szFormat,## __VA_ARGS__)
56d33423e3SSzymon Tomasz Stefanek 
5749c14f67SMasatake YAMATO 	/* TRACE_PRINT prints line at once.
5849c14f67SMasatake YAMATO 	 * If you want to print a trace line incrementally,
5949c14f67SMasatake YAMATO 	 * use following macros.
6049c14f67SMasatake YAMATO 	 *
6149c14f67SMasatake YAMATO 	 * TRACE_PRINT_PREFIX: just print a trace prefix. No newline.
6249c14f67SMasatake YAMATO 	 * TRACE_PRINT_FMT: print as a format. No prefix, no newline.
6349c14f67SMasatake YAMATO 	 * TRACE_PRINT_NEWLINE: just print a newline.
6449c14f67SMasatake YAMATO 	 */
6549c14f67SMasatake YAMATO 	#define TRACE_PRINT_PREFIX() \
6649c14f67SMasatake YAMATO 		tracePrintPrefix(__func__)
6749c14f67SMasatake YAMATO 	#define TRACE_PRINT_FMT(_szFormat,...) \
6849c14f67SMasatake YAMATO 		tracePrintFmt(_szFormat,## __VA_ARGS__)
6949c14f67SMasatake YAMATO 	#define TRACE_PRINT_NEWLINE() \
7049c14f67SMasatake YAMATO 		tracePrintNewline()
7149c14f67SMasatake YAMATO 
72d33423e3SSzymon Tomasz Stefanek 	#define TRACE_ASSERT(_condition,_szFormat,...) \
73d33423e3SSzymon Tomasz Stefanek 		do { \
74d33423e3SSzymon Tomasz Stefanek 			if(!(_condition)) \
75d33423e3SSzymon Tomasz Stefanek 			{ \
761906ae4dSMasatake YAMATO 				tracePrint(__func__,_szFormat,## __VA_ARGS__); \
77d33423e3SSzymon Tomasz Stefanek 				Assert(false); \
78d33423e3SSzymon Tomasz Stefanek 			} \
79d33423e3SSzymon Tomasz Stefanek 		} while(0)
80d33423e3SSzymon Tomasz Stefanek 
81d33423e3SSzymon Tomasz Stefanek #else //!DO_TRACING
82d33423e3SSzymon Tomasz Stefanek 
83d33423e3SSzymon Tomasz Stefanek 	#define TRACE_ENTER() do { } while(0)
84d33423e3SSzymon Tomasz Stefanek 	#define TRACE_LEAVE() do { } while(0)
85d33423e3SSzymon Tomasz Stefanek 
86d33423e3SSzymon Tomasz Stefanek 	#define TRACE_ENTER_TEXT(_szFormat,...) do { } while(0)
87d33423e3SSzymon Tomasz Stefanek 	#define TRACE_LEAVE_TEXT(_szFormat,...) do { } while(0)
88d33423e3SSzymon Tomasz Stefanek 
89d33423e3SSzymon Tomasz Stefanek 	#define TRACE_PRINT(_szFormat,...) do { } while(0)
90d33423e3SSzymon Tomasz Stefanek 
9149c14f67SMasatake YAMATO 	#define TRACE_PRINT_PREFIX() do { } while(0)
9249c14f67SMasatake YAMATO 	#define TRACE_PRINT_FMT(_szFormat,...) do { } while(0)
9349c14f67SMasatake YAMATO 	#define TRACE_PRINT_NEWLINE() do { } while(0)
9449c14f67SMasatake YAMATO 
95d33423e3SSzymon Tomasz Stefanek 	#define TRACE_ASSERT(_condition,_szFormat,...) do { } while(0)
96d33423e3SSzymon Tomasz Stefanek 
97d33423e3SSzymon Tomasz Stefanek #endif //!DO_TRACING
98d33423e3SSzymon Tomasz Stefanek 
99d33423e3SSzymon Tomasz Stefanek 
100d33423e3SSzymon Tomasz Stefanek #endif //!ctags_trace_h_
101