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