summaryrefslogtreecommitdiff
path: root/src/VBox/HostDrivers/win/VBoxDbgLog.h
blob: 9fe6651cc0f56c5d1341cf8d63479d59f9c1044d (plain)
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
/* $Id: VBoxDbgLog.h $ */

/** @file
 * Logging helper
 */

/*
 * Copyright (C) 2011 Oracle Corporation
 *
 * This file is part of VirtualBox Open Source Edition (OSE), as
 * available from http://www.virtualbox.org. This file is free software;
 * you can redistribute it and/or modify it under the terms of the GNU
 * General Public License (GPL) as published by the Free Software
 * Foundation, in version 2 as it comes in the "COPYING" file of the
 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
 */

#ifndef ___VBoxDbgLog_h__
#define ___VBoxDbgLog_h__

#ifndef VBOX_DBG_LOG_NAME
# error VBOX_DBG_LOG_NAME should be defined!
#endif

/* Uncomment to show file/line info in the log */
/*#define VBOX_DBG_LOG_SHOWLINEINFO*/

#define VBOX_DBG_LOG_PREFIX_FMT VBOX_DBG_LOG_NAME"::"LOG_FN_FMT": "
#define VBOX_DBG_LOG_PREFIX_PARMS __PRETTY_FUNCTION__

#ifdef VBOX_DBG_LOG_SHOWLINEINFO
# define VBOX_DBG_LOG_SUFFIX_FMT " (%s:%d)\n"
# define VBOX_DBG_LOG_SUFFIX_PARMS ,__FILE__, __LINE__
#else
# define VBOX_DBG_LOG_SUFFIX_FMT "\n"
# define VBOX_DBG_LOG_SUFFIX_PARMS
#endif

#ifdef DEBUG_misha
# define BP_WARN() AssertFailed()
#else
# define BP_WARN() do {} while(0)
#endif

#define _LOGMSG_EXACT(_logger, _a)                                          \
    do                                                                      \
    {                                                                       \
        _logger(_a);                                                        \
    } while (0)

#define _LOGMSG(_logger, _a)                                                \
    do                                                                      \
    {                                                                       \
        _logger((VBOX_DBG_LOG_PREFIX_FMT, VBOX_DBG_LOG_PREFIX_PARMS));  \
        _logger(_a);                                                        \
        _logger((VBOX_DBG_LOG_SUFFIX_FMT  VBOX_DBG_LOG_SUFFIX_PARMS));  \
    } while (0)

/* we can not print paged strings to RT logger, do it this way */
#define _LOGMSG_STR(_logger, _a, _f) do {\
        int _i = 0; \
        _logger(("\"")); \
        for (;(_a)[_i];++_i) { \
            _logger(("%"_f, (_a)[_i])); \
        }\
        _logger(("\"\n")); \
    } while (0)

#define _LOGMSG_USTR(_logger, _a) do {\
        int _i = 0; \
        _logger(("\"")); \
        for (;_i<(_a)->Length/2;++_i) { \
            _logger(("%c", (_a)->Buffer[_i])); \
        }\
        _logger(("\"\n")); \
    } while (0)

#define WARN_NOBP(_a)                                                          \
    do                                                                            \
    {                                                                             \
        Log((VBOX_DBG_LOG_PREFIX_FMT"WARNING! ", VBOX_DBG_LOG_PREFIX_PARMS)); \
        Log(_a);                                                                  \
        Log((VBOX_DBG_LOG_SUFFIX_FMT VBOX_DBG_LOG_SUFFIX_PARMS));             \
    } while (0)

#define WARN(_a)                                                                  \
    do                                                                            \
    {                                                                             \
        WARN_NOBP(_a);                                                         \
        BP_WARN();                                                             \
    } while (0)

#define ASSERT_WARN(_a, _w) do {\
        if(!(_a)) { \
            WARN(_w); \
        }\
    } while (0)

#define LOG(_a) _LOGMSG(Log, _a)
#define LOGREL(_a) _LOGMSG(LogRel, _a)
#define LOGF(_a) _LOGMSG(LogFlow, _a)
#define LOGF_ENTER() LOGF(("ENTER"))
#define LOGF_LEAVE() LOGF(("LEAVE"))
#define LOG_EXACT(_a) _LOGMSG_EXACT(Log, _a)
#define LOGREL_EXACT(_a) _LOGMSG_EXACT(LogRel, _a)
/* we can not print paged strings to RT logger, do it this way */
#define LOG_STRA(_a) do {\
        _LOGMSG_STR(Log, _a, "c"); \
    } while (0)
#define LOG_STRW(_a) do {\
        _LOGMSG_STR(Log, _a, "c"); \
    } while (0)
#define LOG_USTR(_a) do {\
        _LOGMSG_USTR(Log, _a); \
    } while (0)
#define LOGREL_STRA(_a) do {\
        _LOGMSG_STR(LogRel, _a, "c"); \
    } while (0)
#define LOGREL_STRW(_a) do {\
        _LOGMSG_STR(LogRel, _a, "c"); \
    } while (0)
#define LOGREL_USTR(_a) do {\
        _LOGMSG_USTR(LogRel, _a); \
    } while (0)


#endif /*___VBoxDbgLog_h__*/