summaryrefslogtreecommitdiff
path: root/src/mongo/util/debug_util.h
blob: 56db732fe4888f8a8c2b05788d3624f688358fb1 (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
// debug_util.h

/*    Copyright 2009 10gen Inc.
 *
 *    Licensed under the Apache License, Version 2.0 (the "License");
 *    you may not use this file except in compliance with the License.
 *    You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 *    Unless required by applicable law or agreed to in writing, software
 *    distributed under the License is distributed on an "AS IS" BASIS,
 *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *    See the License for the specific language governing permissions and
 *    limitations under the License.
 */

#pragma once


namespace mongo {

#if defined(_DEBUG)
    enum {DEBUG_BUILD = 1};
    const bool debug=true;
#else
    enum {DEBUG_BUILD = 0};
    const bool debug=false;
#endif

#define MONGO_DEV if( DEBUG_BUILD )
#define DEV MONGO_DEV

#define MONGO_DEBUGGING if( 0 )
#define DEBUGGING MONGO_DEBUGGING

// The following declare one unique counter per enclosing function.
// NOTE The implementation double-increments on a match, but we don't really care.
#define MONGO_SOMETIMES( occasion, howOften ) for( static unsigned occasion = 0; ++occasion % howOften == 0; )
#define SOMETIMES MONGO_SOMETIMES

#define MONGO_OCCASIONALLY SOMETIMES( occasionally, 16 )
#define OCCASIONALLY MONGO_OCCASIONALLY

#define MONGO_RARELY SOMETIMES( rarely, 128 )
#define RARELY MONGO_RARELY

#define MONGO_ONCE for( static bool undone = true; undone; undone = false )
#define ONCE MONGO_ONCE

#if defined(_WIN32)
    inline int strcasecmp(const char* s1, const char* s2) {return _stricmp(s1, s2);}
#endif

    // Sets SIGTRAP handler to launch GDB
    // Noop unless on *NIX and compiled with _DEBUG
    void setupSIGTRAPforGDB();

    extern int tlogLevel;
    void mongo_breakpoint();
    inline void breakpoint() {
        if ( tlogLevel < 0 )
            return;
        mongo_breakpoint();
    }
} // namespace mongo