source: titan/titan/debug.h @ 23192

Last change on this file since 23192 was 23192, checked in by nit, 7 years ago

[titan] optimize

File size: 3.9 KB
Line 
1/*****************************************************/
2/* this file is part of the tiTan / tiTanNIT Project */
3/* and allowed only for use with this.               */
4/*                                                   */
5/* copyright by NIT                                  */
6/*****************************************************/
7
8#ifndef DEBUG_H
9#define DEBUG_H
10
11short debug_level = 10;
12
13// mc debug_level = 50;
14// panel debug_level = 60;
15
16void __cyg_profile_func_enter(void *this_fn, void* call_size) __attribute__((no_instrument_function));
17void __cyg_profile_func_enter(void *this_fn, void* call_size)
18{
19        int i = 0;
20        pthread_t threadid = pthread_self();
21
22        for(i = 0; i < MAXSTACKTRACE; i++)
23        {
24                if(stacktrace[i].thread == threadid)
25                {
26                        stacktrace[i].func[stacktrace[i].pos] = this_fn;
27                        stacktrace[i].pos++;
28                        if(stacktrace[i].pos >= MAXSTACKTRACE) stacktrace[i].pos = MAXSTACKTRACE - 1;
29                        break;
30                }
31        }
32
33        if(i == MAXSTACKTRACE)
34        {
35                for(i = 0; i < MAXSTACKTRACE; i++)
36                {
37                        if(stacktrace[i].pos == 0)
38                        {
39                                stacktrace[i].thread = threadid;
40                                stacktrace[i].func[stacktrace[i].pos] = this_fn;
41                                stacktrace[i].pos++;
42                                if(stacktrace[i].pos >= MAXSTACKTRACE) stacktrace[i].pos = MAXSTACKTRACE - 1;
43                                break;
44                        }
45                }
46        }
47}
48
49void __cyg_profile_func_exit(void *this_fn, void* call_size) __attribute__((no_instrument_function));
50void __cyg_profile_func_exit(void *this_fn, void* call_size)
51{
52        int i = 0;
53        pthread_t threadid = pthread_self();
54
55        for(i = 0; i < MAXSTACKTRACE; i++)
56        {
57                if(stacktrace[i].thread == threadid)
58                {
59                        if(stacktrace[i].pos > 0) stacktrace[i].pos--;
60                        break;
61                }
62        }
63}
64
65//debug
66//first line shows greater/same debuglevel
67//second line shows only same debuglevel
68//#define debug(level, fmt, args...) if(debug_level >= level) { do { printf("[%s] " fmt, PROGNAME, ##args); } while (0); printf(", file=%s, func=%s, line=%d\n", __FILE__, __FUNCTION__, __LINE__); }
69//#define debug(level, fmt, args...) if(debug_level == level) { do { printf("[%s] " fmt, PROGNAME, ##args); } while (0); printf(", file=%s, func=%s, line=%d\n", __FILE__, __FUNCTION__, __LINE__); }
70void debugfunc(int level, char* file, const char* function, int line, char* msg, ...)
71{
72        if(debug_level == level)
73        {
74                va_list ap;
75                va_start(ap, msg);
76                printf("[%s] ", PROGNAME);
77                vfprintf(stdout, msg, ap);
78                va_end(ap);
79                fprintf(stdout, ", file=%s, func=%s, line=%d\n", file, function, line);
80        }
81}
82#define debug(level, msg...) debugfunc(level, __FILE__, __FUNCTION__, __LINE__, msg);
83
84//err
85//#define err(fmt, args...) { do { fprintf(stderr, "[%s] error: " fmt, PROGNAME, ##args); } while (0); fprintf(stderr, ", file=%s, func=%s, line=%d\n", __FILE__, __FUNCTION__, __LINE__); }
86void errfunc(char* file, const char* function, int line, char* msg, ...)
87{
88        va_list ap;
89        va_start(ap, msg);
90        fprintf(stderr, "[%s] error: ", PROGNAME);
91        vfprintf(stderr, msg, ap);
92        va_end(ap);
93        fprintf(stderr, ", file=%s, func=%s, line=%d\n", file, function, line);
94}
95#define err(msg...) errfunc(__FILE__, __FUNCTION__, __LINE__, msg);
96
97//perr
98//#define perr(fmt, args...) { do { fprintf(stderr, "[%s] error: " fmt, PROGNAME, ##args); } while (0); fprintf(stderr, ", err=%m, file=%s, func=%s, line=%d\n", __FILE__, __FUNCTION__, __LINE__); }
99void perrfunc(char* file, const char* function, int line, char* msg, ...)
100{
101        va_list ap;
102        va_start(ap, msg);
103        fprintf(stderr, "[%s] error: ", PROGNAME);
104        vfprintf(stderr, msg, ap);
105        va_end(ap);
106        fprintf(stderr, ", err=%m, file=%s, func=%s, line=%d\n", file, function, line);
107}
108#define perr(msg...) perrfunc(__FILE__, __FUNCTION__, __LINE__, msg);
109
110//filedebug
111//#define filedebug(file, fmt, args...) { FILE* fd = fopen(file, "a"); if(fd != NULL) { do { fprintf(fd, "" fmt, ##args); } while (0); fprintf(fd, "\n"); }}
112void filedebugfunc(char* file, char* msg, ...)
113{
114        FILE* fd = fopen(file, "a"); 
115        if(fd != NULL)
116        {
117                va_list ap;
118                va_start(ap, msg);
119                vfprintf(fd, msg, ap);
120                va_end(ap);
121                fprintf(fd, "\n");
122                fclose(fd);
123        }
124}
125#define filedebug(file, msg...) filedebugfunc(file, msg);
126
127#endif
Note: See TracBrowser for help on using the repository browser.