hc
2023-11-06 15ade055295d13f95d49e3d99b09f3bbfb4a43e7
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2021 Free Software Foundation, Inc.
 
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "Free Software" and "Free Software Needs
Free Documentation", with the Front-Cover Texts being "A GNU Manual,"
and with the Back-Cover Texts as in (a) below.
 
(a) The FSF's Back-Cover Text is: "You are free to copy and modify
this GNU Manual.  Buying copies from GNU Press supports the FSF in
developing GNU and promoting software freedom." -->
<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ -->
<head>
<title>Debugging with GDB: Static Probe Points</title>
 
<meta name="description" content="Debugging with GDB: Static Probe Points">
<meta name="keywords" content="Debugging with GDB: Static Probe Points">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Breakpoints.html#Breakpoints" rel="up" title="Breakpoints">
<link href="Error-in-Breakpoints.html#Error-in-Breakpoints" rel="next" title="Error in Breakpoints">
<link href="Save-Breakpoints.html#Save-Breakpoints" rel="previous" title="Save Breakpoints">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>
 
 
</head>
 
<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Static-Probe-Points"></a>
<div class="header">
<p>
Next: <a href="Error-in-Breakpoints.html#Error-in-Breakpoints" accesskey="n" rel="next">Error in Breakpoints</a>, Previous: <a href="Save-Breakpoints.html#Save-Breakpoints" accesskey="p" rel="previous">Save Breakpoints</a>, Up: <a href="Breakpoints.html#Breakpoints" accesskey="u" rel="up">Breakpoints</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Static-Probe-Points-1"></a>
<h4 class="subsection">5.1.10 Static Probe Points</h4>
 
