File: trace.c

package info (click to toggle)
universal-ctags 6.2.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 37,612 kB
  • sloc: ansic: 158,498; sh: 8,621; lisp: 7,742; vhdl: 6,518; cpp: 2,583; perl: 2,578; python: 2,324; javascript: 2,054; cs: 1,193; lex: 1,015; sql: 897; makefile: 787; ruby: 764; php: 755; cobol: 741; f90: 566; ada: 559; asm: 509; yacc: 465; fortran: 412; xml: 405; objc: 289; tcl: 280; java: 173; erlang: 65; pascal: 58; ml: 49; awk: 44; haskell: 42
file content (136 lines) | stat: -rw-r--r-- 2,476 bytes parent folder | download | duplicates (8)
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
/*
*   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 "trace.h"

#ifdef DO_TRACING

#include "options.h"
#include "read.h"

#include <stdio.h>
#include <stdarg.h>

void traceEnter(const char * szFunction,const char * szFormat,...)
{
	if (!isTraced())
		return;

	debugIndent ();

	fprintf(stderr,"[>> %s][at %lu] ",szFunction,getInputLineNumber());

	va_list va;
	va_start(va,szFormat);
	vfprintf(stderr,szFormat,va);
	va_end(va);

	fprintf(stderr,"\n");

	debugInc();
}

void traceLeave(const char * szFunction,const char * szFormat,...)
{
	if (!isTraced())
		return;

	debugDec();
	debugIndent ();

	fprintf(stderr,"[<< %s][at %lu] ",szFunction,getInputLineNumber());

	va_list va;
	va_start(va,szFormat);
	vfprintf(stderr,szFormat,va);
	va_end(va);

	fprintf(stderr,"\n");
}

static void tracePrintFmtVa(const char * szFormat, va_list va)
{
	if (!isTraced())
		return;

	vfprintf(stderr,szFormat,va);
}

void tracePrint(const char * szFunction, const char * szFormat,...)
{
	if (!isTraced())
		return;

	tracePrintPrefix(szFunction);

	va_list va;
	va_start(va,szFormat);
	tracePrintFmtVa (szFormat,va);
	va_end(va);

	tracePrintNewline();
}

void tracePrintFmt(const char * szFormat,...)
{
	va_list va;
	va_start(va,szFormat);
	tracePrintFmtVa (szFormat,va);
	va_end(va);
}

void tracePrintPrefix(const char * szFunction)
{
	if (!isTraced())
		return;

	debugIndent();

	fprintf(stderr,"[%s][at %lu] ",szFunction,getInputLineNumber());
}

void tracePrintNewline(void)
{
	if (!isTraced())
		return;

	fprintf(stderr,"\n");
}

static bool tracingMain;

void traceMain(void)
{
	verbose("Tracing main part\n");
	tracingMain = true;
}

bool isMainTraced(void)
{
	return tracingMain;
}

#else
bool isTraced (void) { return false; }
void traceLanguage (langType language) {}
bool isLanguageTraced (langType language) { return false; }

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) {}

void traceMain(void);
bool isMainTraced(void) { return false; }

#endif // DO_TRACING