File: trace.h

package info (click to toggle)
universal-ctags 0%2Bgit20181215-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 17,444 kB
  • sloc: ansic: 84,242; vhdl: 5,924; sh: 5,830; perl: 1,743; cpp: 1,599; cs: 1,193; python: 812; sql: 572; f90: 534; php: 479; yacc: 459; fortran: 341; makefile: 325; asm: 311; objc: 284; ruby: 261; xml: 245; java: 157; tcl: 133; cobol: 122; lisp: 113; erlang: 61; ada: 55; ml: 49; awk: 43
file content (100 lines) | stat: -rw-r--r-- 2,738 bytes parent folder | download | duplicates (3)
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
#ifndef ctags_trace_h_
#define ctags_trace_h_
/*
*   Copyright (c) 2016, Szymon Tomasz Stefanek
*
*   This source code is released for free distribution under the terms of the
*   GNU General Public License version 2 or (at your option) any later version.
*
*   Tracing facility.
*/

#include "general.h"
#include "debug.h"

//
// Master tracing switch.
//
// Uncomment this to enable extensive debugging to stderr in code.
// Use only for development as tracing reduces performance.
//
// "./configure --enable-debugging" defines DEBUG.
// When running ctags, pass --_trace=<LANG>[,<LANG>]* option.
//
#ifdef DEBUG
#define DO_TRACING
#endif

#ifdef DO_TRACING

	bool isTraced (void);
	void traceLanguage (langType language);
	bool isLanguageTraced (langType language);

	void traceEnter(const char * szFunction,const char * szFormat,...);
	void traceLeave(const char * szFunction,const char * szFormat,...);
	void tracePrint(const char * szFunction,const char * szFormat,...);

	void tracePrintPrefix(const char * szFunction);
	void tracePrintFmt(const char * szFormat,...);
	void tracePrintNewline(void);

	#define TRACE_ENTER() traceEnter(__func__,"")
	#define TRACE_LEAVE() traceLeave(__func__,"")

	#define TRACE_ENTER_TEXT(_szFormat,...) \
		traceEnter(__func__,_szFormat,## __VA_ARGS__)

	#define TRACE_LEAVE_TEXT(_szFormat,...) \
		traceLeave(__func__,_szFormat,## __VA_ARGS__)

	#define TRACE_PRINT(_szFormat,...) \
		tracePrint(__func__,_szFormat,## __VA_ARGS__)

	/* TRACE_PRINT prints line at once.
	 * If you want to print a trace line incrementally,
	 * use following macros.
	 *
	 * TRACE_PRINT_PREFIX: just print a trace prefix. No newline.
	 * TRACE_PRINT_FMT: print as a format. No prefix, no newline.
	 * TRACE_PRINT_NEWLINE: just print a newline.
	 */
	#define TRACE_PRINT_PREFIX() \
		tracePrintPrefix(__func__)
	#define TRACE_PRINT_FMT(_szFormat,...) \
		tracePrintFmt(_szFormat,## __VA_ARGS__)
	#define TRACE_PRINT_NEWLINE() \
		tracePrintNewline()

	#define TRACE_ASSERT(_condition,_szFormat,...) \
		do { \
			if(!(_condition)) \
			{ \
				tracePrint(__func__,_szFormat,## __VA_ARGS__); \
				Assert(false); \
			} \
		} while(0)

	void traceMain(void);
	bool isMainTraced(void);

#else //!DO_TRACING

	#define TRACE_ENTER() do { } while(0)
	#define TRACE_LEAVE() do { } while(0)

	#define TRACE_ENTER_TEXT(_szFormat,...) do { } while(0)
	#define TRACE_LEAVE_TEXT(_szFormat,...) do { } while(0)

	#define TRACE_PRINT(_szFormat,...) do { } while(0)

	#define TRACE_PRINT_PREFIX() do { } while(0)
	#define TRACE_PRINT_FMT(_szFormat,...) do { } while(0)
	#define TRACE_PRINT_NEWLINE() do { } while(0)

	#define TRACE_ASSERT(_condition,_szFormat,...) do { } while(0)

#endif //!DO_TRACING


#endif //!ctags_trace_h_