0%

C++ Debug常用的宏定义记录

记录一些C++ Debug常用的宏定义

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
// reference from: https://github.com/Project-OSRM/osrm-backend

#ifndef TIME_UTILS_H_
#define TIME_UTILS_H_

#include "chrono"


// Recording start
#define TIMER_START(_X) auto _X##_start = std::chrono::steady_clock::now(), _X##_stop = _X##_start

// Recording end
#define TIMER_STOP(_X) _X##_stop = std::chrono::steady_clock::now()

// return duration time with nanosecond
#define TIMER_NSEC(_X) \
std::chrono::duration_cast<std::chrono::nanoseconds>(_X##_stop - _X##_start).count()

// return duration time with microsecond
#define TIMER_USEC(_X) \
std::chrono::duration_cast<std::chrono::microseconds>(_X##_stop - _X##_start).count()

// return duration time with millisecond
#define TIMER_MSEC(_X) \
(0.000001 * \
std::chrono::duration_cast<std::chrono::nanoseconds>(_X##_stop - _X##_start).count())

// return duration time with seconds
#define TIMER_SEC(_X) \
(0.000001 * \
std::chrono::duration_cast<std::chrono::microseconds>(_X##_stop - _X##_start).count())

// return duration time with minutes
#define TIMER_MIN(_X) \
std::chrono::duration_cast<std::chrono::minutes>(_X##_stop - _X##_start).count()


#define ERROR(...) \
do{ \
fprintf(stderr, "[ERROR ]%s %s(Line %d): ",__FILE__,__FUNCTION__,__LINE__); \
fprintf(stderr, __VA_ARGS__); \
fprintf(stdout, "\n"); \
}while (0)

#define WARNING(...) \
do{ \
fprintf(stdout, "[WARNING]%s %s(Line %d): ",__FILE__,__FUNCTION__,__LINE__); \
fprintf(stdout, __VA_ARGS__); \
fprintf(stdout, "\n"); \
}while (0)

#define INFO(...) \
do{ \
fprintf(stdout, "[INFO ]%s %s(Line %d): ",__FILE__,__FUNCTION__,__LINE__); \
fprintf(stdout, __VA_ARGS__); \
fprintf(stdout, "\n"); \
}while (0)

#ifdef DEBUG
#define DBG(...) \
do{ \
fprintf(stdout, "[DEBUG ]%s %s(Line %d): ",__FILE__,__FUNCTION__,__LINE__); \
fprintf(stdout, __VA_ARGS__); \
fprintf(stdout, "\n"); \
}while(0)

// Recording start
#define DBG_TIMER_START(_X) auto _X##_start = std::chrono::steady_clock::now(), _X##_stop = _X##_start

// Recording end
#define DBG_TIMER_STOP(_X) _X##_stop = std::chrono::steady_clock::now()

#define DBG_TIMER_MSEC(_X) \
(0.000001 * \
std::chrono::duration_cast<std::chrono::nanoseconds>(_X##_stop - _X##_start).count())
#else
#define DBG(...)
#define DBG_TIMER_START(_X)
#define DBG_TIMER_STOP(_X)
#define DBG_TIMER_MSEC(_X)
#endif


#endif //TIME_UTILS_H_