LLVM 20.0.0git
Debug.h
Go to the documentation of this file.
1//===- llvm/Support/Debug.h - Easy way to add debug output ------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// This file implements a handy way of adding debugging information to your
10// code, without it being enabled all of the time, and without having to add
11// command line options to enable it.
12//
13// In particular, just wrap your code with the LLVM_DEBUG() macro, and it will
14// be enabled automatically if you specify '-debug' on the command-line.
15// LLVM_DEBUG() requires the DEBUG_TYPE macro to be defined. Set it to "foo"
16// specify that your debug code belongs to class "foo". Be careful that you only
17// do this after including Debug.h and not around any #include of headers.
18// Headers should define and undef the macro acround the code that needs to use
19// the LLVM_DEBUG() macro. Then, on the command line, you can specify
20// '-debug-only=foo' to enable JUST the debug information for the foo class.
21//
22// When compiling without assertions, the -debug-* options and all code in
23// LLVM_DEBUG() statements disappears, so it does not affect the runtime of the
24// code.
25//
26//===----------------------------------------------------------------------===//
27
28#ifndef LLVM_SUPPORT_DEBUG_H
29#define LLVM_SUPPORT_DEBUG_H
30
31namespace llvm {
32
33class raw_ostream;
34
35#ifndef NDEBUG
36
37/// isCurrentDebugType - Return true if the specified string is the debug type
38/// specified on the command line, or if none was specified on the command line
39/// with the -debug-only=X option.
40///
41bool isCurrentDebugType(const char *Type);
42
43/// setCurrentDebugType - Set the current debug type, as if the -debug-only=X
44/// option were specified. Note that DebugFlag also needs to be set to true for
45/// debug output to be produced.
46///
47void setCurrentDebugType(const char *Type);
48
49/// setCurrentDebugTypes - Set the current debug type, as if the
50/// -debug-only=X,Y,Z option were specified. Note that DebugFlag
51/// also needs to be set to true for debug output to be produced.
52///
53void setCurrentDebugTypes(const char **Types, unsigned Count);
54
55/// DEBUG_WITH_TYPE macro - This macro should be used by passes to emit debug
56/// information. If the '-debug' option is specified on the commandline, and if
57/// this is a debug build, then the code specified as the option to the macro
58/// will be executed. Otherwise it will not be. Example:
59///
60/// DEBUG_WITH_TYPE("bitset", dbgs() << "Bitset contains: " << Bitset << "\n");
61///
62/// This will emit the debug information if -debug is present, and -debug-only
63/// is not specified, or is specified as "bitset".
64#define DEBUG_WITH_TYPE(TYPE, ...) \
65 do { \
66 if (::llvm::DebugFlag && ::llvm::isCurrentDebugType(TYPE)) { \
67 __VA_ARGS__; \
68 } \
69 } while (false)
70
71#else
72#define isCurrentDebugType(X) (false)
73#define setCurrentDebugType(X) do { (void)(X); } while (false)
74#define setCurrentDebugTypes(X, N) do { (void)(X); (void)(N); } while (false)
75#define DEBUG_WITH_TYPE(TYPE, ...) \
76 do { \
77 } while (false)
78#endif
79
80/// This boolean is set to true if the '-debug' command line option
81/// is specified. This should probably not be referenced directly, instead, use
82/// the DEBUG macro below.
83///
84extern bool DebugFlag;
85
86/// EnableDebugBuffering - This defaults to false. If true, the debug
87/// stream will install signal handlers to dump any buffered debug
88/// output. It allows clients to selectively allow the debug stream
89/// to install signal handlers if they are certain there will be no
90/// conflict.
91///
92extern bool EnableDebugBuffering;
93
94/// dbgs() - This returns a reference to a raw_ostream for debugging
95/// messages. If debugging is disabled it returns errs(). Use it
96/// like: dbgs() << "foo" << "bar";
97raw_ostream &dbgs();
98
99// DEBUG macro - This macro should be used by passes to emit debug information.
100// If the '-debug' option is specified on the commandline, and if this is a
101// debug build, then the code specified as the option to the macro will be
102// executed. Otherwise it will not be. Example:
103//
104// LLVM_DEBUG(dbgs() << "Bitset contains: " << Bitset << "\n");
105//
106#define LLVM_DEBUG(...) DEBUG_WITH_TYPE(DEBUG_TYPE, __VA_ARGS__)
107
108} // end namespace llvm
109
110#endif // LLVM_SUPPORT_DEBUG_H
RelocType Type
Definition: COFFYAML.cpp:410
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
bool EnableDebugBuffering
EnableDebugBuffering - This defaults to false.
Definition: Debug.cpp:196
bool DebugFlag
This boolean is set to true if the '-debug' command line option is specified.
Definition: Debug.cpp:45
void setCurrentDebugTypes(const char **Types, unsigned Count)
setCurrentDebugTypes - Set the current debug type, as if the -debug-only=X,Y,Z option were specified.
Definition: Debug.cpp:74
raw_ostream & dbgs()
dbgs() - This returns a reference to a raw_ostream for debugging messages.
Definition: Debug.cpp:163
void setCurrentDebugType(const char *Type)
setCurrentDebugType - Set the current debug type, as if the -debug-only=X option were specified.
Definition: Debug.cpp:70
bool isCurrentDebugType(const char *Type)
isCurrentDebugType - Return true if the specified string is the debug type specified on the command l...
Definition: Debug.cpp:52