blob: 8972aa547a2aba4ed9a8fb79afba130d5d19f830 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2015 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.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>Debugging with GDB: GDB/MI Tracepoint Commands</title>
<meta name="description" content="Debugging with GDB: GDB/MI Tracepoint Commands">
<meta name="keywords" content="Debugging with GDB: GDB/MI Tracepoint Commands">
<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="GDB_002fMI.html#GDB_002fMI" rel="up" title="GDB/MI">
<link href="GDB_002fMI-Symbol-Query.html#GDB_002fMI-Symbol-Query" rel="next" title="GDB/MI Symbol Query">
<link href="GDB_002fMI-Data-Manipulation.html#GDB_002fMI-Data-Manipulation" rel="prev" title="GDB/MI Data Manipulation">
<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="GDB_002fMI-Tracepoint-Commands"></a>
<div class="header">
<p>
Next: <a href="GDB_002fMI-Symbol-Query.html#GDB_002fMI-Symbol-Query" accesskey="n" rel="next">GDB/MI Symbol Query</a>, Previous: <a href="GDB_002fMI-Data-Manipulation.html#GDB_002fMI-Data-Manipulation" accesskey="p" rel="prev">GDB/MI Data Manipulation</a>, Up: <a href="GDB_002fMI.html#GDB_002fMI" accesskey="u" rel="up">GDB/MI</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="GDB_002fMI-Tracepoint-Commands-1"></a>
<h3 class="section">27.17 <small>GDB/MI</small> Tracepoint Commands</h3>
<p>The commands defined in this section implement MI support for
tracepoints. For detailed introduction, see <a href="Tracepoints.html#Tracepoints">Tracepoints</a>.
</p>
<a name="The-_002dtrace_002dfind-Command"></a>
<h4 class="subheading">The <code>-trace-find</code> Command</h4>
<a name="index-_002dtrace_002dfind"></a>
<a name="Synopsis-68"></a>
<h4 class="subsubheading">Synopsis</h4>
<div class="smallexample">
<pre class="smallexample"> -trace-find <var>mode</var> [<var>parameters</var>&hellip;]
</pre></div>
<p>Find a trace frame using criteria defined by <var>mode</var> and
<var>parameters</var>. The following table lists permissible
modes and their parameters. For details of operation, see <a href="tfind.html#tfind">tfind</a>.
</p>
<dl compact="compact">
<dt>&lsquo;<samp>none</samp>&rsquo;</dt>
<dd><p>No parameters are required. Stops examining trace frames.
</p>
</dd>
<dt>&lsquo;<samp>frame-number</samp>&rsquo;</dt>
<dd><p>An integer is required as parameter. Selects tracepoint frame with
that index.
</p>
</dd>
<dt>&lsquo;<samp>tracepoint-number</samp>&rsquo;</dt>
<dd><p>An integer is required as parameter. Finds next
trace frame that corresponds to tracepoint with the specified number.
</p>
</dd>
<dt>&lsquo;<samp>pc</samp>&rsquo;</dt>
<dd><p>An address is required as parameter. Finds
next trace frame that corresponds to any tracepoint at the specified
address.
</p>
</dd>
<dt>&lsquo;<samp>pc-inside-range</samp>&rsquo;</dt>
<dd><p>Two addresses are required as parameters. Finds next trace
frame that corresponds to a tracepoint at an address inside the
specified range. Both bounds are considered to be inside the range.
</p>
</dd>
<dt>&lsquo;<samp>pc-outside-range</samp>&rsquo;</dt>
<dd><p>Two addresses are required as parameters. Finds
next trace frame that corresponds to a tracepoint at an address outside
the specified range. Both bounds are considered to be inside the range.
</p>
</dd>
<dt>&lsquo;<samp>line</samp>&rsquo;</dt>
<dd><p>Line specification is required as parameter. See <a href="Specify-Location.html#Specify-Location">Specify Location</a>.
Finds next trace frame that corresponds to a tracepoint at
the specified location.
</p>
</dd>
</dl>
<p>If &lsquo;<samp>none</samp>&rsquo; was passed as <var>mode</var>, the response does not
have fields. Otherwise, the response may have the following fields:
</p>
<dl compact="compact">
<dt>&lsquo;<samp>found</samp>&rsquo;</dt>
<dd><p>This field has either &lsquo;<samp>0</samp>&rsquo; or &lsquo;<samp>1</samp>&rsquo; as the value, depending
on whether a matching tracepoint was found.
</p>
</dd>
<dt>&lsquo;<samp>traceframe</samp>&rsquo;</dt>
<dd><p>The index of the found traceframe. This field is present iff
the &lsquo;<samp>found</samp>&rsquo; field has value of &lsquo;<samp>1</samp>&rsquo;.
</p>
</dd>
<dt>&lsquo;<samp>tracepoint</samp>&rsquo;</dt>
<dd><p>The index of the found tracepoint. This field is present iff
the &lsquo;<samp>found</samp>&rsquo; field has value of &lsquo;<samp>1</samp>&rsquo;.
</p>
</dd>
<dt>&lsquo;<samp>frame</samp>&rsquo;</dt>
<dd><p>The information about the frame corresponding to the found trace
frame. This field is present only if a trace frame was found.
See <a href="GDB_002fMI-Frame-Information.html#GDB_002fMI-Frame-Information">GDB/MI Frame Information</a>, for description of this field.
</p>
</dd>
</dl>
<a name="GDB-Command-50"></a>
<h4 class="subsubheading"><small>GDB</small> Command</h4>
<p>The corresponding <small>GDB</small> command is &lsquo;<samp>tfind</samp>&rsquo;.
</p>
<a name="g_t_002dtrace_002ddefine_002dvariable"></a>
<h4 class="subheading">-trace-define-variable</h4>
<a name="index-_002dtrace_002ddefine_002dvariable"></a>
<a name="Synopsis-69"></a>
<h4 class="subsubheading">Synopsis</h4>
<div class="smallexample">
<pre class="smallexample"> -trace-define-variable <var>name</var> [ <var>value</var> ]
</pre></div>
<p>Create trace variable <var>name</var> if it does not exist. If
<var>value</var> is specified, sets the initial value of the specified
trace variable to that value. Note that the <var>name</var> should start
with the &lsquo;<samp>$</samp>&rsquo; character.
</p>
<a name="GDB-Command-51"></a>
<h4 class="subsubheading"><small>GDB</small> Command</h4>
<p>The corresponding <small>GDB</small> command is &lsquo;<samp>tvariable</samp>&rsquo;.
</p>
<a name="The-_002dtrace_002dframe_002dcollected-Command"></a>
<h4 class="subheading">The <code>-trace-frame-collected</code> Command</h4>
<a name="index-_002dtrace_002dframe_002dcollected"></a>
<a name="Synopsis-70"></a>
<h4 class="subsubheading">Synopsis</h4>
<div class="smallexample">
<pre class="smallexample"> -trace-frame-collected
[--var-print-values <var>var_pval</var>]
[--comp-print-values <var>comp_pval</var>]
[--registers-format <var>regformat</var>]
[--memory-contents]
</pre></div>
<p>This command returns the set of collected objects, register names,
trace state variable names, memory ranges and computed expressions
that have been collected at a particular trace frame. The optional
parameters to the command affect the output format in different ways.
See the output description table below for more details.
</p>
<p>The reported names can be used in the normal manner to create
varobjs and inspect the objects themselves. The items returned by
this command are categorized so that it is clear which is a variable,
which is a register, which is a trace state variable, which is a
memory range and which is a computed expression.
</p>
<p>For instance, if the actions were
</p><div class="smallexample">
<pre class="smallexample">collect myVar, myArray[myIndex], myObj.field, myPtr-&gt;field, myCount + 2
collect *(int*)0xaf02bef0@40
</pre></div>
<p>the object collected in its entirety would be <code>myVar</code>. The
object <code>myArray</code> would be partially collected, because only the
element at index <code>myIndex</code> would be collected. The remaining
objects would be computed expressions.
</p>
<p>An example output would be:
</p>
<div class="smallexample">
<pre class="smallexample">(gdb)
-trace-frame-collected
^done,
explicit-variables=[{name=&quot;myVar&quot;,value=&quot;1&quot;}],
computed-expressions=[{name=&quot;myArray[myIndex]&quot;,value=&quot;0&quot;},
{name=&quot;myObj.field&quot;,value=&quot;0&quot;},
{name=&quot;myPtr-&gt;field&quot;,value=&quot;1&quot;},
{name=&quot;myCount + 2&quot;,value=&quot;3&quot;},
{name=&quot;$tvar1 + 1&quot;,value=&quot;43970027&quot;}],
registers=[{number=&quot;0&quot;,value=&quot;0x7fe2c6e79ec8&quot;},
{number=&quot;1&quot;,value=&quot;0x0&quot;},
{number=&quot;2&quot;,value=&quot;0x4&quot;},
...
{number=&quot;125&quot;,value=&quot;0x0&quot;}],
tvars=[{name=&quot;$tvar1&quot;,current=&quot;43970026&quot;}],
memory=[{address=&quot;0x0000000000602264&quot;,length=&quot;4&quot;},
{address=&quot;0x0000000000615bc0&quot;,length=&quot;4&quot;}]
(gdb)
</pre></div>
<p>Where:
</p>
<dl compact="compact">
<dt><code>explicit-variables</code></dt>
<dd><p>The set of objects that have been collected in their entirety (as
opposed to collecting just a few elements of an array or a few struct
members). For each object, its name and value are printed.
The <code>--var-print-values</code> option affects how or whether the value
field is output. If <var>var_pval</var> is 0, then print only the names;
if it is 1, print also their values; and if it is 2, print the name,
type and value for simple data types, and the name and type for
arrays, structures and unions.
</p>
</dd>
<dt><code>computed-expressions</code></dt>
<dd><p>The set of computed expressions that have been collected at the
current trace frame. The <code>--comp-print-values</code> option affects
this set like the <code>--var-print-values</code> option affects the
<code>explicit-variables</code> set. See above.
</p>
</dd>
<dt><code>registers</code></dt>
<dd><p>The registers that have been collected at the current trace frame.
For each register collected, the name and current value are returned.
The value is formatted according to the <code>--registers-format</code>
option. See the <code>-data-list-register-values</code> command for a
list of the allowed formats. The default is &lsquo;<samp>x</samp>&rsquo;.
</p>
</dd>
<dt><code>tvars</code></dt>
<dd><p>The trace state variables that have been collected at the current
trace frame. For each trace state variable collected, the name and
current value are returned.
</p>
</dd>
<dt><code>memory</code></dt>
<dd><p>The set of memory ranges that have been collected at the current trace
frame. Its content is a list of tuples. Each tuple represents a
collected memory range and has the following fields:
</p>
<dl compact="compact">
<dt><code>address</code></dt>
<dd><p>The start address of the memory range, as hexadecimal literal.
</p>
</dd>
<dt><code>length</code></dt>
<dd><p>The length of the memory range, as decimal literal.
</p>
</dd>
<dt><code>contents</code></dt>
<dd><p>The contents of the memory block, in hex. This field is only present
if the <code>--memory-contents</code> option is specified.
</p>
</dd>
</dl>
</dd>
</dl>
<a name="GDB-Command-52"></a>
<h4 class="subsubheading"><small>GDB</small> Command</h4>
<p>There is no corresponding <small>GDB</small> command.
</p>
<a name="Example-56"></a>
<h4 class="subsubheading">Example</h4>
<a name="g_t_002dtrace_002dlist_002dvariables"></a>
<h4 class="subheading">-trace-list-variables</h4>
<a name="index-_002dtrace_002dlist_002dvariables"></a>
<a name="Synopsis-71"></a>
<h4 class="subsubheading">Synopsis</h4>
<div class="smallexample">
<pre class="smallexample"> -trace-list-variables
</pre></div>
<p>Return a table of all defined trace variables. Each element of the
table has the following fields:
</p>
<dl compact="compact">
<dt>&lsquo;<samp>name</samp>&rsquo;</dt>
<dd><p>The name of the trace variable. This field is always present.
</p>
</dd>
<dt>&lsquo;<samp>initial</samp>&rsquo;</dt>
<dd><p>The initial value. This is a 64-bit signed integer. This
field is always present.
</p>
</dd>
<dt>&lsquo;<samp>current</samp>&rsquo;</dt>
<dd><p>The value the trace variable has at the moment. This is a 64-bit
signed integer. This field is absent iff current value is
not defined, for example if the trace was never run, or is
presently running.
</p>
</dd>
</dl>
<a name="GDB-Command-53"></a>
<h4 class="subsubheading"><small>GDB</small> Command</h4>
<p>The corresponding <small>GDB</small> command is &lsquo;<samp>tvariables</samp>&rsquo;.
</p>
<a name="Example-57"></a>
<h4 class="subsubheading">Example</h4>
<div class="smallexample">
<pre class="smallexample">(gdb)
-trace-list-variables
^done,trace-variables={nr_rows=&quot;1&quot;,nr_cols=&quot;3&quot;,
hdr=[{width=&quot;15&quot;,alignment=&quot;-1&quot;,col_name=&quot;name&quot;,colhdr=&quot;Name&quot;},
{width=&quot;11&quot;,alignment=&quot;-1&quot;,col_name=&quot;initial&quot;,colhdr=&quot;Initial&quot;},
{width=&quot;11&quot;,alignment=&quot;-1&quot;,col_name=&quot;current&quot;,colhdr=&quot;Current&quot;}],
body=[variable={name=&quot;$trace_timestamp&quot;,initial=&quot;0&quot;}
variable={name=&quot;$foo&quot;,initial=&quot;10&quot;,current=&quot;15&quot;}]}
(gdb)
</pre></div>
<a name="g_t_002dtrace_002dsave"></a>
<h4 class="subheading">-trace-save</h4>
<a name="index-_002dtrace_002dsave"></a>
<a name="Synopsis-72"></a>
<h4 class="subsubheading">Synopsis</h4>
<div class="smallexample">
<pre class="smallexample"> -trace-save [-r ] <var>filename</var>
</pre></div>
<p>Saves the collected trace data to <var>filename</var>. Without the
&lsquo;<samp>-r</samp>&rsquo; option, the data is downloaded from the target and saved
in a local file. With the &lsquo;<samp>-r</samp>&rsquo; option the target is asked
to perform the save.
</p>
<a name="GDB-Command-54"></a>
<h4 class="subsubheading"><small>GDB</small> Command</h4>
<p>The corresponding <small>GDB</small> command is &lsquo;<samp>tsave</samp>&rsquo;.
</p>
<a name="g_t_002dtrace_002dstart"></a>
<h4 class="subheading">-trace-start</h4>
<a name="index-_002dtrace_002dstart"></a>
<a name="Synopsis-73"></a>
<h4 class="subsubheading">Synopsis</h4>
<div class="smallexample">
<pre class="smallexample"> -trace-start
</pre></div>
<p>Starts a tracing experiments. The result of this command does not
have any fields.
</p>
<a name="GDB-Command-55"></a>
<h4 class="subsubheading"><small>GDB</small> Command</h4>
<p>The corresponding <small>GDB</small> command is &lsquo;<samp>tstart</samp>&rsquo;.
</p>
<a name="g_t_002dtrace_002dstatus"></a>
<h4 class="subheading">-trace-status</h4>
<a name="index-_002dtrace_002dstatus"></a>
<a name="Synopsis-74"></a>
<h4 class="subsubheading">Synopsis</h4>
<div class="smallexample">
<pre class="smallexample"> -trace-status
</pre></div>
<p>Obtains the status of a tracing experiment. The result may include
the following fields:
</p>
<dl compact="compact">
<dt>&lsquo;<samp>supported</samp>&rsquo;</dt>
<dd><p>May have a value of either &lsquo;<samp>0</samp>&rsquo;, when no tracing operations are
supported, &lsquo;<samp>1</samp>&rsquo;, when all tracing operations are supported, or
&lsquo;<samp>file</samp>&rsquo; when examining trace file. In the latter case, examining
of trace frame is possible but new tracing experiement cannot be
started. This field is always present.
</p>
</dd>
<dt>&lsquo;<samp>running</samp>&rsquo;</dt>
<dd><p>May have a value of either &lsquo;<samp>0</samp>&rsquo; or &lsquo;<samp>1</samp>&rsquo; depending on whether
tracing experiement is in progress on target. This field is present
if &lsquo;<samp>supported</samp>&rsquo; field is not &lsquo;<samp>0</samp>&rsquo;.
</p>
</dd>
<dt>&lsquo;<samp>stop-reason</samp>&rsquo;</dt>
<dd><p>Report the reason why the tracing was stopped last time. This field
may be absent iff tracing was never stopped on target yet. The
value of &lsquo;<samp>request</samp>&rsquo; means the tracing was stopped as result of
the <code>-trace-stop</code> command. The value of &lsquo;<samp>overflow</samp>&rsquo; means
the tracing buffer is full. The value of &lsquo;<samp>disconnection</samp>&rsquo; means
tracing was automatically stopped when <small>GDB</small> has disconnected.
The value of &lsquo;<samp>passcount</samp>&rsquo; means tracing was stopped when a
tracepoint was passed a maximal number of times for that tracepoint.
This field is present if &lsquo;<samp>supported</samp>&rsquo; field is not &lsquo;<samp>0</samp>&rsquo;.
</p>
</dd>
<dt>&lsquo;<samp>stopping-tracepoint</samp>&rsquo;</dt>
<dd><p>The number of tracepoint whose passcount as exceeded. This field is
present iff the &lsquo;<samp>stop-reason</samp>&rsquo; field has the value of
&lsquo;<samp>passcount</samp>&rsquo;.
</p>
</dd>
<dt>&lsquo;<samp>frames</samp>&rsquo;</dt>
<dt>&lsquo;<samp>frames-created</samp>&rsquo;</dt>
<dd><p>The &lsquo;<samp>frames</samp>&rsquo; field is a count of the total number of trace frames
in the trace buffer, while &lsquo;<samp>frames-created</samp>&rsquo; is the total created
during the run, including ones that were discarded, such as when a
circular trace buffer filled up. Both fields are optional.
</p>
</dd>
<dt>&lsquo;<samp>buffer-size</samp>&rsquo;</dt>
<dt>&lsquo;<samp>buffer-free</samp>&rsquo;</dt>
<dd><p>These fields tell the current size of the tracing buffer and the
remaining space. These fields are optional.
</p>
</dd>
<dt>&lsquo;<samp>circular</samp>&rsquo;</dt>
<dd><p>The value of the circular trace buffer flag. <code>1</code> means that the
trace buffer is circular and old trace frames will be discarded if
necessary to make room, <code>0</code> means that the trace buffer is linear
and may fill up.
</p>
</dd>
<dt>&lsquo;<samp>disconnected</samp>&rsquo;</dt>
<dd><p>The value of the disconnected tracing flag. <code>1</code> means that
tracing will continue after <small>GDB</small> disconnects, <code>0</code> means
that the trace run will stop.
</p>
</dd>
<dt>&lsquo;<samp>trace-file</samp>&rsquo;</dt>
<dd><p>The filename of the trace file being examined. This field is
optional, and only present when examining a trace file.
</p>
</dd>
</dl>
<a name="GDB-Command-56"></a>
<h4 class="subsubheading"><small>GDB</small> Command</h4>
<p>The corresponding <small>GDB</small> command is &lsquo;<samp>tstatus</samp>&rsquo;.
</p>
<a name="g_t_002dtrace_002dstop"></a>
<h4 class="subheading">-trace-stop</h4>
<a name="index-_002dtrace_002dstop"></a>
<a name="Synopsis-75"></a>
<h4 class="subsubheading">Synopsis</h4>
<div class="smallexample">
<pre class="smallexample"> -trace-stop
</pre></div>
<p>Stops a tracing experiment. The result of this command has the same
fields as <code>-trace-status</code>, except that the &lsquo;<samp>supported</samp>&rsquo; and
&lsquo;<samp>running</samp>&rsquo; fields are not output.
</p>
<a name="GDB-Command-57"></a>
<h4 class="subsubheading"><small>GDB</small> Command</h4>
<p>The corresponding <small>GDB</small> command is &lsquo;<samp>tstop</samp>&rsquo;.
</p>
<hr>
<div class="header">
<p>
Next: <a href="GDB_002fMI-Symbol-Query.html#GDB_002fMI-Symbol-Query" accesskey="n" rel="next">GDB/MI Symbol Query</a>, Previous: <a href="GDB_002fMI-Data-Manipulation.html#GDB_002fMI-Data-Manipulation" accesskey="p" rel="prev">GDB/MI Data Manipulation</a>, Up: <a href="GDB_002fMI.html#GDB_002fMI" accesskey="u" rel="up">GDB/MI</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>