From Jason Turner

[debugging]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmp5_w15gs_/{from.md → to.md} +157 -0
tmp/tmp5_w15gs_/{from.md → to.md} RENAMED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ## Debugging <a id="debugging">[[debugging]]</a>
2
+
3
+ ### General <a id="debugging.general">[[debugging.general]]</a>
4
+
5
+ Subclause [[debugging]] describes functionality to introspect and
6
+ interact with the execution of the program.
7
+
8
+ [*Note 1*: The facilities provided by the debugging functionality
9
+ interact with a program that could be tracing the execution of a C++
10
+ program, such as a debugger. — *end note*]
11
+
12
+ ### Header `<debugging>` synopsis <a id="debugging.syn">[[debugging.syn]]</a>
13
+
14
+ ``` cpp
15
+ // all freestanding
16
+ namespace std {
17
+ // [debugging.utility], utility
18
+ void breakpoint() noexcept;
19
+ void breakpoint_if_debugging() noexcept;
20
+ bool is_debugger_present() noexcept;
21
+ }
22
+ ```
23
+
24
+ ### Utility <a id="debugging.utility">[[debugging.utility]]</a>
25
+
26
+ ``` cpp
27
+ void breakpoint() noexcept;
28
+ ```
29
+
30
+ The semantics of this function are *implementation-defined*.
31
+
32
+ [*Note 1*: It is intended that, when invoked with a debugger present,
33
+ the execution of the program temporarily halts and execution is handed
34
+ to the debugger until the program is either terminated by the debugger
35
+ or the debugger resumes execution of the program as if the function was
36
+ not invoked. In particular, there is no intent for a call to this
37
+ function to accomodate resumption of the program in a different manner.
38
+ If there is no debugger present, execution of the program can end
39
+ abnormally. — *end note*]
40
+
41
+ ``` cpp
42
+ void breakpoint_if_debugging() noexcept;
43
+ ```
44
+
45
+ *Effects:* Equivalent to:
46
+
47
+ ``` cpp
48
+ if (is_debugger_present()) breakpoint();
49
+ ```
50
+
51
+ ``` cpp
52
+ bool is_debugger_present() noexcept;
53
+ ```
54
+
55
+ *Required behavior:* This function has no preconditions.
56
+
57
+ *Default behavior:* *implementation-defined*.
58
+
59
+ [*Note 2*: It is intended that, using an immediate (uncached) query to
60
+ determine if the program is being traced by a debugger, an
61
+ implementation returns `true` only when tracing the execution of the
62
+ program with a debugger. On Windows or equivalent systems, this can be
63
+ achieved by calling the `::IsDebuggerPresent()` Win32 function. For
64
+ systems compatible with ISO/IEC 23360:2021, this can be achieved by
65
+ checking for a tracing process, with a best-effort determination that
66
+ such a tracing process is a debugger. — *end note*]
67
+
68
+ *Remarks:* This function is replaceable [[term.replaceable.function]].
69
+
70
+ <!-- Link reference definitions -->
71
+ [assertions]: #assertions
72
+ [assertions.assert]: #assertions.assert
73
+ [assertions.general]: #assertions.general
74
+ [bad.alloc]: support.md#bad.alloc
75
+ [cassert.syn]: #cassert.syn
76
+ [cerrno.syn]: #cerrno.syn
77
+ [cmp.concept]: support.md#cmp.concept
78
+ [comparisons.three.way]: utilities.md#comparisons.three.way
79
+ [concepts.object]: concepts.md#concepts.object
80
+ [container.alloc.reqmts]: containers.md#container.alloc.reqmts
81
+ [container.rev.reqmts]: containers.md#container.rev.reqmts
82
+ [conv]: expr.md#conv
83
+ [cpp.predefined]: cpp.md#cpp.predefined
84
+ [debugging]: #debugging
85
+ [debugging.general]: #debugging.general
86
+ [debugging.syn]: #debugging.syn
87
+ [debugging.utility]: #debugging.utility
88
+ [defns.const.subexpr]: intro.md#defns.const.subexpr
89
+ [diagnostics]: #diagnostics
90
+ [diagnostics.general]: #diagnostics.general
91
+ [diagnostics.summary]: #diagnostics.summary
92
+ [domain.error]: #domain.error
93
+ [errno]: #errno
94
+ [errno.general]: #errno.general
95
+ [format.string.std]: text.md#format.string.std
96
+ [intro.execution]: basic.md#intro.execution
97
+ [invalid.argument]: #invalid.argument
98
+ [iterator.concept.random.access]: iterators.md#iterator.concept.random.access
99
+ [length.error]: #length.error
100
+ [logic.error]: #logic.error
101
+ [out.of.range]: #out.of.range
102
+ [overflow.error]: #overflow.error
103
+ [random.access.iterators]: iterators.md#random.access.iterators
104
+ [range.error]: #range.error
105
+ [res.on.exception.handling]: library.md#res.on.exception.handling
106
+ [runtime.error]: #runtime.error
107
+ [sequence.reqmts]: containers.md#sequence.reqmts
108
+ [stacktrace]: #stacktrace
109
+ [stacktrace.basic]: #stacktrace.basic
110
+ [stacktrace.basic.cmp]: #stacktrace.basic.cmp
111
+ [stacktrace.basic.cons]: #stacktrace.basic.cons
112
+ [stacktrace.basic.hash]: #stacktrace.basic.hash
113
+ [stacktrace.basic.mod]: #stacktrace.basic.mod
114
+ [stacktrace.basic.nonmem]: #stacktrace.basic.nonmem
115
+ [stacktrace.basic.obs]: #stacktrace.basic.obs
116
+ [stacktrace.basic.overview]: #stacktrace.basic.overview
117
+ [stacktrace.entry]: #stacktrace.entry
118
+ [stacktrace.entry.cmp]: #stacktrace.entry.cmp
119
+ [stacktrace.entry.cons]: #stacktrace.entry.cons
120
+ [stacktrace.entry.obs]: #stacktrace.entry.obs
121
+ [stacktrace.entry.overview]: #stacktrace.entry.overview
122
+ [stacktrace.entry.query]: #stacktrace.entry.query
123
+ [stacktrace.format]: #stacktrace.format
124
+ [stacktrace.general]: #stacktrace.general
125
+ [stacktrace.syn]: #stacktrace.syn
126
+ [std.exceptions]: #std.exceptions
127
+ [std.exceptions.general]: #std.exceptions.general
128
+ [stdexcept.syn]: #stdexcept.syn
129
+ [syserr]: #syserr
130
+ [syserr.compare]: #syserr.compare
131
+ [syserr.errcat]: #syserr.errcat
132
+ [syserr.errcat.derived]: #syserr.errcat.derived
133
+ [syserr.errcat.nonvirtuals]: #syserr.errcat.nonvirtuals
134
+ [syserr.errcat.objects]: #syserr.errcat.objects
135
+ [syserr.errcat.overview]: #syserr.errcat.overview
136
+ [syserr.errcat.virtuals]: #syserr.errcat.virtuals
137
+ [syserr.errcode]: #syserr.errcode
138
+ [syserr.errcode.constructors]: #syserr.errcode.constructors
139
+ [syserr.errcode.modifiers]: #syserr.errcode.modifiers
140
+ [syserr.errcode.nonmembers]: #syserr.errcode.nonmembers
141
+ [syserr.errcode.observers]: #syserr.errcode.observers
142
+ [syserr.errcode.overview]: #syserr.errcode.overview
143
+ [syserr.errcondition]: #syserr.errcondition
144
+ [syserr.errcondition.constructors]: #syserr.errcondition.constructors
145
+ [syserr.errcondition.modifiers]: #syserr.errcondition.modifiers
146
+ [syserr.errcondition.nonmembers]: #syserr.errcondition.nonmembers
147
+ [syserr.errcondition.observers]: #syserr.errcondition.observers
148
+ [syserr.errcondition.overview]: #syserr.errcondition.overview
149
+ [syserr.general]: #syserr.general
150
+ [syserr.hash]: #syserr.hash
151
+ [syserr.syserr]: #syserr.syserr
152
+ [syserr.syserr.members]: #syserr.syserr.members
153
+ [syserr.syserr.overview]: #syserr.syserr.overview
154
+ [system.error.syn]: #system.error.syn
155
+ [term.replaceable.function]: dcl.md#term.replaceable.function
156
+ [underflow.error]: #underflow.error
157
+ [unord.hash]: utilities.md#unord.hash