<a name="index-static-probe-point_002c-SystemTap"></a>
<a name="index-static-probe-point_002c-DTrace"></a>
<p><small>GDB</small> supports <em>SDT</em> probes in the code.  <acronym>SDT</acronym> stands
for Statically Defined Tracing, and the probes are designed to have a tiny
runtime code and data footprint, and no dynamic relocations.
</p>
<p>Currently, the following types of probes are supported on
ELF-compatible systems:
</p>
<ul>
<li> <code>SystemTap</code> (<a href="http://sourceware.org/systemtap/">http://sourceware.org/systemtap/</a>)
<acronym>SDT</acronym> probes<a name="DOCF5" href="#FOOT5"><sup>5</sup></a>.  <code>SystemTap</code> probes are usable
from assembly, C and C<tt>++</tt> languages<a name="DOCF6" href="#FOOT6"><sup>6</sup></a>.  
 
</li><li> <code>DTrace</code> (<a href="http://oss.oracle.com/projects/DTrace">http://oss.oracle.com/projects/DTrace</a>)
<acronym>USDT</acronym> probes.  <code>DTrace</code> probes are usable from C and
C<tt>++</tt> languages.
</li></ul>
 
<a name="index-semaphores-on-static-probe-points"></a>
<p>Some <code>SystemTap</code> probes have an associated semaphore variable;
for instance, this happens automatically if you defined your probe
using a DTrace-style <samp>.d</samp> file.  If your probe has a semaphore,
<small>GDB</small> will automatically enable it when you specify a
breakpoint using the &lsquo;<samp>-probe-stap</samp>&rsquo; notation.  But, if you put a
breakpoint at a probe&rsquo;s location by some other method (e.g.,
<code>break file:line</code>), then <small>GDB</small> will not automatically set
the semaphore.  <code>DTrace</code> probes do not support semaphores.
</p>
<p>You can examine the available static static probes using <code>info
probes</code>, with optional arguments:
</p>
<dl compact="compact">
<dd><a name="index-info-probes"></a>
</dd>
<dt><code>info probes <span class="roman">[</span><var>type</var><span class="roman">]</span> <span class="roman">[</span><var>provider</var> <span class="roman">[</span><var>name</var> <span class="roman">[</span><var>objfile</var><span class="roman">]</span><span class="roman">]</span><span class="roman">]</span></code></dt>
<dd><p>If given, <var>type</var> is either <code>stap</code> for listing
<code>SystemTap</code> probes or <code>dtrace</code> for listing <code>DTrace</code>
probes.  If omitted all probes are listed regardless of their types.
</p>
<p>If given, <var>provider</var> is a regular expression used to match against provider
names when selecting which probes to list.  If omitted, probes by all
probes from all providers are listed.
</p>
<p>If given, <var>name</var> is a regular expression to match against probe names
when selecting which probes to list.  If omitted, probe names are not
considered when deciding whether to display them.
</p>
<p>If given, <var>objfile</var> is a regular expression used to select which
object files (executable or shared libraries) to examine.  If not
given, all object files are considered.
</p>
</dd>
<dt><code>info probes all</code></dt>
<dd><p>List the available static probes, from all types.
</p></dd>
</dl>
 
<a name="index-enabling-and-disabling-probes"></a>
<p>Some probe points can be enabled and/or disabled.  The effect of
enabling or disabling a probe depends on the type of probe being
handled.  Some <code>DTrace</code> probes can be enabled or
disabled, but <code>SystemTap</code> probes cannot be disabled.
</p>
<p>You can enable (or disable) one or more probes using the following
commands, with optional arguments:
</p>
<dl compact="compact">
<dd><a name="index-enable-probes"></a>
</dd>
<dt><code>enable probes <span class="roman">[</span><var>provider</var> <span class="roman">[</span><var>name</var> <span class="roman">[</span><var>objfile</var><span class="roman">]</span><span class="roman">]</span><span class="roman">]</span></code></dt>
<dd><p>If given, <var>provider</var> is a regular expression used to match against
provider names when selecting which probes to enable.  If omitted,
all probes from all providers are enabled.
</p>
<p>If given, <var>name</var> is a regular expression to match against probe
names when selecting which probes to enable.  If omitted, probe names
are not considered when deciding whether to enable them.
</p>
<p>If given, <var>objfile</var> is a regular expression used to select which
object files (executable or shared libraries) to examine.  If not
given, all object files are considered.
</p>
<a name="index-disable-probes"></a>
</dd>
<dt><code>disable probes <span class="roman">[</span><var>provider</var> <span class="roman">[</span><var>name</var> <span class="roman">[</span><var>objfile</var><span class="roman">]</span><span class="roman">]</span><span class="roman">]</span></code></dt>
<dd><p>See the <code>enable probes</code> command above for a description of the
optional arguments accepted by this command.
</p></dd>
</dl>
 
<a name="index-_0024_005fprobe_005farg_002c-convenience-variable"></a>
<p>A probe may specify up to twelve arguments.  These are available at the
point at which the probe is defined&mdash;that is, when the current PC is
at the probe&rsquo;s location.  The arguments are available using the
convenience variables (see <a href="Convenience-Vars.html#Convenience-Vars">Convenience Vars</a>)
<code>$_probe_arg0</code>&hellip;<code>$_probe_arg11</code>.  In <code>SystemTap</code>
probes each probe argument is an integer of the appropriate size;
types are not preserved.  In <code>DTrace</code> probes types are preserved
provided that they are recognized as such by <small>GDB</small>; otherwise
the value of the probe argument will be a long integer.  The
convenience variable <code>$_probe_argc</code> holds the number of arguments
at the current probe point.
</p>
<p>These variables are always available, but attempts to access them at
any location other than a probe point will cause <small>GDB</small> to give
an error message.
</p>
 
<div class="footnote">
<hr>
<h4 class="footnotes-heading">Footnotes</h4>
 
<h3><a name="FOOT5" href="#DOCF5">(5)</a></h3>
<p>See
<a href="http://sourceware.org/systemtap/wiki/AddingUserSpaceProbingToApps">http://sourceware.org/systemtap/wiki/AddingUserSpaceProbingToApps</a>
for more information on how to add <code>SystemTap</code> <acronym>SDT</acronym>
probes in your applications.</p>
<h3><a name="FOOT6" href="#DOCF6">(6)</a></h3>
<p>See
<a href="http://sourceware.org/systemtap/wiki/UserSpaceProbeImplementation">http://sourceware.org/systemtap/wiki/UserSpaceProbeImplementation</a>
for a good reference on how the <acronym>SDT</acronym> probes are implemented.</p>
</div>
<hr>
<div class="header">
<p>
Next: <a href="Error-in-Breakpoints.html#Error-in-Breakpoints" accesskey="n" rel="next">Error in Breakpoints</a>, Previous: <a href="Save-Breakpoints.html#Save-Breakpoints" accesskey="p" rel="previous">Save Breakpoints</a>, Up: <a href="Breakpoints.html#Breakpoints" accesskey="u" rel="up">Breakpoints</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
</div>
 
 
 
</body>
</html>