You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
5830 lines
192 KiB
HTML
5830 lines
192 KiB
HTML
15 years ago
|
<HTML>
|
||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||
|
<!-- Created on March, 27 2008 by texi2html 1.64 -->
|
||
|
<!--
|
||
|
Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
|
||
|
Karl Berry <karl@freefriends.org>
|
||
|
Olaf Bachmann <obachman@mathematik.uni-kl.de>
|
||
|
and many others.
|
||
|
Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
|
||
|
Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
|
||
|
|
||
|
-->
|
||
|
<HEAD>
|
||
|
<TITLE>Debugging with GDB: GDB/MI</TITLE>
|
||
|
|
||
|
<META NAME="description" CONTENT="Debugging with GDB: GDB/MI">
|
||
|
<META NAME="keywords" CONTENT="Debugging with GDB: GDB/MI">
|
||
|
<META NAME="resource-type" CONTENT="document">
|
||
|
<META NAME="distribution" CONTENT="global">
|
||
|
<META NAME="Generator" CONTENT="texi2html 1.64">
|
||
|
|
||
|
</HEAD>
|
||
|
|
||
|
<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
|
||
|
|
||
|
<A NAME="SEC242"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_24.html#SEC241"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC243"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_4.html#SEC14"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_26.html#SEC646"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H1> 24. The GDB/MI Interface </H1>
|
||
|
<!--docid::SEC242::-->
|
||
|
<P>
|
||
|
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC243"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC244"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H2> Function and Purpose </H2>
|
||
|
<!--docid::SEC243::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="IDX1258"></A>
|
||
|
GDB/MI is a line based machine oriented text interface to
|
||
|
GDB and is activated by specifying using the
|
||
|
<SAMP>`--interpreter'</SAMP> command line option (see section <A HREF="gdb_3.html#SEC9">2.1.2 Choosing Modes</A>). It
|
||
|
is specifically intended to support the development of systems which
|
||
|
use the debugger as just one small component of a larger system.
|
||
|
</P><P>
|
||
|
|
||
|
This chapter is a specification of the GDB/MI interface. It is written
|
||
|
in the form of a reference manual.
|
||
|
</P><P>
|
||
|
|
||
|
Note that GDB/MI is still under construction, so some of the
|
||
|
features described below are incomplete and subject to change
|
||
|
(see section <A HREF="gdb_25.html#SEC249">GDB/MI Development and Front Ends</A>).
|
||
|
</P><P>
|
||
|
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC244"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC243"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC245"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H2> Notation and Terminology </H2>
|
||
|
<!--docid::SEC244::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="IDX1259"></A>
|
||
|
This chapter uses the following notation:
|
||
|
</P><P>
|
||
|
|
||
|
<UL>
|
||
|
<LI>
|
||
|
<CODE>|</CODE> separates two alternatives.
|
||
|
<P>
|
||
|
|
||
|
<LI>
|
||
|
<CODE>[ <VAR>something</VAR> ]</CODE> indicates that <VAR>something</VAR> is optional:
|
||
|
it may or may not be given.
|
||
|
<P>
|
||
|
|
||
|
<LI>
|
||
|
<CODE>( <VAR>group</VAR> )*</CODE> means that <VAR>group</VAR> inside the parentheses
|
||
|
may repeat zero or more times.
|
||
|
<P>
|
||
|
|
||
|
<LI>
|
||
|
<CODE>( <VAR>group</VAR> )+</CODE> means that <VAR>group</VAR> inside the parentheses
|
||
|
may repeat one or more times.
|
||
|
<P>
|
||
|
|
||
|
<LI>
|
||
|
<CODE>"<VAR>string</VAR>"</CODE> means a literal <VAR>string</VAR>.
|
||
|
</UL>
|
||
|
<P>
|
||
|
|
||
|
<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC245">24.1 GDB/MI Command Syntax</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC248">24.2 GDB/MI Compatibility with CLI</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC249">24.3 GDB/MI Development and Front Ends</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC250">24.4 GDB/MI Output Records</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC254">24.5 Simple Examples of GDB/MI Interaction</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC259">24.6 GDB/MI Command Description Format</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC267">24.7 GDB/MI Breakpoint Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC305">24.8 GDB/MI Program Context</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC330">24.9 GDB/MI Thread Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC347">24.10 GDB/MI Program Execution</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC388">24.11 GDB/MI Stack Manipulation Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC413">24.12 GDB/MI Variable Objects</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC449">24.13 GDB/MI Data Manipulation</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC475">24.14 GDB/MI Tracepoint Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC476">24.15 GDB/MI Symbol Query Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC521">24.16 GDB/MI File Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC554">24.17 GDB/MI Target Manipulation Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC595">24.18 GDB/MI File Transfer Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC608">24.19 Miscellaneous GDB/MI Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
</TABLE></BLOCKQUOTE>
|
||
|
<P>
|
||
|
|
||
|
<A NAME="GDB/MI Command Syntax"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC245"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC244"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC246"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC248"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H2> 24.1 GDB/MI Command Syntax </H2>
|
||
|
<!--docid::SEC245::-->
|
||
|
<P>
|
||
|
|
||
|
<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC246">24.1.1 GDB/MI Input Syntax</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC247">24.1.2 GDB/MI Output Syntax</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
</TABLE></BLOCKQUOTE>
|
||
|
<P>
|
||
|
|
||
|
<A NAME="GDB/MI Input Syntax"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC246"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC245"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC247"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC245"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC248"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H3> 24.1.1 GDB/MI Input Syntax </H3>
|
||
|
<!--docid::SEC246::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="IDX1260"></A>
|
||
|
<A NAME="IDX1261"></A>
|
||
|
<DL COMPACT>
|
||
|
<DT><CODE><VAR>command</VAR> ==></CODE>
|
||
|
<DD><CODE><VAR>cli-command</VAR> | <VAR>mi-command</VAR></CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>cli-command</VAR> ==></CODE>
|
||
|
<DD><CODE>[ <VAR>token</VAR> ] <VAR>cli-command</VAR> <VAR>nl</VAR></CODE>, where
|
||
|
<VAR>cli-command</VAR> is any existing GDB CLI command.
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>mi-command</VAR> ==></CODE>
|
||
|
<DD><CODE>[ <VAR>token</VAR> ] "-" <VAR>operation</VAR> ( " " <VAR>option</VAR> )*
|
||
|
<CODE>[</CODE> " --" <CODE>]</CODE> ( " " <VAR>parameter</VAR> )* <VAR>nl</VAR></CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>token</VAR> ==></CODE>
|
||
|
<DD>"any sequence of digits"
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>option</VAR> ==></CODE>
|
||
|
<DD><CODE>"-" <VAR>parameter</VAR> [ " " <VAR>parameter</VAR> ]</CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>parameter</VAR> ==></CODE>
|
||
|
<DD><CODE><VAR>non-blank-sequence</VAR> | <VAR>c-string</VAR></CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>operation</VAR> ==></CODE>
|
||
|
<DD><EM>any of the operations described in this chapter</EM>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>non-blank-sequence</VAR> ==></CODE>
|
||
|
<DD><EM>anything, provided it doesn't contain special characters such as
|
||
|
"-", <VAR>nl</VAR>, """ and of course " "</EM>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>c-string</VAR> ==></CODE>
|
||
|
<DD><CODE>""" <VAR>seven-bit-iso-c-string-content</VAR> """</CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>nl</VAR> ==></CODE>
|
||
|
<DD><CODE>CR | CR-LF</CODE>
|
||
|
</DL>
|
||
|
<P>
|
||
|
|
||
|
Notes:
|
||
|
</P><P>
|
||
|
|
||
|
<UL>
|
||
|
<LI>
|
||
|
The CLI commands are still handled by the MI interpreter; their
|
||
|
output is described below.
|
||
|
<P>
|
||
|
|
||
|
<LI>
|
||
|
The <CODE><VAR>token</VAR></CODE>, when present, is passed back when the command
|
||
|
finishes.
|
||
|
<P>
|
||
|
|
||
|
<LI>
|
||
|
Some MI commands accept optional arguments as part of the parameter
|
||
|
list. Each option is identified by a leading <SAMP>`-'</SAMP> (dash) and may be
|
||
|
followed by an optional argument parameter. Options occur first in the
|
||
|
parameter list and can be delimited from normal parameters using
|
||
|
<SAMP>`--'</SAMP> (this is useful when some parameters begin with a dash).
|
||
|
</UL>
|
||
|
<P>
|
||
|
|
||
|
Pragmatics:
|
||
|
</P><P>
|
||
|
|
||
|
<UL>
|
||
|
<LI>
|
||
|
We want easy access to the existing CLI syntax (for debugging).
|
||
|
<P>
|
||
|
|
||
|
<LI>
|
||
|
We want it to be easy to spot a MI operation.
|
||
|
</UL>
|
||
|
<P>
|
||
|
|
||
|
<A NAME="GDB/MI Output Syntax"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC247"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC246"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC248"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC245"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC248"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H3> 24.1.2 GDB/MI Output Syntax </H3>
|
||
|
<!--docid::SEC247::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="IDX1262"></A>
|
||
|
<A NAME="IDX1263"></A>
|
||
|
The output from GDB/MI consists of zero or more out-of-band records
|
||
|
followed, optionally, by a single result record. This result record
|
||
|
is for the most recent command. The sequence of output records is
|
||
|
terminated by <SAMP>`(gdb)'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
If an input command was prefixed with a <CODE><VAR>token</VAR></CODE> then the
|
||
|
corresponding output for that command will also be prefixed by that same
|
||
|
<VAR>token</VAR>.
|
||
|
</P><P>
|
||
|
|
||
|
<DL COMPACT>
|
||
|
<DT><CODE><VAR>output</VAR> ==></CODE>
|
||
|
<DD><CODE>( <VAR>out-of-band-record</VAR> )* [ <VAR>result-record</VAR> ] "(gdb)" <VAR>nl</VAR></CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>result-record</VAR> ==></CODE>
|
||
|
<DD><CODE> [ <VAR>token</VAR> ] "^" <VAR>result-class</VAR> ( "," <VAR>result</VAR> )* <VAR>nl</VAR></CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>out-of-band-record</VAR> ==></CODE>
|
||
|
<DD><CODE><VAR>async-record</VAR> | <VAR>stream-record</VAR></CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>async-record</VAR> ==></CODE>
|
||
|
<DD><CODE><VAR>exec-async-output</VAR> | <VAR>status-async-output</VAR> | <VAR>notify-async-output</VAR></CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>exec-async-output</VAR> ==></CODE>
|
||
|
<DD><CODE>[ <VAR>token</VAR> ] "*" <VAR>async-output</VAR></CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>status-async-output</VAR> ==></CODE>
|
||
|
<DD><CODE>[ <VAR>token</VAR> ] "+" <VAR>async-output</VAR></CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>notify-async-output</VAR> ==></CODE>
|
||
|
<DD><CODE>[ <VAR>token</VAR> ] "=" <VAR>async-output</VAR></CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>async-output</VAR> ==></CODE>
|
||
|
<DD><CODE><VAR>async-class</VAR> ( "," <VAR>result</VAR> )* <VAR>nl</VAR></CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>result-class</VAR> ==></CODE>
|
||
|
<DD><CODE>"done" | "running" | "connected" | "error" | "exit"</CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>async-class</VAR> ==></CODE>
|
||
|
<DD><CODE>"stopped" | <VAR>others</VAR></CODE> (where <VAR>others</VAR> will be added
|
||
|
depending on the needs--this is still in development).
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>result</VAR> ==></CODE>
|
||
|
<DD><CODE> <VAR>variable</VAR> "=" <VAR>value</VAR></CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>variable</VAR> ==></CODE>
|
||
|
<DD><CODE> <VAR>string</VAR> </CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>value</VAR> ==></CODE>
|
||
|
<DD><CODE> <VAR>const</VAR> | <VAR>tuple</VAR> | <VAR>list</VAR> </CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>const</VAR> ==></CODE>
|
||
|
<DD><CODE><VAR>c-string</VAR></CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>tuple</VAR> ==></CODE>
|
||
|
<DD><CODE> "{}" | "{" <VAR>result</VAR> ( "," <VAR>result</VAR> )* "}" </CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>list</VAR> ==></CODE>
|
||
|
<DD><CODE> "[]" | "[" <VAR>value</VAR> ( "," <VAR>value</VAR> )* "]" | "["
|
||
|
<VAR>result</VAR> ( "," <VAR>result</VAR> )* "]" </CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>stream-record</VAR> ==></CODE>
|
||
|
<DD><CODE><VAR>console-stream-output</VAR> | <VAR>target-stream-output</VAR> | <VAR>log-stream-output</VAR></CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>console-stream-output</VAR> ==></CODE>
|
||
|
<DD><CODE>"~" <VAR>c-string</VAR></CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>target-stream-output</VAR> ==></CODE>
|
||
|
<DD><CODE>"@" <VAR>c-string</VAR></CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>log-stream-output</VAR> ==></CODE>
|
||
|
<DD><CODE>"&" <VAR>c-string</VAR></CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>nl</VAR> ==></CODE>
|
||
|
<DD><CODE>CR | CR-LF</CODE>
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE><VAR>token</VAR> ==></CODE>
|
||
|
<DD><EM>any sequence of digits</EM>.
|
||
|
</DL>
|
||
|
<P>
|
||
|
|
||
|
Notes:
|
||
|
</P><P>
|
||
|
|
||
|
<UL>
|
||
|
<LI>
|
||
|
All output sequences end in a single line containing a period.
|
||
|
<P>
|
||
|
|
||
|
<LI>
|
||
|
The <CODE><VAR>token</VAR></CODE> is from the corresponding request. If an execution
|
||
|
command is interrupted by the <SAMP>`-exec-interrupt'</SAMP> command, the
|
||
|
<VAR>token</VAR> associated with the <SAMP>`*stopped'</SAMP> message is the one of the
|
||
|
original execution command, not the one of the interrupt command.
|
||
|
<P>
|
||
|
|
||
|
<LI>
|
||
|
<A NAME="IDX1264"></A>
|
||
|
<VAR>status-async-output</VAR> contains on-going status information about the
|
||
|
progress of a slow operation. It can be discarded. All status output is
|
||
|
prefixed by <SAMP>`+'</SAMP>.
|
||
|
<P>
|
||
|
|
||
|
<LI>
|
||
|
<A NAME="IDX1265"></A>
|
||
|
<VAR>exec-async-output</VAR> contains asynchronous state change on the target
|
||
|
(stopped, started, disappeared). All async output is prefixed by
|
||
|
<SAMP>`*'</SAMP>.
|
||
|
<P>
|
||
|
|
||
|
<LI>
|
||
|
<A NAME="IDX1266"></A>
|
||
|
<VAR>notify-async-output</VAR> contains supplementary information that the
|
||
|
client should handle (e.g., a new breakpoint information). All notify
|
||
|
output is prefixed by <SAMP>`='</SAMP>.
|
||
|
<P>
|
||
|
|
||
|
<LI>
|
||
|
<A NAME="IDX1267"></A>
|
||
|
<VAR>console-stream-output</VAR> is output that should be displayed as is in the
|
||
|
console. It is the textual response to a CLI command. All the console
|
||
|
output is prefixed by <SAMP>`~'</SAMP>.
|
||
|
<P>
|
||
|
|
||
|
<LI>
|
||
|
<A NAME="IDX1268"></A>
|
||
|
<VAR>target-stream-output</VAR> is the output produced by the target program.
|
||
|
All the target output is prefixed by <SAMP>`@'</SAMP>.
|
||
|
<P>
|
||
|
|
||
|
<LI>
|
||
|
<A NAME="IDX1269"></A>
|
||
|
<VAR>log-stream-output</VAR> is output text coming from GDB's internals, for
|
||
|
instance messages that should be displayed as part of an error log. All
|
||
|
the log output is prefixed by <SAMP>`&'</SAMP>.
|
||
|
<P>
|
||
|
|
||
|
<LI>
|
||
|
<A NAME="IDX1270"></A>
|
||
|
New GDB/MI commands should only output <VAR>lists</VAR> containing
|
||
|
<VAR>values</VAR>.
|
||
|
<P>
|
||
|
|
||
|
</UL>
|
||
|
<P>
|
||
|
|
||
|
See section <A HREF="gdb_25.html#SEC252">GDB/MI Stream Records</A>, for more
|
||
|
details about the various output records.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="GDB/MI Compatibility with CLI"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC248"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC247"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC249"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC249"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_26.html#SEC646"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H2> 24.2 GDB/MI Compatibility with CLI </H2>
|
||
|
<!--docid::SEC248::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="IDX1271"></A>
|
||
|
<A NAME="IDX1272"></A>
|
||
|
</P><P>
|
||
|
|
||
|
For the developers convenience CLI commands can be entered directly,
|
||
|
but there may be some unexpected behaviour. For example, commands
|
||
|
that query the user will behave as if the user replied yes, breakpoint
|
||
|
command lists are not executed and some CLI commands, such as
|
||
|
<CODE>if</CODE>, <CODE>when</CODE> and <CODE>define</CODE>, prompt for further input with
|
||
|
<SAMP>`>'</SAMP>, which is not valid MI output.
|
||
|
</P><P>
|
||
|
|
||
|
This feature may be removed at some stage in the future and it is
|
||
|
recommended that front ends use the <CODE>-interpreter-exec</CODE> command
|
||
|
(see <A HREF="gdb_25.html#-interpreter-exec">-interpreter-exec</A>).
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="GDB/MI Development and Front Ends"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC249"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC248"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC250"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC250"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_26.html#SEC646"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H2> 24.3 GDB/MI Development and Front Ends </H2>
|
||
|
<!--docid::SEC249::-->
|
||
|
<P>
|
||
|
|
||
|
The application which takes the MI output and presents the state of the
|
||
|
program being debugged to the user is called a <EM>front end</EM>.
|
||
|
</P><P>
|
||
|
|
||
|
Although GDB/MI is still incomplete, it is currently being used
|
||
|
by a variety of front ends to GDB. This makes it difficult
|
||
|
to introduce new functionality without breaking existing usage. This
|
||
|
section tries to minimize the problems by describing how the protocol
|
||
|
might change.
|
||
|
</P><P>
|
||
|
|
||
|
Some changes in MI need not break a carefully designed front end, and
|
||
|
for these the MI version will remain unchanged. The following is a
|
||
|
list of changes that may occur within one level, so front ends should
|
||
|
parse MI output in a way that can handle them:
|
||
|
</P><P>
|
||
|
|
||
|
<UL>
|
||
|
<LI>
|
||
|
New MI commands may be added.
|
||
|
<P>
|
||
|
|
||
|
<LI>
|
||
|
New fields may be added to the output of any MI command.
|
||
|
<P>
|
||
|
|
||
|
<LI>
|
||
|
The range of values for fields with specified values, e.g.,
|
||
|
<CODE>in_scope</CODE> (see <A HREF="gdb_25.html#-var-update">-var-update</A>) may be extended.
|
||
|
<P>
|
||
|
|
||
|
</UL>
|
||
|
<P>
|
||
|
|
||
|
If the changes are likely to break front ends, the MI version level
|
||
|
will be increased by one. This will allow the front end to parse the
|
||
|
output according to the MI version. Apart from mi0, new versions of
|
||
|
GDB will not support old versions of MI and it will be the
|
||
|
responsibility of the front end to work with the new one.
|
||
|
</P><P>
|
||
|
|
||
|
The best way to avoid unexpected changes in MI that might break your front
|
||
|
end is to make your project known to GDB developers and
|
||
|
follow development on <A HREF="mailto:gdb@sourceware.org">gdb@sourceware.org</A> and
|
||
|
<A HREF="mailto:gdb-patches@sourceware.org">gdb-patches@sourceware.org</A>. There is also the mailing list
|
||
|
<A HREF="mailto:dmi-discuss@lists.freestandards.org">dmi-discuss@lists.freestandards.org</A>, hosted by the Free Standards
|
||
|
Group, which has the aim of creating a more general MI protocol
|
||
|
called Debugger Machine Interface (DMI) that will become a standard
|
||
|
for all debuggers, not just GDB.
|
||
|
<A NAME="IDX1273"></A>
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="GDB/MI Output Records"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC250"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC249"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC251"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC254"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC254"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H2> 24.4 GDB/MI Output Records </H2>
|
||
|
<!--docid::SEC250::-->
|
||
|
<P>
|
||
|
|
||
|
<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC251">24.4.1 GDB/MI Result Records</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC252">24.4.2 GDB/MI Stream Records</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_25.html#SEC253">24.4.3 GDB/MI Out-of-band Records</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
|
||
|
</TABLE></BLOCKQUOTE>
|
||
|
<P>
|
||
|
|
||
|
<A NAME="GDB/MI Result Records"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC251"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC250"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC252"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC254"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC250"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC254"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H3> 24.4.1 GDB/MI Result Records </H3>
|
||
|
<!--docid::SEC251::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="IDX1274"></A>
|
||
|
<A NAME="IDX1275"></A>
|
||
|
In addition to a number of out-of-band notifications, the response to a
|
||
|
GDB/MI command includes one of the following result indications:
|
||
|
</P><P>
|
||
|
|
||
|
<DL COMPACT>
|
||
|
<A NAME="IDX1276"></A>
|
||
|
<DT><CODE>"^done" [ "," <VAR>results</VAR> ]</CODE>
|
||
|
<DD>The synchronous operation was successful, <CODE><VAR>results</VAR></CODE> are the return
|
||
|
values.
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE>"^running"</CODE>
|
||
|
<DD><A NAME="IDX1277"></A>
|
||
|
The asynchronous operation was successfully started. The target is
|
||
|
running.
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE>"^connected"</CODE>
|
||
|
<DD><A NAME="IDX1278"></A>
|
||
|
GDB has connected to a remote target.
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE>"^error" "," <VAR>c-string</VAR></CODE>
|
||
|
<DD><A NAME="IDX1279"></A>
|
||
|
The operation failed. The <CODE><VAR>c-string</VAR></CODE> contains the corresponding
|
||
|
error message.
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE>"^exit"</CODE>
|
||
|
<DD><A NAME="IDX1280"></A>
|
||
|
GDB has terminated.
|
||
|
<P>
|
||
|
|
||
|
</DL>
|
||
|
<P>
|
||
|
|
||
|
<A NAME="GDB/MI Stream Records"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC252"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC251"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC253"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC253"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC250"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC254"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H3> 24.4.2 GDB/MI Stream Records </H3>
|
||
|
<!--docid::SEC252::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="IDX1281"></A>
|
||
|
<A NAME="IDX1282"></A>
|
||
|
GDB internally maintains a number of output streams: the console, the
|
||
|
target, and the log. The output intended for each of these streams is
|
||
|
funneled through the GDB/MI interface using <EM>stream records</EM>.
|
||
|
</P><P>
|
||
|
|
||
|
Each stream record begins with a unique <EM>prefix character</EM> which
|
||
|
identifies its stream (see section <A HREF="gdb_25.html#SEC247">GDB/MI Output Syntax</A>). In addition to the prefix, each stream record contains a
|
||
|
<CODE><VAR>string-output</VAR></CODE>. This is either raw text (with an implicit new
|
||
|
line) or a quoted C string (which does not contain an implicit newline).
|
||
|
</P><P>
|
||
|
|
||
|
<DL COMPACT>
|
||
|
<DT><CODE>"~" <VAR>string-output</VAR></CODE>
|
||
|
<DD>The console output stream contains text that should be displayed in the
|
||
|
CLI console window. It contains the textual responses to CLI commands.
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE>"@" <VAR>string-output</VAR></CODE>
|
||
|
<DD>The target output stream contains any textual output from the running
|
||
|
target. This is only present when GDB's event loop is truly
|
||
|
asynchronous, which is currently only the case for remote targets.
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE>"&" <VAR>string-output</VAR></CODE>
|
||
|
<DD>The log stream contains debugging messages being produced by GDB's
|
||
|
internals.
|
||
|
</DL>
|
||
|
<P>
|
||
|
|
||
|
<A NAME="GDB/MI Out-of-band Records"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC253"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC252"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC254"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC254"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC250"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC254"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H3> 24.4.3 GDB/MI Out-of-band Records </H3>
|
||
|
<!--docid::SEC253::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="IDX1283"></A>
|
||
|
<A NAME="IDX1284"></A>
|
||
|
<EM>Out-of-band</EM> records are used to notify the GDB/MI client of
|
||
|
additional changes that have occurred. Those changes can either be a
|
||
|
consequence of GDB/MI (e.g., a breakpoint modified) or a result of
|
||
|
target activity (e.g., target stopped).
|
||
|
</P><P>
|
||
|
|
||
|
The following is a preliminary list of possible out-of-band records.
|
||
|
In particular, the <VAR>exec-async-output</VAR> records.
|
||
|
</P><P>
|
||
|
|
||
|
<DL COMPACT>
|
||
|
<DT><CODE>*stopped,reason="<VAR>reason</VAR>"</CODE>
|
||
|
<DD></DL>
|
||
|
<P>
|
||
|
|
||
|
<VAR>reason</VAR> can be one of the following:
|
||
|
</P><P>
|
||
|
|
||
|
<DL COMPACT>
|
||
|
<DT><CODE>breakpoint-hit</CODE>
|
||
|
<DD>A breakpoint was reached.
|
||
|
<DT><CODE>watchpoint-trigger</CODE>
|
||
|
<DD>A watchpoint was triggered.
|
||
|
<DT><CODE>read-watchpoint-trigger</CODE>
|
||
|
<DD>A read watchpoint was triggered.
|
||
|
<DT><CODE>access-watchpoint-trigger</CODE>
|
||
|
<DD>An access watchpoint was triggered.
|
||
|
<DT><CODE>function-finished</CODE>
|
||
|
<DD>An -exec-finish or similar CLI command was accomplished.
|
||
|
<DT><CODE>location-reached</CODE>
|
||
|
<DD>An -exec-until or similar CLI command was accomplished.
|
||
|
<DT><CODE>watchpoint-scope</CODE>
|
||
|
<DD>A watchpoint has gone out of scope.
|
||
|
<DT><CODE>end-stepping-range</CODE>
|
||
|
<DD>An -exec-next, -exec-next-instruction, -exec-step, -exec-step-instruction or
|
||
|
similar CLI command was accomplished.
|
||
|
<DT><CODE>exited-signalled</CODE>
|
||
|
<DD>The inferior exited because of a signal.
|
||
|
<DT><CODE>exited</CODE>
|
||
|
<DD>The inferior exited.
|
||
|
<DT><CODE>exited-normally</CODE>
|
||
|
<DD>The inferior exited normally.
|
||
|
<DT><CODE>signal-received</CODE>
|
||
|
<DD>A signal was received by the inferior.
|
||
|
</DL>
|
||
|
<P>
|
||
|
|
||
|
<A NAME="GDB/MI Simple Examples"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC254"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC253"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC259"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC259"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_26.html#SEC646"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H2> 24.5 Simple Examples of GDB/MI Interaction </H2>
|
||
|
<!--docid::SEC254::-->
|
||
|
<P>
|
||
|
|
||
|
This subsection presents several simple examples of interaction using
|
||
|
the GDB/MI interface. In these examples, <SAMP>`->'</SAMP> means that the
|
||
|
following line is passed to GDB/MI as input, while <SAMP>`<-'</SAMP> means
|
||
|
the output received from GDB/MI.
|
||
|
</P><P>
|
||
|
|
||
|
Note the line breaks shown in the examples are here only for
|
||
|
readability, they don't appear in the real output.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC255"></A>
|
||
|
<H3> Setting a Breakpoint </H3>
|
||
|
<!--docid::SEC255::-->
|
||
|
<P>
|
||
|
|
||
|
Setting a breakpoint generates synchronous output which contains detailed
|
||
|
information of the breakpoint.
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>-> -break-insert main
|
||
|
<- ^done,bkpt={number="1",type="breakpoint",disp="keep",
|
||
|
enabled="y",addr="0x08048564",func="main",file="myprog.c",
|
||
|
fullname="/home/nickrob/myprog.c",line="68",times="0"}
|
||
|
<- (gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC256"></A>
|
||
|
<H3> Program Execution </H3>
|
||
|
<!--docid::SEC256::-->
|
||
|
<P>
|
||
|
|
||
|
Program execution generates asynchronous records and MI gives the
|
||
|
reason that execution stopped.
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>-> -exec-run
|
||
|
<- ^running
|
||
|
<- (gdb)
|
||
|
<- *stopped,reason="breakpoint-hit",bkptno="1",thread-id="0",
|
||
|
frame={addr="0x08048564",func="main",
|
||
|
args=[{name="argc",value="1"},{name="argv",value="0xbfc4d4d4"}],
|
||
|
file="myprog.c",fullname="/home/nickrob/myprog.c",line="68"}
|
||
|
<- (gdb)
|
||
|
-> -exec-continue
|
||
|
<- ^running
|
||
|
<- (gdb)
|
||
|
<- *stopped,reason="exited-normally"
|
||
|
<- (gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC257"></A>
|
||
|
<H3> Quitting GDB </H3>
|
||
|
<!--docid::SEC257::-->
|
||
|
<P>
|
||
|
|
||
|
Quitting GDB just prints the result class <SAMP>`^exit'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>-> (gdb)
|
||
|
<- -gdb-exit
|
||
|
<- ^exit
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC258"></A>
|
||
|
<H3> A Bad Command </H3>
|
||
|
<!--docid::SEC258::-->
|
||
|
<P>
|
||
|
|
||
|
Here's what happens if you pass a non-existent command:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>-> -rubbish
|
||
|
<- ^error,msg="Undefined MI command: rubbish"
|
||
|
<- (gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="GDB/MI Command Description Format"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC259"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC254"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC267"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC267"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_26.html#SEC646"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H2> 24.6 GDB/MI Command Description Format </H2>
|
||
|
<!--docid::SEC259::-->
|
||
|
<P>
|
||
|
|
||
|
The remaining sections describe blocks of commands. Each block of
|
||
|
commands is laid out in a fashion similar to this section.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC260"></A>
|
||
|
<H3> Motivation </H3>
|
||
|
<!--docid::SEC260::-->
|
||
|
<P>
|
||
|
|
||
|
The motivation for this collection of commands.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC261"></A>
|
||
|
<H3> Introduction </H3>
|
||
|
<!--docid::SEC261::-->
|
||
|
<P>
|
||
|
|
||
|
A brief introduction to this collection of commands as a whole.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC262"></A>
|
||
|
<H3> Commands </H3>
|
||
|
<!--docid::SEC262::-->
|
||
|
<P>
|
||
|
|
||
|
For each command in the block, the following is described:
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC263"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC263::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -command <VAR>args</VAR><small>...</small>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC264"></A>
|
||
|
<H4> Result </H4>
|
||
|
<!--docid::SEC264::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC265"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC265::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB CLI command(s), if any.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC266"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC266::-->
|
||
|
<P>
|
||
|
|
||
|
Example(s) formatted for readability. Some of the described commands have
|
||
|
not been implemented yet and these are labeled N.A. (not available).
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="GDB/MI Breakpoint Commands"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC267"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC259"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC305"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC305"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_26.html#SEC646"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H2> 24.7 GDB/MI Breakpoint Commands </H2>
|
||
|
<!--docid::SEC267::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="IDX1285"></A>
|
||
|
<A NAME="IDX1286"></A>
|
||
|
This section documents GDB/MI commands for manipulating
|
||
|
breakpoints.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC268"></A>
|
||
|
<H3> The <CODE>-break-after</CODE> Command </H3>
|
||
|
<!--docid::SEC268::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC269"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC269::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -break-after <VAR>number</VAR> <VAR>count</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
The breakpoint number <VAR>number</VAR> is not in effect until it has been
|
||
|
hit <VAR>count</VAR> times. To see how this is reflected in the output of
|
||
|
the <SAMP>`-break-list'</SAMP> command, see the description of the
|
||
|
<SAMP>`-break-list'</SAMP> command below.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC270"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC270::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`ignore'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC271"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC271::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-break-insert main
|
||
|
^done,bkpt={number="1",addr="0x000100d0",file="hello.c",
|
||
|
fullname="/home/foo/hello.c",line="5",times="0"}
|
||
|
(gdb)
|
||
|
-break-after 1 3
|
||
|
~
|
||
|
^done
|
||
|
(gdb)
|
||
|
-break-list
|
||
|
^done,BreakpointTable={nr_rows="1",nr_cols="6",
|
||
|
hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
|
||
|
{width="14",alignment="-1",col_name="type",colhdr="Type"},
|
||
|
{width="4",alignment="-1",col_name="disp",colhdr="Disp"},
|
||
|
{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
|
||
|
{width="10",alignment="-1",col_name="addr",colhdr="Address"},
|
||
|
{width="40",alignment="2",col_name="what",colhdr="What"}],
|
||
|
body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
|
||
|
addr="0x000100d0",func="main",file="hello.c",fullname="/home/foo/hello.c",
|
||
|
line="5",times="0",ignore="3"}]}
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC272"></A>
|
||
|
<H3> The <CODE>-break-condition</CODE> Command </H3>
|
||
|
<!--docid::SEC272::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC273"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC273::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -break-condition <VAR>number</VAR> <VAR>expr</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Breakpoint <VAR>number</VAR> will stop the program only if the condition in
|
||
|
<VAR>expr</VAR> is true. The condition becomes part of the
|
||
|
<SAMP>`-break-list'</SAMP> output (see the description of the <SAMP>`-break-list'</SAMP>
|
||
|
command below).
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC274"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC274::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`condition'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC275"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC275::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-break-condition 1 1
|
||
|
^done
|
||
|
(gdb)
|
||
|
-break-list
|
||
|
^done,BreakpointTable={nr_rows="1",nr_cols="6",
|
||
|
hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
|
||
|
{width="14",alignment="-1",col_name="type",colhdr="Type"},
|
||
|
{width="4",alignment="-1",col_name="disp",colhdr="Disp"},
|
||
|
{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
|
||
|
{width="10",alignment="-1",col_name="addr",colhdr="Address"},
|
||
|
{width="40",alignment="2",col_name="what",colhdr="What"}],
|
||
|
body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
|
||
|
addr="0x000100d0",func="main",file="hello.c",fullname="/home/foo/hello.c",
|
||
|
line="5",cond="1",times="0",ignore="3"}]}
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC276"></A>
|
||
|
<H3> The <CODE>-break-delete</CODE> Command </H3>
|
||
|
<!--docid::SEC276::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC277"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC277::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -break-delete ( <VAR>breakpoint</VAR> )+
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Delete the breakpoint(s) whose number(s) are specified in the argument
|
||
|
list. This is obviously reflected in the breakpoint list.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC278"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC278::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`delete'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC279"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC279::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-break-delete 1
|
||
|
^done
|
||
|
(gdb)
|
||
|
-break-list
|
||
|
^done,BreakpointTable={nr_rows="0",nr_cols="6",
|
||
|
hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
|
||
|
{width="14",alignment="-1",col_name="type",colhdr="Type"},
|
||
|
{width="4",alignment="-1",col_name="disp",colhdr="Disp"},
|
||
|
{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
|
||
|
{width="10",alignment="-1",col_name="addr",colhdr="Address"},
|
||
|
{width="40",alignment="2",col_name="what",colhdr="What"}],
|
||
|
body=[]}
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC280"></A>
|
||
|
<H3> The <CODE>-break-disable</CODE> Command </H3>
|
||
|
<!--docid::SEC280::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC281"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC281::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -break-disable ( <VAR>breakpoint</VAR> )+
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Disable the named <VAR>breakpoint</VAR>(s). The field <SAMP>`enabled'</SAMP> in the
|
||
|
break list is now set to <SAMP>`n'</SAMP> for the named <VAR>breakpoint</VAR>(s).
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC282"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC282::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`disable'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC283"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC283::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-break-disable 2
|
||
|
^done
|
||
|
(gdb)
|
||
|
-break-list
|
||
|
^done,BreakpointTable={nr_rows="1",nr_cols="6",
|
||
|
hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
|
||
|
{width="14",alignment="-1",col_name="type",colhdr="Type"},
|
||
|
{width="4",alignment="-1",col_name="disp",colhdr="Disp"},
|
||
|
{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
|
||
|
{width="10",alignment="-1",col_name="addr",colhdr="Address"},
|
||
|
{width="40",alignment="2",col_name="what",colhdr="What"}],
|
||
|
body=[bkpt={number="2",type="breakpoint",disp="keep",enabled="n",
|
||
|
addr="0x000100d0",func="main",file="hello.c",fullname="/home/foo/hello.c",
|
||
|
line="5",times="0"}]}
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC284"></A>
|
||
|
<H3> The <CODE>-break-enable</CODE> Command </H3>
|
||
|
<!--docid::SEC284::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC285"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC285::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -break-enable ( <VAR>breakpoint</VAR> )+
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Enable (previously disabled) <VAR>breakpoint</VAR>(s).
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC286"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC286::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`enable'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC287"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC287::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-break-enable 2
|
||
|
^done
|
||
|
(gdb)
|
||
|
-break-list
|
||
|
^done,BreakpointTable={nr_rows="1",nr_cols="6",
|
||
|
hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
|
||
|
{width="14",alignment="-1",col_name="type",colhdr="Type"},
|
||
|
{width="4",alignment="-1",col_name="disp",colhdr="Disp"},
|
||
|
{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
|
||
|
{width="10",alignment="-1",col_name="addr",colhdr="Address"},
|
||
|
{width="40",alignment="2",col_name="what",colhdr="What"}],
|
||
|
body=[bkpt={number="2",type="breakpoint",disp="keep",enabled="y",
|
||
|
addr="0x000100d0",func="main",file="hello.c",fullname="/home/foo/hello.c",
|
||
|
line="5",times="0"}]}
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC288"></A>
|
||
|
<H3> The <CODE>-break-info</CODE> Command </H3>
|
||
|
<!--docid::SEC288::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC289"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC289::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -break-info <VAR>breakpoint</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Get information about a single breakpoint.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC290"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC290::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`info break <VAR>breakpoint</VAR>'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC291"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC291::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC292"></A>
|
||
|
<H3> The <CODE>-break-insert</CODE> Command </H3>
|
||
|
<!--docid::SEC292::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC293"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC293::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -break-insert [ -t ] [ -h ] [ -f ]
|
||
|
[ -c <VAR>condition</VAR> ] [ -i <VAR>ignore-count</VAR> ]
|
||
|
[ -p <VAR>thread</VAR> ] [ <VAR>location</VAR> ]
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
If specified, <VAR>location</VAR>, can be one of:
|
||
|
</P><P>
|
||
|
|
||
|
<UL>
|
||
|
<LI>function
|
||
|
<LI>filename:linenum
|
||
|
<LI>filename:function
|
||
|
<LI>*address
|
||
|
</UL>
|
||
|
<P>
|
||
|
|
||
|
The possible optional parameters of this command are:
|
||
|
</P><P>
|
||
|
|
||
|
<DL COMPACT>
|
||
|
<DT><SAMP>`-t'</SAMP>
|
||
|
<DD>Insert a temporary breakpoint.
|
||
|
<DT><SAMP>`-h'</SAMP>
|
||
|
<DD>Insert a hardware breakpoint.
|
||
|
<DT><SAMP>`-c <VAR>condition</VAR>'</SAMP>
|
||
|
<DD>Make the breakpoint conditional on <VAR>condition</VAR>.
|
||
|
<DT><SAMP>`-i <VAR>ignore-count</VAR>'</SAMP>
|
||
|
<DD>Initialize the <VAR>ignore-count</VAR>.
|
||
|
<DT><SAMP>`-f'</SAMP>
|
||
|
<DD>If <VAR>location</VAR> cannot be parsed (for example if it
|
||
|
refers to unknown files or functions), create a pending
|
||
|
breakpoint. Without this flag, GDB will report
|
||
|
an error, and won't create a breakpoint, if <VAR>location</VAR>
|
||
|
cannot be parsed.
|
||
|
</DL>
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC294"></A>
|
||
|
<H4> Result </H4>
|
||
|
<!--docid::SEC294::-->
|
||
|
<P>
|
||
|
|
||
|
The result is in the form:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>^done,bkpt={number="<VAR>number</VAR>",type="<VAR>type</VAR>",disp="del"|"keep",
|
||
|
enabled="y"|"n",addr="<VAR>hex</VAR>",func="<VAR>funcname</VAR>",file="<VAR>filename</VAR>",
|
||
|
fullname="<VAR>full_filename</VAR>",line="<VAR>lineno</VAR>",[thread="<VAR>threadno</VAR>,]
|
||
|
times="<VAR>times</VAR>"}
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
where <VAR>number</VAR> is the GDB number for this breakpoint,
|
||
|
<VAR>funcname</VAR> is the name of the function where the breakpoint was
|
||
|
inserted, <VAR>filename</VAR> is the name of the source file which contains
|
||
|
this function, <VAR>lineno</VAR> is the source line number within that file
|
||
|
and <VAR>times</VAR> the number of times that the breakpoint has been hit
|
||
|
(always 0 for -break-insert but may be greater for -break-info or -break-list
|
||
|
which use the same output).
|
||
|
</P><P>
|
||
|
|
||
|
Note: this format is open to change.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC295"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC295::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB commands are <SAMP>`break'</SAMP>, <SAMP>`tbreak'</SAMP>,
|
||
|
<SAMP>`hbreak'</SAMP>, <SAMP>`thbreak'</SAMP>, and <SAMP>`rbreak'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC296"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC296::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-break-insert main
|
||
|
^done,bkpt={number="1",addr="0x0001072c",file="recursive2.c",
|
||
|
fullname="/home/foo/recursive2.c,line="4",times="0"}
|
||
|
(gdb)
|
||
|
-break-insert -t foo
|
||
|
^done,bkpt={number="2",addr="0x00010774",file="recursive2.c",
|
||
|
fullname="/home/foo/recursive2.c,line="11",times="0"}
|
||
|
(gdb)
|
||
|
-break-list
|
||
|
^done,BreakpointTable={nr_rows="2",nr_cols="6",
|
||
|
hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
|
||
|
{width="14",alignment="-1",col_name="type",colhdr="Type"},
|
||
|
{width="4",alignment="-1",col_name="disp",colhdr="Disp"},
|
||
|
{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
|
||
|
{width="10",alignment="-1",col_name="addr",colhdr="Address"},
|
||
|
{width="40",alignment="2",col_name="what",colhdr="What"}],
|
||
|
body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
|
||
|
addr="0x0001072c", func="main",file="recursive2.c",
|
||
|
fullname="/home/foo/recursive2.c,"line="4",times="0"},
|
||
|
bkpt={number="2",type="breakpoint",disp="del",enabled="y",
|
||
|
addr="0x00010774",func="foo",file="recursive2.c",
|
||
|
fullname="/home/foo/recursive2.c",line="11",times="0"}]}
|
||
|
(gdb)
|
||
|
-break-insert -r foo.*
|
||
|
~int foo(int, int);
|
||
|
^done,bkpt={number="3",addr="0x00010774",file="recursive2.c,
|
||
|
"fullname="/home/foo/recursive2.c",line="11",times="0"}
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC297"></A>
|
||
|
<H3> The <CODE>-break-list</CODE> Command </H3>
|
||
|
<!--docid::SEC297::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC298"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC298::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -break-list
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Displays the list of inserted breakpoints, showing the following fields:
|
||
|
</P><P>
|
||
|
|
||
|
<DL COMPACT>
|
||
|
<DT><SAMP>`Number'</SAMP>
|
||
|
<DD>number of the breakpoint
|
||
|
<DT><SAMP>`Type'</SAMP>
|
||
|
<DD>type of the breakpoint: <SAMP>`breakpoint'</SAMP> or <SAMP>`watchpoint'</SAMP>
|
||
|
<DT><SAMP>`Disposition'</SAMP>
|
||
|
<DD>should the breakpoint be deleted or disabled when it is hit: <SAMP>`keep'</SAMP>
|
||
|
or <SAMP>`nokeep'</SAMP>
|
||
|
<DT><SAMP>`Enabled'</SAMP>
|
||
|
<DD>is the breakpoint enabled or no: <SAMP>`y'</SAMP> or <SAMP>`n'</SAMP>
|
||
|
<DT><SAMP>`Address'</SAMP>
|
||
|
<DD>memory location at which the breakpoint is set
|
||
|
<DT><SAMP>`What'</SAMP>
|
||
|
<DD>logical location of the breakpoint, expressed by function name, file
|
||
|
name, line number
|
||
|
<DT><SAMP>`Times'</SAMP>
|
||
|
<DD>number of times the breakpoint has been hit
|
||
|
</DL>
|
||
|
<P>
|
||
|
|
||
|
If there are no breakpoints or watchpoints, the <CODE>BreakpointTable</CODE>
|
||
|
<CODE>body</CODE> field is an empty list.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC299"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC299::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`info break'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC300"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC300::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-break-list
|
||
|
^done,BreakpointTable={nr_rows="2",nr_cols="6",
|
||
|
hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
|
||
|
{width="14",alignment="-1",col_name="type",colhdr="Type"},
|
||
|
{width="4",alignment="-1",col_name="disp",colhdr="Disp"},
|
||
|
{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
|
||
|
{width="10",alignment="-1",col_name="addr",colhdr="Address"},
|
||
|
{width="40",alignment="2",col_name="what",colhdr="What"}],
|
||
|
body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
|
||
|
addr="0x000100d0",func="main",file="hello.c",line="5",times="0"},
|
||
|
bkpt={number="2",type="breakpoint",disp="keep",enabled="y",
|
||
|
addr="0x00010114",func="foo",file="hello.c",fullname="/home/foo/hello.c",
|
||
|
line="13",times="0"}]}
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Here's an example of the result when there are no breakpoints:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-break-list
|
||
|
^done,BreakpointTable={nr_rows="0",nr_cols="6",
|
||
|
hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
|
||
|
{width="14",alignment="-1",col_name="type",colhdr="Type"},
|
||
|
{width="4",alignment="-1",col_name="disp",colhdr="Disp"},
|
||
|
{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
|
||
|
{width="10",alignment="-1",col_name="addr",colhdr="Address"},
|
||
|
{width="40",alignment="2",col_name="what",colhdr="What"}],
|
||
|
body=[]}
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC301"></A>
|
||
|
<H3> The <CODE>-break-watch</CODE> Command </H3>
|
||
|
<!--docid::SEC301::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC302"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC302::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -break-watch [ -a | -r ]
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Create a watchpoint. With the <SAMP>`-a'</SAMP> option it will create an
|
||
|
<EM>access</EM> watchpoint, i.e., a watchpoint that triggers either on a
|
||
|
read from or on a write to the memory location. With the <SAMP>`-r'</SAMP>
|
||
|
option, the watchpoint created is a <EM>read</EM> watchpoint, i.e., it will
|
||
|
trigger only when the memory location is accessed for reading. Without
|
||
|
either of the options, the watchpoint created is a regular watchpoint,
|
||
|
i.e., it will trigger when the memory location is accessed for writing.
|
||
|
See section <A HREF="gdb_6.html#SEC34">Setting Watchpoints</A>.
|
||
|
</P><P>
|
||
|
|
||
|
Note that <SAMP>`-break-list'</SAMP> will report a single list of watchpoints and
|
||
|
breakpoints inserted.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC303"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC303::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB commands are <SAMP>`watch'</SAMP>, <SAMP>`awatch'</SAMP>, and
|
||
|
<SAMP>`rwatch'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC304"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC304::-->
|
||
|
<P>
|
||
|
|
||
|
Setting a watchpoint on a variable in the <CODE>main</CODE> function:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-break-watch x
|
||
|
^done,wpt={number="2",exp="x"}
|
||
|
(gdb)
|
||
|
-exec-continue
|
||
|
^running
|
||
|
(gdb)
|
||
|
*stopped,reason="watchpoint-trigger",wpt={number="2",exp="x"},
|
||
|
value={old="-268439212",new="55"},
|
||
|
frame={func="main",args=[],file="recursive2.c",
|
||
|
fullname="/home/foo/bar/recursive2.c",line="5"}
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Setting a watchpoint on a variable local to a function. GDB will stop
|
||
|
the program execution twice: first for the variable changing value, then
|
||
|
for the watchpoint going out of scope.
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-break-watch C
|
||
|
^done,wpt={number="5",exp="C"}
|
||
|
(gdb)
|
||
|
-exec-continue
|
||
|
^running
|
||
|
(gdb)
|
||
|
*stopped,reason="watchpoint-trigger",
|
||
|
wpt={number="5",exp="C"},value={old="-276895068",new="3"},
|
||
|
frame={func="callee4",args=[],
|
||
|
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
|
||
|
fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="13"}
|
||
|
(gdb)
|
||
|
-exec-continue
|
||
|
^running
|
||
|
(gdb)
|
||
|
*stopped,reason="watchpoint-scope",wpnum="5",
|
||
|
frame={func="callee3",args=[{name="strarg",
|
||
|
value="0x11940 \"A string argument.\""}],
|
||
|
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
|
||
|
fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="18"}
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Listing breakpoints and watchpoints, at different points in the program
|
||
|
execution. Note that once the watchpoint goes out of scope, it is
|
||
|
deleted.
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-break-watch C
|
||
|
^done,wpt={number="2",exp="C"}
|
||
|
(gdb)
|
||
|
-break-list
|
||
|
^done,BreakpointTable={nr_rows="2",nr_cols="6",
|
||
|
hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
|
||
|
{width="14",alignment="-1",col_name="type",colhdr="Type"},
|
||
|
{width="4",alignment="-1",col_name="disp",colhdr="Disp"},
|
||
|
{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
|
||
|
{width="10",alignment="-1",col_name="addr",colhdr="Address"},
|
||
|
{width="40",alignment="2",col_name="what",colhdr="What"}],
|
||
|
body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
|
||
|
addr="0x00010734",func="callee4",
|
||
|
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
|
||
|
fullname="/home/foo/devo/gdb/testsuite/gdb.mi/basics.c"line="8",times="1"},
|
||
|
bkpt={number="2",type="watchpoint",disp="keep",
|
||
|
enabled="y",addr="",what="C",times="0"}]}
|
||
|
(gdb)
|
||
|
-exec-continue
|
||
|
^running
|
||
|
(gdb)
|
||
|
*stopped,reason="watchpoint-trigger",wpt={number="2",exp="C"},
|
||
|
value={old="-276895068",new="3"},
|
||
|
frame={func="callee4",args=[],
|
||
|
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
|
||
|
fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="13"}
|
||
|
(gdb)
|
||
|
-break-list
|
||
|
^done,BreakpointTable={nr_rows="2",nr_cols="6",
|
||
|
hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
|
||
|
{width="14",alignment="-1",col_name="type",colhdr="Type"},
|
||
|
{width="4",alignment="-1",col_name="disp",colhdr="Disp"},
|
||
|
{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
|
||
|
{width="10",alignment="-1",col_name="addr",colhdr="Address"},
|
||
|
{width="40",alignment="2",col_name="what",colhdr="What"}],
|
||
|
body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
|
||
|
addr="0x00010734",func="callee4",
|
||
|
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
|
||
|
fullname="/home/foo/devo/gdb/testsuite/gdb.mi/basics.c",line="8",times="1"},
|
||
|
bkpt={number="2",type="watchpoint",disp="keep",
|
||
|
enabled="y",addr="",what="C",times="-5"}]}
|
||
|
(gdb)
|
||
|
-exec-continue
|
||
|
^running
|
||
|
^done,reason="watchpoint-scope",wpnum="2",
|
||
|
frame={func="callee3",args=[{name="strarg",
|
||
|
value="0x11940 \"A string argument.\""}],
|
||
|
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
|
||
|
fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="18"}
|
||
|
(gdb)
|
||
|
-break-list
|
||
|
^done,BreakpointTable={nr_rows="1",nr_cols="6",
|
||
|
hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
|
||
|
{width="14",alignment="-1",col_name="type",colhdr="Type"},
|
||
|
{width="4",alignment="-1",col_name="disp",colhdr="Disp"},
|
||
|
{width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
|
||
|
{width="10",alignment="-1",col_name="addr",colhdr="Address"},
|
||
|
{width="40",alignment="2",col_name="what",colhdr="What"}],
|
||
|
body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
|
||
|
addr="0x00010734",func="callee4",
|
||
|
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
|
||
|
fullname="/home/foo/devo/gdb/testsuite/gdb.mi/basics.c",line="8",
|
||
|
times="1"}]}
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="GDB/MI Program Context"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC305"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC267"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC330"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC330"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_26.html#SEC646"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H2> 24.8 GDB/MI Program Context </H2>
|
||
|
<!--docid::SEC305::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC306"></A>
|
||
|
<H3> The <CODE>-exec-arguments</CODE> Command </H3>
|
||
|
<!--docid::SEC306::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC307"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC307::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -exec-arguments <VAR>args</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Set the inferior program arguments, to be used in the next
|
||
|
<SAMP>`-exec-run'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC308"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC308::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`set args'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC309"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC309::-->
|
||
|
<P>
|
||
|
|
||
|
Don't have one around.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC310"></A>
|
||
|
<H3> The <CODE>-exec-show-arguments</CODE> Command </H3>
|
||
|
<!--docid::SEC310::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC311"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC311::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -exec-show-arguments
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Print the arguments of the program.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC312"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC312::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`show args'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC313"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC313::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC314"></A>
|
||
|
<H3> The <CODE>-environment-cd</CODE> Command </H3>
|
||
|
<!--docid::SEC314::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC315"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC315::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -environment-cd <VAR>pathdir</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Set GDB's working directory.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC316"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC316::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`cd'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC317"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC317::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-environment-cd /kwikemart/marge/ezannoni/flathead-dev/devo/gdb
|
||
|
^done
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC318"></A>
|
||
|
<H3> The <CODE>-environment-directory</CODE> Command </H3>
|
||
|
<!--docid::SEC318::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC319"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC319::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -environment-directory [ -r ] [ <VAR>pathdir</VAR> ]+
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Add directories <VAR>pathdir</VAR> to beginning of search path for source files.
|
||
|
If the <SAMP>`-r'</SAMP> option is used, the search path is reset to the default
|
||
|
search path. If directories <VAR>pathdir</VAR> are supplied in addition to the
|
||
|
<SAMP>`-r'</SAMP> option, the search path is first reset and then addition
|
||
|
occurs as normal.
|
||
|
Multiple directories may be specified, separated by blanks. Specifying
|
||
|
multiple directories in a single command
|
||
|
results in the directories added to the beginning of the
|
||
|
search path in the same order they were presented in the command.
|
||
|
If blanks are needed as
|
||
|
part of a directory name, double-quotes should be used around
|
||
|
the name. In the command output, the path will show up separated
|
||
|
by the system directory-separator character. The directory-separator
|
||
|
character must not be used
|
||
|
in any directory name.
|
||
|
If no directories are specified, the current search path is displayed.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC320"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC320::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`dir'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC321"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC321::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-environment-directory /kwikemart/marge/ezannoni/flathead-dev/devo/gdb
|
||
|
^done,source-path="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb:$cdir:$cwd"
|
||
|
(gdb)
|
||
|
-environment-directory ""
|
||
|
^done,source-path="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb:$cdir:$cwd"
|
||
|
(gdb)
|
||
|
-environment-directory -r /home/jjohnstn/src/gdb /usr/src
|
||
|
^done,source-path="/home/jjohnstn/src/gdb:/usr/src:$cdir:$cwd"
|
||
|
(gdb)
|
||
|
-environment-directory -r
|
||
|
^done,source-path="$cdir:$cwd"
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC322"></A>
|
||
|
<H3> The <CODE>-environment-path</CODE> Command </H3>
|
||
|
<!--docid::SEC322::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC323"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC323::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -environment-path [ -r ] [ <VAR>pathdir</VAR> ]+
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Add directories <VAR>pathdir</VAR> to beginning of search path for object files.
|
||
|
If the <SAMP>`-r'</SAMP> option is used, the search path is reset to the original
|
||
|
search path that existed at gdb start-up. If directories <VAR>pathdir</VAR> are
|
||
|
supplied in addition to the
|
||
|
<SAMP>`-r'</SAMP> option, the search path is first reset and then addition
|
||
|
occurs as normal.
|
||
|
Multiple directories may be specified, separated by blanks. Specifying
|
||
|
multiple directories in a single command
|
||
|
results in the directories added to the beginning of the
|
||
|
search path in the same order they were presented in the command.
|
||
|
If blanks are needed as
|
||
|
part of a directory name, double-quotes should be used around
|
||
|
the name. In the command output, the path will show up separated
|
||
|
by the system directory-separator character. The directory-separator
|
||
|
character must not be used
|
||
|
in any directory name.
|
||
|
If no directories are specified, the current path is displayed.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC324"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC324::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`path'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC325"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC325::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-environment-path
|
||
|
^done,path="/usr/bin"
|
||
|
(gdb)
|
||
|
-environment-path /kwikemart/marge/ezannoni/flathead-dev/ppc-eabi/gdb /bin
|
||
|
^done,path="/kwikemart/marge/ezannoni/flathead-dev/ppc-eabi/gdb:/bin:/usr/bin"
|
||
|
(gdb)
|
||
|
-environment-path -r /usr/local/bin
|
||
|
^done,path="/usr/local/bin:/usr/bin"
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC326"></A>
|
||
|
<H3> The <CODE>-environment-pwd</CODE> Command </H3>
|
||
|
<!--docid::SEC326::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC327"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC327::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -environment-pwd
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Show the current working directory.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC328"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC328::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`pwd'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC329"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC329::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-environment-pwd
|
||
|
^done,cwd="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb"
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="GDB/MI Thread Commands"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC330"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC305"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC347"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_26.html#SEC646"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H2> 24.9 GDB/MI Thread Commands </H2>
|
||
|
<!--docid::SEC330::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC331"></A>
|
||
|
<H3> The <CODE>-thread-info</CODE> Command </H3>
|
||
|
<!--docid::SEC331::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC332"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC332::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -thread-info
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC333"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC333::-->
|
||
|
<P>
|
||
|
|
||
|
No equivalent.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC334"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC334::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC335"></A>
|
||
|
<H3> The <CODE>-thread-list-all-threads</CODE> Command </H3>
|
||
|
<!--docid::SEC335::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC336"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC336::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -thread-list-all-threads
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC337"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC337::-->
|
||
|
<P>
|
||
|
|
||
|
The equivalent GDB command is <SAMP>`info threads'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC338"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC338::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC339"></A>
|
||
|
<H3> The <CODE>-thread-list-ids</CODE> Command </H3>
|
||
|
<!--docid::SEC339::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC340"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC340::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -thread-list-ids
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Produces a list of the currently known GDB thread ids. At the
|
||
|
end of the list it also prints the total number of such threads.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC341"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC341::-->
|
||
|
<P>
|
||
|
|
||
|
Part of <SAMP>`info threads'</SAMP> supplies the same information.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC342"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC342::-->
|
||
|
<P>
|
||
|
|
||
|
No threads present, besides the main process:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-thread-list-ids
|
||
|
^done,thread-ids={},number-of-threads="0"
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Several threads:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-thread-list-ids
|
||
|
^done,thread-ids={thread-id="3",thread-id="2",thread-id="1"},
|
||
|
number-of-threads="3"
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC343"></A>
|
||
|
<H3> The <CODE>-thread-select</CODE> Command </H3>
|
||
|
<!--docid::SEC343::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC344"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC344::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -thread-select <VAR>threadnum</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Make <VAR>threadnum</VAR> the current thread. It prints the number of the new
|
||
|
current thread, and the topmost frame for that thread.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC345"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC345::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`thread'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC346"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC346::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-exec-next
|
||
|
^running
|
||
|
(gdb)
|
||
|
*stopped,reason="end-stepping-range",thread-id="2",line="187",
|
||
|
file="../../../devo/gdb/testsuite/gdb.threads/linux-dp.c"
|
||
|
(gdb)
|
||
|
-thread-list-ids
|
||
|
^done,
|
||
|
thread-ids={thread-id="3",thread-id="2",thread-id="1"},
|
||
|
number-of-threads="3"
|
||
|
(gdb)
|
||
|
-thread-select 3
|
||
|
^done,new-thread-id="3",
|
||
|
frame={level="0",func="vprintf",
|
||
|
args=[{name="format",value="0x8048e9c \"%*s%c %d %c\\n\""},
|
||
|
{name="arg",value="0x2"}],file="vprintf.c",line="31"}
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="GDB/MI Program Execution"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC347"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC330"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC388"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC248"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_26.html#SEC646"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H2> 24.10 GDB/MI Program Execution </H2>
|
||
|
<!--docid::SEC347::-->
|
||
|
<P>
|
||
|
|
||
|
These are the asynchronous commands which generate the out-of-band
|
||
|
record <SAMP>`*stopped'</SAMP>. Currently GDB only really executes
|
||
|
asynchronously with remote targets and this interaction is mimicked in
|
||
|
other cases.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC348"></A>
|
||
|
<H3> The <CODE>-exec-continue</CODE> Command </H3>
|
||
|
<!--docid::SEC348::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC349"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC349::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -exec-continue
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Resumes the execution of the inferior program until a breakpoint is
|
||
|
encountered, or until the inferior exits.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC350"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC350::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB corresponding is <SAMP>`continue'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC351"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC351::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>-exec-continue
|
||
|
^running
|
||
|
(gdb)
|
||
|
@Hello world
|
||
|
*stopped,reason="breakpoint-hit",bkptno="2",frame={func="foo",args=[],
|
||
|
file="hello.c",fullname="/home/foo/bar/hello.c",line="13"}
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC352"></A>
|
||
|
<H3> The <CODE>-exec-finish</CODE> Command </H3>
|
||
|
<!--docid::SEC352::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC353"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC353::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -exec-finish
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Resumes the execution of the inferior program until the current
|
||
|
function is exited. Displays the results returned by the function.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC354"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC354::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`finish'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC355"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC355::-->
|
||
|
<P>
|
||
|
|
||
|
Function returning <CODE>void</CODE>.
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>-exec-finish
|
||
|
^running
|
||
|
(gdb)
|
||
|
@hello from foo
|
||
|
*stopped,reason="function-finished",frame={func="main",args=[],
|
||
|
file="hello.c",fullname="/home/foo/bar/hello.c",line="7"}
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Function returning other than <CODE>void</CODE>. The name of the internal
|
||
|
GDB variable storing the result is printed, together with the
|
||
|
value itself.
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>-exec-finish
|
||
|
^running
|
||
|
(gdb)
|
||
|
*stopped,reason="function-finished",frame={addr="0x000107b0",func="foo",
|
||
|
args=[{name="a",value="1"],{name="b",value="9"}},
|
||
|
file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
|
||
|
gdb-result-var="$1",return-value="0"
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC356"></A>
|
||
|
<H3> The <CODE>-exec-interrupt</CODE> Command </H3>
|
||
|
<!--docid::SEC356::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC357"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC357::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -exec-interrupt
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Interrupts the background execution of the target. Note how the token
|
||
|
associated with the stop message is the one for the execution command
|
||
|
that has been interrupted. The token for the interrupt itself only
|
||
|
appears in the <SAMP>`^done'</SAMP> output. If the user is trying to
|
||
|
interrupt a non-running program, an error message will be printed.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC358"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC358::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`interrupt'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC359"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC359::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
111-exec-continue
|
||
|
111^running
|
||
|
|
||
|
(gdb)
|
||
|
222-exec-interrupt
|
||
|
222^done
|
||
|
(gdb)
|
||
|
111*stopped,signal-name="SIGINT",signal-meaning="Interrupt",
|
||
|
frame={addr="0x00010140",func="foo",args=[],file="try.c",
|
||
|
fullname="/home/foo/bar/try.c",line="13"}
|
||
|
(gdb)
|
||
|
|
||
|
(gdb)
|
||
|
-exec-interrupt
|
||
|
^error,msg="mi_cmd_exec_interrupt: Inferior not executing."
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC360"></A>
|
||
|
<H3> The <CODE>-exec-next</CODE> Command </H3>
|
||
|
<!--docid::SEC360::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC361"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC361::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -exec-next
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Resumes execution of the inferior program, stopping when the beginning
|
||
|
of the next source line is reached.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC362"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC362::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`next'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC363"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC363::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>-exec-next
|
||
|
^running
|
||
|
(gdb)
|
||
|
*stopped,reason="end-stepping-range",line="8",file="hello.c"
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC364"></A>
|
||
|
<H3> The <CODE>-exec-next-instruction</CODE> Command </H3>
|
||
|
<!--docid::SEC364::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC365"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC365::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -exec-next-instruction
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Executes one machine instruction. If the instruction is a function
|
||
|
call, continues until the function returns. If the program stops at an
|
||
|
instruction in the middle of a source line, the address will be
|
||
|
printed as well.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC366"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC366::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`nexti'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC367"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC367::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-exec-next-instruction
|
||
|
^running
|
||
|
|
||
|
(gdb)
|
||
|
*stopped,reason="end-stepping-range",
|
||
|
addr="0x000100d4",line="5",file="hello.c"
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC368"></A>
|
||
|
<H3> The <CODE>-exec-return</CODE> Command </H3>
|
||
|
<!--docid::SEC368::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC369"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC369::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -exec-return
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Makes current function return immediately. Doesn't execute the inferior.
|
||
|
Displays the new current frame.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC370"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC370::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`return'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC371"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC371::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
200-break-insert callee4
|
||
|
200^done,bkpt={number="1",addr="0x00010734",
|
||
|
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="8"}
|
||
|
(gdb)
|
||
|
000-exec-run
|
||
|
000^running
|
||
|
(gdb)
|
||
|
000*stopped,reason="breakpoint-hit",bkptno="1",
|
||
|
frame={func="callee4",args=[],
|
||
|
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
|
||
|
fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="8"}
|
||
|
(gdb)
|
||
|
205-break-delete
|
||
|
205^done
|
||
|
(gdb)
|
||
|
111-exec-return
|
||
|
111^done,frame={level="0",func="callee3",
|
||
|
args=[{name="strarg",
|
||
|
value="0x11940 \"A string argument.\""}],
|
||
|
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
|
||
|
fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="18"}
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC372"></A>
|
||
|
<H3> The <CODE>-exec-run</CODE> Command </H3>
|
||
|
<!--docid::SEC372::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC373"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC373::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -exec-run
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Starts execution of the inferior from the beginning. The inferior
|
||
|
executes until either a breakpoint is encountered or the program
|
||
|
exits. In the latter case the output will include an exit code, if
|
||
|
the program has exited exceptionally.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC374"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC374::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`run'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC375"></A>
|
||
|
<H4> Examples </H4>
|
||
|
<!--docid::SEC375::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-break-insert main
|
||
|
^done,bkpt={number="1",addr="0x0001072c",file="recursive2.c",line="4"}
|
||
|
(gdb)
|
||
|
-exec-run
|
||
|
^running
|
||
|
(gdb)
|
||
|
*stopped,reason="breakpoint-hit",bkptno="1",
|
||
|
frame={func="main",args=[],file="recursive2.c",
|
||
|
fullname="/home/foo/bar/recursive2.c",line="4"}
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Program exited normally:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-exec-run
|
||
|
^running
|
||
|
(gdb)
|
||
|
x = 55
|
||
|
*stopped,reason="exited-normally"
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Program exited exceptionally:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-exec-run
|
||
|
^running
|
||
|
(gdb)
|
||
|
x = 55
|
||
|
*stopped,reason="exited",exit-code="01"
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Another way the program can terminate is if it receives a signal such as
|
||
|
<CODE>SIGINT</CODE>. In this case, GDB/MI displays this:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
*stopped,reason="exited-signalled",signal-name="SIGINT",
|
||
|
signal-meaning="Interrupt"
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC376"></A>
|
||
|
<H3> The <CODE>-exec-step</CODE> Command </H3>
|
||
|
<!--docid::SEC376::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC377"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC377::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -exec-step
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Resumes execution of the inferior program, stopping when the beginning
|
||
|
of the next source line is reached, if the next source line is not a
|
||
|
function call. If it is, stop at the first instruction of the called
|
||
|
function.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC378"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC378::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`step'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC379"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC379::-->
|
||
|
<P>
|
||
|
|
||
|
Stepping into a function:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>-exec-step
|
||
|
^running
|
||
|
(gdb)
|
||
|
*stopped,reason="end-stepping-range",
|
||
|
frame={func="foo",args=[{name="a",value="10"},
|
||
|
{name="b",value="0"}],file="recursive2.c",
|
||
|
fullname="/home/foo/bar/recursive2.c",line="11"}
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Regular stepping:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>-exec-step
|
||
|
^running
|
||
|
(gdb)
|
||
|
*stopped,reason="end-stepping-range",line="14",file="recursive2.c"
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC380"></A>
|
||
|
<H3> The <CODE>-exec-step-instruction</CODE> Command </H3>
|
||
|
<!--docid::SEC380::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC381"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC381::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -exec-step-instruction
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Resumes the inferior which executes one machine instruction. The
|
||
|
output, once GDB has stopped, will vary depending on whether
|
||
|
we have stopped in the middle of a source line or not. In the former
|
||
|
case, the address at which the program stopped will be printed as
|
||
|
well.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC382"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC382::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`stepi'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC383"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC383::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-exec-step-instruction
|
||
|
^running
|
||
|
|
||
|
(gdb)
|
||
|
*stopped,reason="end-stepping-range",
|
||
|
frame={func="foo",args=[],file="try.c",
|
||
|
fullname="/home/foo/bar/try.c",line="10"}
|
||
|
(gdb)
|
||
|
-exec-step-instruction
|
||
|
^running
|
||
|
|
||
|
(gdb)
|
||
|
*stopped,reason="end-stepping-range",
|
||
|
frame={addr="0x000100f4",func="foo",args=[],file="try.c",
|
||
|
fullname="/home/foo/bar/try.c",line="10"}
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC384"></A>
|
||
|
<H3> The <CODE>-exec-until</CODE> Command </H3>
|
||
|
<!--docid::SEC384::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC385"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC385::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -exec-until [ <VAR>location</VAR> ]
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Executes the inferior until the <VAR>location</VAR> specified in the
|
||
|
argument is reached. If there is no argument, the inferior executes
|
||
|
until a source line greater than the current one is reached. The
|
||
|
reason for stopping in this case will be <SAMP>`location-reached'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC386"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC386::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`until'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC387"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC387::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-exec-until recursive2.c:6
|
||
|
^running
|
||
|
(gdb)
|
||
|
x = 55
|
||
|
*stopped,reason="location-reached",frame={func="main",args=[],
|
||
|
file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="6"}
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="GDB/MI Stack Manipulation"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC388"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC347"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC413"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC248"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_26.html#SEC646"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H2> 24.11 GDB/MI Stack Manipulation Commands </H2>
|
||
|
<!--docid::SEC388::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC389"></A>
|
||
|
<H3> The <CODE>-stack-info-frame</CODE> Command </H3>
|
||
|
<!--docid::SEC389::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC390"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC390::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -stack-info-frame
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Get info on the selected frame.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC391"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC391::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`info frame'</SAMP> or <SAMP>`frame'</SAMP>
|
||
|
(without arguments).
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC392"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC392::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-stack-info-frame
|
||
|
^done,frame={level="1",addr="0x0001076c",func="callee3",
|
||
|
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
|
||
|
fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="17"}
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC393"></A>
|
||
|
<H3> The <CODE>-stack-info-depth</CODE> Command </H3>
|
||
|
<!--docid::SEC393::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC394"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC394::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -stack-info-depth [ <VAR>max-depth</VAR> ]
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Return the depth of the stack. If the integer argument <VAR>max-depth</VAR>
|
||
|
is specified, do not count beyond <VAR>max-depth</VAR> frames.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC395"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC395::-->
|
||
|
<P>
|
||
|
|
||
|
There's no equivalent GDB command.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC396"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC396::-->
|
||
|
<P>
|
||
|
|
||
|
For a stack with frame levels 0 through 11:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-stack-info-depth
|
||
|
^done,depth="12"
|
||
|
(gdb)
|
||
|
-stack-info-depth 4
|
||
|
^done,depth="4"
|
||
|
(gdb)
|
||
|
-stack-info-depth 12
|
||
|
^done,depth="12"
|
||
|
(gdb)
|
||
|
-stack-info-depth 11
|
||
|
^done,depth="11"
|
||
|
(gdb)
|
||
|
-stack-info-depth 13
|
||
|
^done,depth="12"
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC397"></A>
|
||
|
<H3> The <CODE>-stack-list-arguments</CODE> Command </H3>
|
||
|
<!--docid::SEC397::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC398"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC398::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -stack-list-arguments <VAR>show-values</VAR>
|
||
|
[ <VAR>low-frame</VAR> <VAR>high-frame</VAR> ]
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Display a list of the arguments for the frames between <VAR>low-frame</VAR>
|
||
|
and <VAR>high-frame</VAR> (inclusive). If <VAR>low-frame</VAR> and
|
||
|
<VAR>high-frame</VAR> are not provided, list the arguments for the whole
|
||
|
call stack. If the two arguments are equal, show the single frame
|
||
|
at the corresponding level. It is an error if <VAR>low-frame</VAR> is
|
||
|
larger than the actual number of frames. On the other hand,
|
||
|
<VAR>high-frame</VAR> may be larger than the actual number of frames, in
|
||
|
which case only existing frames will be returned.
|
||
|
</P><P>
|
||
|
|
||
|
The <VAR>show-values</VAR> argument must have a value of 0 or 1. A value of
|
||
|
0 means that only the names of the arguments are listed, a value of 1
|
||
|
means that both names and values of the arguments are printed.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC399"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC399::-->
|
||
|
<P>
|
||
|
|
||
|
GDB does not have an equivalent command. <CODE>gdbtk</CODE> has a
|
||
|
<SAMP>`gdb_get_args'</SAMP> command which partially overlaps with the
|
||
|
functionality of <SAMP>`-stack-list-arguments'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC400"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC400::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-stack-list-frames
|
||
|
^done,
|
||
|
stack=[
|
||
|
frame={level="0",addr="0x00010734",func="callee4",
|
||
|
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
|
||
|
fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="8"},
|
||
|
frame={level="1",addr="0x0001076c",func="callee3",
|
||
|
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
|
||
|
fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="17"},
|
||
|
frame={level="2",addr="0x0001078c",func="callee2",
|
||
|
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
|
||
|
fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="22"},
|
||
|
frame={level="3",addr="0x000107b4",func="callee1",
|
||
|
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
|
||
|
fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="27"},
|
||
|
frame={level="4",addr="0x000107e0",func="main",
|
||
|
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
|
||
|
fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="32"}]
|
||
|
(gdb)
|
||
|
-stack-list-arguments 0
|
||
|
^done,
|
||
|
stack-args=[
|
||
|
frame={level="0",args=[]},
|
||
|
frame={level="1",args=[name="strarg"]},
|
||
|
frame={level="2",args=[name="intarg",name="strarg"]},
|
||
|
frame={level="3",args=[name="intarg",name="strarg",name="fltarg"]},
|
||
|
frame={level="4",args=[]}]
|
||
|
(gdb)
|
||
|
-stack-list-arguments 1
|
||
|
^done,
|
||
|
stack-args=[
|
||
|
frame={level="0",args=[]},
|
||
|
frame={level="1",
|
||
|
args=[{name="strarg",value="0x11940 \"A string argument.\""}]},
|
||
|
frame={level="2",args=[
|
||
|
{name="intarg",value="2"},
|
||
|
{name="strarg",value="0x11940 \"A string argument.\""}]},
|
||
|
{frame={level="3",args=[
|
||
|
{name="intarg",value="2"},
|
||
|
{name="strarg",value="0x11940 \"A string argument.\""},
|
||
|
{name="fltarg",value="3.5"}]},
|
||
|
frame={level="4",args=[]}]
|
||
|
(gdb)
|
||
|
-stack-list-arguments 0 2 2
|
||
|
^done,stack-args=[frame={level="2",args=[name="intarg",name="strarg"]}]
|
||
|
(gdb)
|
||
|
-stack-list-arguments 1 2 2
|
||
|
^done,stack-args=[frame={level="2",
|
||
|
args=[{name="intarg",value="2"},
|
||
|
{name="strarg",value="0x11940 \"A string argument.\""}]}]
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC401"></A>
|
||
|
<H3> The <CODE>-stack-list-frames</CODE> Command </H3>
|
||
|
<!--docid::SEC401::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC402"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC402::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -stack-list-frames [ <VAR>low-frame</VAR> <VAR>high-frame</VAR> ]
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
List the frames currently on the stack. For each frame it displays the
|
||
|
following info:
|
||
|
</P><P>
|
||
|
|
||
|
<DL COMPACT>
|
||
|
<DT><SAMP>`<VAR>level</VAR>'</SAMP>
|
||
|
<DD>The frame number, 0 being the topmost frame, i.e., the innermost function.
|
||
|
<DT><SAMP>`<VAR>addr</VAR>'</SAMP>
|
||
|
<DD>The <CODE>$pc</CODE> value for that frame.
|
||
|
<DT><SAMP>`<VAR>func</VAR>'</SAMP>
|
||
|
<DD>Function name.
|
||
|
<DT><SAMP>`<VAR>file</VAR>'</SAMP>
|
||
|
<DD>File name of the source file where the function lives.
|
||
|
<DT><SAMP>`<VAR>line</VAR>'</SAMP>
|
||
|
<DD>Line number corresponding to the <CODE>$pc</CODE>.
|
||
|
</DL>
|
||
|
<P>
|
||
|
|
||
|
If invoked without arguments, this command prints a backtrace for the
|
||
|
whole stack. If given two integer arguments, it shows the frames whose
|
||
|
levels are between the two arguments (inclusive). If the two arguments
|
||
|
are equal, it shows the single frame at the corresponding level. It is
|
||
|
an error if <VAR>low-frame</VAR> is larger than the actual number of
|
||
|
frames. On the other hand, <VAR>high-frame</VAR> may be larger than the
|
||
|
actual number of frames, in which case only existing frames will be returned.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC403"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC403::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB commands are <SAMP>`backtrace'</SAMP> and <SAMP>`where'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC404"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC404::-->
|
||
|
<P>
|
||
|
|
||
|
Full stack backtrace:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-stack-list-frames
|
||
|
^done,stack=
|
||
|
[frame={level="0",addr="0x0001076c",func="foo",
|
||
|
file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="11"},
|
||
|
frame={level="1",addr="0x000107a4",func="foo",
|
||
|
file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
|
||
|
frame={level="2",addr="0x000107a4",func="foo",
|
||
|
file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
|
||
|
frame={level="3",addr="0x000107a4",func="foo",
|
||
|
file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
|
||
|
frame={level="4",addr="0x000107a4",func="foo",
|
||
|
file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
|
||
|
frame={level="5",addr="0x000107a4",func="foo",
|
||
|
file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
|
||
|
frame={level="6",addr="0x000107a4",func="foo",
|
||
|
file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
|
||
|
frame={level="7",addr="0x000107a4",func="foo",
|
||
|
file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
|
||
|
frame={level="8",addr="0x000107a4",func="foo",
|
||
|
file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
|
||
|
frame={level="9",addr="0x000107a4",func="foo",
|
||
|
file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
|
||
|
frame={level="10",addr="0x000107a4",func="foo",
|
||
|
file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
|
||
|
frame={level="11",addr="0x00010738",func="main",
|
||
|
file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="4"}]
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Show frames between <VAR>low_frame</VAR> and <VAR>high_frame</VAR>:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-stack-list-frames 3 5
|
||
|
^done,stack=
|
||
|
[frame={level="3",addr="0x000107a4",func="foo",
|
||
|
file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
|
||
|
frame={level="4",addr="0x000107a4",func="foo",
|
||
|
file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
|
||
|
frame={level="5",addr="0x000107a4",func="foo",
|
||
|
file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"}]
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Show a single frame:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-stack-list-frames 3 3
|
||
|
^done,stack=
|
||
|
[frame={level="3",addr="0x000107a4",func="foo",
|
||
|
file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"}]
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC405"></A>
|
||
|
<H3> The <CODE>-stack-list-locals</CODE> Command </H3>
|
||
|
<!--docid::SEC405::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC406"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC406::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -stack-list-locals <VAR>print-values</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Display the local variable names for the selected frame. If
|
||
|
<VAR>print-values</VAR> is 0 or <CODE>--no-values</CODE>, print only the names of
|
||
|
the variables; if it is 1 or <CODE>--all-values</CODE>, print also their
|
||
|
values; and if it is 2 or <CODE>--simple-values</CODE>, print the name,
|
||
|
type and value for simple data types and the name and type for arrays,
|
||
|
structures and unions. In this last case, a frontend can immediately
|
||
|
display the value of simple data types and create variable objects for
|
||
|
other data types when the user wishes to explore their values in
|
||
|
more detail.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC407"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC407::-->
|
||
|
<P>
|
||
|
|
||
|
<SAMP>`info locals'</SAMP> in GDB, <SAMP>`gdb_get_locals'</SAMP> in <CODE>gdbtk</CODE>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC408"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC408::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-stack-list-locals 0
|
||
|
^done,locals=[name="A",name="B",name="C"]
|
||
|
(gdb)
|
||
|
-stack-list-locals --all-values
|
||
|
^done,locals=[{name="A",value="1"},{name="B",value="2"},
|
||
|
{name="C",value="{1, 2, 3}"}]
|
||
|
-stack-list-locals --simple-values
|
||
|
^done,locals=[{name="A",type="int",value="1"},
|
||
|
{name="B",type="int",value="2"},{name="C",type="int [3]"}]
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC409"></A>
|
||
|
<H3> The <CODE>-stack-select-frame</CODE> Command </H3>
|
||
|
<!--docid::SEC409::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC410"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC410::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -stack-select-frame <VAR>framenum</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Change the selected frame. Select a different frame <VAR>framenum</VAR> on
|
||
|
the stack.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC411"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC411::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB commands are <SAMP>`frame'</SAMP>, <SAMP>`up'</SAMP>,
|
||
|
<SAMP>`down'</SAMP>, <SAMP>`select-frame'</SAMP>, <SAMP>`up-silent'</SAMP>, and <SAMP>`down-silent'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC412"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC412::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-stack-select-frame 2
|
||
|
^done
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="GDB/MI Variable Objects"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC413"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC388"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC449"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC248"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_26.html#SEC646"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H2> 24.12 GDB/MI Variable Objects </H2>
|
||
|
<!--docid::SEC413::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC414"></A>
|
||
|
<H3> Introduction to Variable Objects </H3>
|
||
|
<!--docid::SEC414::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="IDX1287"></A>
|
||
|
</P><P>
|
||
|
|
||
|
Variable objects are "object-oriented" MI interface for examining and
|
||
|
changing values of expressions. Unlike some other MI interfaces that
|
||
|
work with expressions, variable objects are specifically designed for
|
||
|
simple and efficient presentation in the frontend. A variable object
|
||
|
is identified by string name. When a variable object is created, the
|
||
|
frontend specifies the expression for that variable object. The
|
||
|
expression can be a simple variable, or it can be an arbitrary complex
|
||
|
expression, and can even involve CPU registers. After creating a
|
||
|
variable object, the frontend can invoke other variable object
|
||
|
operations--for example to obtain or change the value of a variable
|
||
|
object, or to change display format.
|
||
|
</P><P>
|
||
|
|
||
|
Variable objects have hierarchical tree structure. Any variable object
|
||
|
that corresponds to a composite type, such as structure in C, has
|
||
|
a number of child variable objects, for example corresponding to each
|
||
|
element of a structure. A child variable object can itself have
|
||
|
children, recursively. Recursion ends when we reach
|
||
|
leaf variable objects, which always have built-in types. Child variable
|
||
|
objects are created only by explicit request, so if a frontend
|
||
|
is not interested in the children of a particular variable object, no
|
||
|
child will be created.
|
||
|
</P><P>
|
||
|
|
||
|
For a leaf variable object it is possible to obtain its value as a
|
||
|
string, or set the value from a string. String value can be also
|
||
|
obtained for a non-leaf variable object, but it's generally a string
|
||
|
that only indicates the type of the object, and does not list its
|
||
|
contents. Assignment to a non-leaf variable object is not allowed.
|
||
|
|
||
|
A frontend does not need to read the values of all variable objects each time
|
||
|
the program stops. Instead, MI provides an update command that lists all
|
||
|
variable objects whose values has changed since the last update
|
||
|
operation. This considerably reduces the amount of data that must
|
||
|
be transferred to the frontend. As noted above, children variable
|
||
|
objects are created on demand, and only leaf variable objects have a
|
||
|
real value. As result, gdb will read target memory only for leaf
|
||
|
variables that frontend has created.
|
||
|
</P><P>
|
||
|
|
||
|
The automatic update is not always desirable. For example, a frontend
|
||
|
might want to keep a value of some expression for future reference,
|
||
|
and never update it. For another example, fetching memory is
|
||
|
relatively slow for embedded targets, so a frontend might want
|
||
|
to disable automatic update for the variables that are either not
|
||
|
visible on the screen, or "closed". This is possible using so
|
||
|
called "frozen variable objects". Such variable objects are never
|
||
|
implicitly updated.
|
||
|
</P><P>
|
||
|
|
||
|
The following is the complete set of GDB/MI operations defined to
|
||
|
access this functionality:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE>
|
||
|
<TR><TD><STRONG>Operation</STRONG></TD>
|
||
|
</TD><TD> <STRONG>Description</STRONG>
|
||
|
|
||
|
</TR>
|
||
|
<TR><TD><CODE>-var-create</CODE></TD>
|
||
|
</TD><TD> create a variable object
|
||
|
</TR>
|
||
|
<TR><TD><CODE>-var-delete</CODE></TD>
|
||
|
</TD><TD> delete the variable object and/or its children
|
||
|
</TR>
|
||
|
<TR><TD><CODE>-var-set-format</CODE></TD>
|
||
|
</TD><TD> set the display format of this variable
|
||
|
</TR>
|
||
|
<TR><TD><CODE>-var-show-format</CODE></TD>
|
||
|
</TD><TD> show the display format of this variable
|
||
|
</TR>
|
||
|
<TR><TD><CODE>-var-info-num-children</CODE></TD>
|
||
|
</TD><TD> tells how many children this object has
|
||
|
</TR>
|
||
|
<TR><TD><CODE>-var-list-children</CODE></TD>
|
||
|
</TD><TD> return a list of the object's children
|
||
|
</TR>
|
||
|
<TR><TD><CODE>-var-info-type</CODE></TD>
|
||
|
</TD><TD> show the type of this variable object
|
||
|
</TR>
|
||
|
<TR><TD><CODE>-var-info-expression</CODE></TD>
|
||
|
</TD><TD> print parent-relative expression that this variable object represents
|
||
|
</TR>
|
||
|
<TR><TD><CODE>-var-info-path-expression</CODE></TD>
|
||
|
</TD><TD> print full expression that this variable object represents
|
||
|
</TR>
|
||
|
<TR><TD><CODE>-var-show-attributes</CODE></TD>
|
||
|
</TD><TD> is this variable editable? does it exist here?
|
||
|
</TR>
|
||
|
<TR><TD><CODE>-var-evaluate-expression</CODE></TD>
|
||
|
</TD><TD> get the value of this variable
|
||
|
</TR>
|
||
|
<TR><TD><CODE>-var-assign</CODE></TD>
|
||
|
</TD><TD> set the value of this variable
|
||
|
</TR>
|
||
|
<TR><TD><CODE>-var-update</CODE></TD>
|
||
|
</TD><TD> update the variable and its children
|
||
|
</TR>
|
||
|
<TR><TD><CODE>-var-set-frozen</CODE></TD>
|
||
|
</TD><TD> set frozeness attribute
|
||
|
</TR></TABLE>
|
||
|
<P>
|
||
|
|
||
|
In the next subsection we describe each operation in detail and suggest
|
||
|
how it can be used.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC415"></A>
|
||
|
<H3> Description And Use of Operations on Variable Objects </H3>
|
||
|
<!--docid::SEC415::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC416"></A>
|
||
|
<H3> The <CODE>-var-create</CODE> Command </H3>
|
||
|
<!--docid::SEC416::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC417"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC417::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -var-create {<VAR>name</VAR> | "-"}
|
||
|
{<VAR>frame-addr</VAR> | "*"} <VAR>expression</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
This operation creates a variable object, which allows the monitoring of
|
||
|
a variable, the result of an expression, a memory cell or a CPU
|
||
|
register.
|
||
|
</P><P>
|
||
|
|
||
|
The <VAR>name</VAR> parameter is the string by which the object can be
|
||
|
referenced. It must be unique. If <SAMP>`-'</SAMP> is specified, the varobj
|
||
|
system will generate a string "varNNNNNN" automatically. It will be
|
||
|
unique provided that one does not specify <VAR>name</VAR> on that format.
|
||
|
The command fails if a duplicate name is found.
|
||
|
</P><P>
|
||
|
|
||
|
The frame under which the expression should be evaluated can be
|
||
|
specified by <VAR>frame-addr</VAR>. A <SAMP>`*'</SAMP> indicates that the current
|
||
|
frame should be used.
|
||
|
</P><P>
|
||
|
|
||
|
<VAR>expression</VAR> is any expression valid on the current language set (must not
|
||
|
begin with a <SAMP>`*'</SAMP>), or one of the following:
|
||
|
</P><P>
|
||
|
|
||
|
<UL>
|
||
|
<LI>
|
||
|
<SAMP>`*<VAR>addr</VAR>'</SAMP>, where <VAR>addr</VAR> is the address of a memory cell
|
||
|
<P>
|
||
|
|
||
|
<LI>
|
||
|
<SAMP>`*<VAR>addr</VAR>-<VAR>addr</VAR>'</SAMP> -- a memory address range (TBD)
|
||
|
<P>
|
||
|
|
||
|
<LI>
|
||
|
<SAMP>`$<VAR>regname</VAR>'</SAMP> -- a CPU register name
|
||
|
</UL>
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC418"></A>
|
||
|
<H4> Result </H4>
|
||
|
<!--docid::SEC418::-->
|
||
|
<P>
|
||
|
|
||
|
This operation returns the name, number of children and the type of the
|
||
|
object created. Type is returned as a string as the ones generated by
|
||
|
the GDB CLI:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> name="<VAR>name</VAR>",numchild="N",type="<VAR>type</VAR>"
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC419"></A>
|
||
|
<H3> The <CODE>-var-delete</CODE> Command </H3>
|
||
|
<!--docid::SEC419::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC420"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC420::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -var-delete [ -c ] <VAR>name</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Deletes a previously created variable object and all of its children.
|
||
|
With the <SAMP>`-c'</SAMP> option, just deletes the children.
|
||
|
</P><P>
|
||
|
|
||
|
Returns an error if the object <VAR>name</VAR> is not found.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC421"></A>
|
||
|
<H3> The <CODE>-var-set-format</CODE> Command </H3>
|
||
|
<!--docid::SEC421::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC422"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC422::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -var-set-format <VAR>name</VAR> <VAR>format-spec</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Sets the output format for the value of the object <VAR>name</VAR> to be
|
||
|
<VAR>format-spec</VAR>.
|
||
|
</P><P>
|
||
|
|
||
|
The syntax for the <VAR>format-spec</VAR> is as follows:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> <VAR>format-spec</VAR> ==>
|
||
|
{binary | decimal | hexadecimal | octal | natural}
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
The natural format is the default format choosen automatically
|
||
|
based on the variable type (like decimal for an <CODE>int</CODE>, hex
|
||
|
for pointers, etc.).
|
||
|
</P><P>
|
||
|
|
||
|
For a variable with children, the format is set only on the
|
||
|
variable itself, and the children are not affected.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC423"></A>
|
||
|
<H3> The <CODE>-var-show-format</CODE> Command </H3>
|
||
|
<!--docid::SEC423::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC424"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC424::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -var-show-format <VAR>name</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Returns the format used to display the value of the object <VAR>name</VAR>.
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> <VAR>format</VAR> ==>
|
||
|
<VAR>format-spec</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC425"></A>
|
||
|
<H3> The <CODE>-var-info-num-children</CODE> Command </H3>
|
||
|
<!--docid::SEC425::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC426"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC426::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -var-info-num-children <VAR>name</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Returns the number of children of a variable object <VAR>name</VAR>:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> numchild=<VAR>n</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC427"></A>
|
||
|
<H3> The <CODE>-var-list-children</CODE> Command </H3>
|
||
|
<!--docid::SEC427::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC428"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC428::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -var-list-children [<VAR>print-values</VAR>] <VAR>name</VAR>
|
||
|
</FONT></pre></td></tr></table><A NAME="-var-list-children"></A>
|
||
|
</P><P>
|
||
|
|
||
|
Return a list of the children of the specified variable object and
|
||
|
create variable objects for them, if they do not already exist. With
|
||
|
a single argument or if <VAR>print-values</VAR> has a value for of 0 or
|
||
|
<CODE>--no-values</CODE>, print only the names of the variables; if
|
||
|
<VAR>print-values</VAR> is 1 or <CODE>--all-values</CODE>, also print their
|
||
|
values; and if it is 2 or <CODE>--simple-values</CODE> print the name and
|
||
|
value for simple data types and just the name for arrays, structures
|
||
|
and unions.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC429"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC429::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-var-list-children n
|
||
|
^done,numchild=<VAR>n</VAR>,children=[{name=<VAR>name</VAR>,
|
||
|
numchild=<VAR>n</VAR>,type=<VAR>type</VAR>},(repeats N times)]
|
||
|
(gdb)
|
||
|
-var-list-children --all-values n
|
||
|
^done,numchild=<VAR>n</VAR>,children=[{name=<VAR>name</VAR>,
|
||
|
numchild=<VAR>n</VAR>,value=<VAR>value</VAR>,type=<VAR>type</VAR>},(repeats N times)]
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC430"></A>
|
||
|
<H3> The <CODE>-var-info-type</CODE> Command </H3>
|
||
|
<!--docid::SEC430::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC431"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC431::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -var-info-type <VAR>name</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Returns the type of the specified variable <VAR>name</VAR>. The type is
|
||
|
returned as a string in the same format as it is output by the
|
||
|
GDB CLI:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> type=<VAR>typename</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC432"></A>
|
||
|
<H3> The <CODE>-var-info-expression</CODE> Command </H3>
|
||
|
<!--docid::SEC432::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC433"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC433::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -var-info-expression <VAR>name</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Returns a string that is suitable for presenting this
|
||
|
variable object in user interface. The string is generally
|
||
|
not valid expression in the current language, and cannot be evaluated.
|
||
|
</P><P>
|
||
|
|
||
|
For example, if <CODE>a</CODE> is an array, and variable object
|
||
|
<CODE>A</CODE> was created for <CODE>a</CODE>, then we'll get this output:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) -var-info-expression A.1
|
||
|
^done,lang="C",exp="1"
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Here, the values of <CODE>lang</CODE> can be <CODE>{"C" | "C++" | "Java"}</CODE>.
|
||
|
</P><P>
|
||
|
|
||
|
Note that the output of the <CODE>-var-list-children</CODE> command also
|
||
|
includes those expressions, so the <CODE>-var-info-expression</CODE> command
|
||
|
is of limited use.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC434"></A>
|
||
|
<H3> The <CODE>-var-info-path-expression</CODE> Command </H3>
|
||
|
<!--docid::SEC434::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC435"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC435::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -var-info-path-expression <VAR>name</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Returns an expression that can be evaluated in the current
|
||
|
context and will yield the same value that a variable object has.
|
||
|
Compare this with the <CODE>-var-info-expression</CODE> command, which
|
||
|
result can be used only for UI presentation. Typical use of
|
||
|
the <CODE>-var-info-path-expression</CODE> command is creating a
|
||
|
watchpoint from a variable object.
|
||
|
</P><P>
|
||
|
|
||
|
For example, suppose <CODE>C</CODE> is a C<TT>++</TT> class, derived from class
|
||
|
<CODE>Base</CODE>, and that the <CODE>Base</CODE> class has a member called
|
||
|
<CODE>m_size</CODE>. Assume a variable <CODE>c</CODE> is has the type of
|
||
|
<CODE>C</CODE> and a variable object <CODE>C</CODE> was created for variable
|
||
|
<CODE>c</CODE>. Then, we'll get this output:
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) -var-info-path-expression C.Base.public.m_size
|
||
|
^done,path_expr=((Base)c).m_size)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC436"></A>
|
||
|
<H3> The <CODE>-var-show-attributes</CODE> Command </H3>
|
||
|
<!--docid::SEC436::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC437"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC437::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -var-show-attributes <VAR>name</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
List attributes of the specified variable object <VAR>name</VAR>:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> status=<VAR>attr</VAR> [ ( ,<VAR>attr</VAR> )* ]
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
where <VAR>attr</VAR> is <CODE>{ { editable | noneditable } | TBD }</CODE>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC438"></A>
|
||
|
<H3> The <CODE>-var-evaluate-expression</CODE> Command </H3>
|
||
|
<!--docid::SEC438::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC439"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC439::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -var-evaluate-expression <VAR>name</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Evaluates the expression that is represented by the specified variable
|
||
|
object and returns its value as a string. The format of the
|
||
|
string can be changed using the <CODE>-var-set-format</CODE> command.
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> value=<VAR>value</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Note that one must invoke <CODE>-var-list-children</CODE> for a variable
|
||
|
before the value of a child variable can be evaluated.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC440"></A>
|
||
|
<H3> The <CODE>-var-assign</CODE> Command </H3>
|
||
|
<!--docid::SEC440::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC441"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC441::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -var-assign <VAR>name</VAR> <VAR>expression</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Assigns the value of <VAR>expression</VAR> to the variable object specified
|
||
|
by <VAR>name</VAR>. The object must be <SAMP>`editable'</SAMP>. If the variable's
|
||
|
value is altered by the assign, the variable will show up in any
|
||
|
subsequent <CODE>-var-update</CODE> list.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC442"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC442::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-var-assign var1 3
|
||
|
^done,value="3"
|
||
|
(gdb)
|
||
|
-var-update *
|
||
|
^done,changelist=[{name="var1",in_scope="true",type_changed="false"}]
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC443"></A>
|
||
|
<H3> The <CODE>-var-update</CODE> Command </H3>
|
||
|
<!--docid::SEC443::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC444"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC444::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -var-update [<VAR>print-values</VAR>] {<VAR>name</VAR> | "*"}
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Reevaluate the expressions corresponding to the variable object
|
||
|
<VAR>name</VAR> and all its direct and indirect children, and return the
|
||
|
list of variable objects whose values have changed; <VAR>name</VAR> must
|
||
|
be a root variable object. Here, "changed" means that the result of
|
||
|
<CODE>-var-evaluate-expression</CODE> before and after the
|
||
|
<CODE>-var-update</CODE> is different. If <SAMP>`*'</SAMP> is used as the variable
|
||
|
object names, all existing variable objects are updated, except
|
||
|
for frozen ones (see <A HREF="gdb_25.html#-var-set-frozen">-var-set-frozen</A>). The option
|
||
|
<VAR>print-values</VAR> determines whether both names and values, or just
|
||
|
names are printed. The possible values of this options are the same
|
||
|
as for <CODE>-var-list-children</CODE> (see <A HREF="gdb_25.html#-var-list-children">-var-list-children</A>). It is
|
||
|
recommended to use the <SAMP>`--all-values'</SAMP> option, to reduce the
|
||
|
number of MI commands needed on each program stop.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC445"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC445::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-var-assign var1 3
|
||
|
^done,value="3"
|
||
|
(gdb)
|
||
|
-var-update --all-values var1
|
||
|
^done,changelist=[{name="var1",value="3",in_scope="true",
|
||
|
type_changed="false"}]
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="-var-update"></A>
|
||
|
The field in_scope may take three values:
|
||
|
</P><P>
|
||
|
|
||
|
<DL COMPACT>
|
||
|
<DT><CODE>"true"</CODE>
|
||
|
<DD>The variable object's current value is valid.
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE>"false"</CODE>
|
||
|
<DD>The variable object does not currently hold a valid value but it may
|
||
|
hold one in the future if its associated expression comes back into
|
||
|
scope.
|
||
|
<P>
|
||
|
|
||
|
<DT><CODE>"invalid"</CODE>
|
||
|
<DD>The variable object no longer holds a valid value.
|
||
|
This can occur when the executable file being debugged has changed,
|
||
|
either through recompilation or by using the GDB <CODE>file</CODE>
|
||
|
command. The front end should normally choose to delete these variable
|
||
|
objects.
|
||
|
</DL>
|
||
|
<P>
|
||
|
|
||
|
In the future new values may be added to this list so the front should
|
||
|
be prepared for this possibility. See section <A HREF="gdb_25.html#SEC249">GDB/MI Development and Front Ends</A>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC446"></A>
|
||
|
<H3> The <CODE>-var-set-frozen</CODE> Command </H3>
|
||
|
<!--docid::SEC446::-->
|
||
|
<A NAME="-var-set-frozen"></A>
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC447"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC447::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -var-set-frozen <VAR>name</VAR> <VAR>flag</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Set the frozenness flag on the variable object <VAR>name</VAR>. The
|
||
|
<VAR>flag</VAR> parameter should be either <SAMP>`1'</SAMP> to make the variable
|
||
|
frozen or <SAMP>`0'</SAMP> to make it unfrozen. If a variable object is
|
||
|
frozen, then neither itself, nor any of its children, are
|
||
|
implicitly updated by <CODE>-var-update</CODE> of
|
||
|
a parent variable or by <CODE>-var-update *</CODE>. Only
|
||
|
<CODE>-var-update</CODE> of the variable itself will update its value and
|
||
|
values of its children. After a variable object is unfrozen, it is
|
||
|
implicitly updated by all subsequent <CODE>-var-update</CODE> operations.
|
||
|
Unfreezing a variable does not update it, only subsequent
|
||
|
<CODE>-var-update</CODE> does.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC448"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC448::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-var-set-frozen V 1
|
||
|
^done
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="GDB/MI Data Manipulation"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC449"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC413"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC475"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC248"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_26.html#SEC646"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H2> 24.13 GDB/MI Data Manipulation </H2>
|
||
|
<!--docid::SEC449::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="IDX1288"></A>
|
||
|
<A NAME="IDX1289"></A>
|
||
|
This section describes the GDB/MI commands that manipulate data:
|
||
|
examine memory and registers, evaluate expressions, etc.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC450"></A>
|
||
|
<H3> The <CODE>-data-disassemble</CODE> Command </H3>
|
||
|
<!--docid::SEC450::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC451"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC451::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -data-disassemble
|
||
|
[ -s <VAR>start-addr</VAR> -e <VAR>end-addr</VAR> ]
|
||
|
| [ -f <VAR>filename</VAR> -l <VAR>linenum</VAR> [ -n <VAR>lines</VAR> ] ]
|
||
|
-- <VAR>mode</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Where:
|
||
|
</P><P>
|
||
|
|
||
|
<DL COMPACT>
|
||
|
<DT><SAMP>`<VAR>start-addr</VAR>'</SAMP>
|
||
|
<DD>is the beginning address (or <CODE>$pc</CODE>)
|
||
|
<DT><SAMP>`<VAR>end-addr</VAR>'</SAMP>
|
||
|
<DD>is the end address
|
||
|
<DT><SAMP>`<VAR>filename</VAR>'</SAMP>
|
||
|
<DD>is the name of the file to disassemble
|
||
|
<DT><SAMP>`<VAR>linenum</VAR>'</SAMP>
|
||
|
<DD>is the line number to disassemble around
|
||
|
<DT><SAMP>`<VAR>lines</VAR>'</SAMP>
|
||
|
<DD>is the number of disassembly lines to be produced. If it is -1,
|
||
|
the whole function will be disassembled, in case no <VAR>end-addr</VAR> is
|
||
|
specified. If <VAR>end-addr</VAR> is specified as a non-zero value, and
|
||
|
<VAR>lines</VAR> is lower than the number of disassembly lines between
|
||
|
<VAR>start-addr</VAR> and <VAR>end-addr</VAR>, only <VAR>lines</VAR> lines are
|
||
|
displayed; if <VAR>lines</VAR> is higher than the number of lines between
|
||
|
<VAR>start-addr</VAR> and <VAR>end-addr</VAR>, only the lines up to <VAR>end-addr</VAR>
|
||
|
are displayed.
|
||
|
<DT><SAMP>`<VAR>mode</VAR>'</SAMP>
|
||
|
<DD>is either 0 (meaning only disassembly) or 1 (meaning mixed source and
|
||
|
disassembly).
|
||
|
</DL>
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC452"></A>
|
||
|
<H4> Result </H4>
|
||
|
<!--docid::SEC452::-->
|
||
|
<P>
|
||
|
|
||
|
The output for each instruction is composed of four fields:
|
||
|
</P><P>
|
||
|
|
||
|
<UL>
|
||
|
<LI>Address
|
||
|
<LI>Func-name
|
||
|
<LI>Offset
|
||
|
<LI>Instruction
|
||
|
</UL>
|
||
|
<P>
|
||
|
|
||
|
Note that whatever included in the instruction field, is not manipulated
|
||
|
directly by GDB/MI, i.e., it is not possible to adjust its format.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC453"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC453::-->
|
||
|
<P>
|
||
|
|
||
|
There's no direct mapping from this command to the CLI.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC454"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC454::-->
|
||
|
<P>
|
||
|
|
||
|
Disassemble from the current value of <CODE>$pc</CODE> to <CODE>$pc + 20</CODE>:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-data-disassemble -s $pc -e "$pc + 20" -- 0
|
||
|
^done,
|
||
|
asm_insns=[
|
||
|
{address="0x000107c0",func-name="main",offset="4",
|
||
|
inst="mov 2, %o0"},
|
||
|
{address="0x000107c4",func-name="main",offset="8",
|
||
|
inst="sethi %hi(0x11800), %o2"},
|
||
|
{address="0x000107c8",func-name="main",offset="12",
|
||
|
inst="or %o2, 0x140, %o1\t! 0x11940 <_lib_version+8>"},
|
||
|
{address="0x000107cc",func-name="main",offset="16",
|
||
|
inst="sethi %hi(0x11800), %o2"},
|
||
|
{address="0x000107d0",func-name="main",offset="20",
|
||
|
inst="or %o2, 0x168, %o4\t! 0x11968 <_lib_version+48>"}]
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Disassemble the whole <CODE>main</CODE> function. Line 32 is part of
|
||
|
<CODE>main</CODE>.
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>-data-disassemble -f basics.c -l 32 -- 0
|
||
|
^done,asm_insns=[
|
||
|
{address="0x000107bc",func-name="main",offset="0",
|
||
|
inst="save %sp, -112, %sp"},
|
||
|
{address="0x000107c0",func-name="main",offset="4",
|
||
|
inst="mov 2, %o0"},
|
||
|
{address="0x000107c4",func-name="main",offset="8",
|
||
|
inst="sethi %hi(0x11800), %o2"},
|
||
|
[<small>...</small>]
|
||
|
{address="0x0001081c",func-name="main",offset="96",inst="ret "},
|
||
|
{address="0x00010820",func-name="main",offset="100",inst="restore "}]
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Disassemble 3 instructions from the start of <CODE>main</CODE>:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-data-disassemble -f basics.c -l 32 -n 3 -- 0
|
||
|
^done,asm_insns=[
|
||
|
{address="0x000107bc",func-name="main",offset="0",
|
||
|
inst="save %sp, -112, %sp"},
|
||
|
{address="0x000107c0",func-name="main",offset="4",
|
||
|
inst="mov 2, %o0"},
|
||
|
{address="0x000107c4",func-name="main",offset="8",
|
||
|
inst="sethi %hi(0x11800), %o2"}]
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Disassemble 3 instructions from the start of <CODE>main</CODE> in mixed mode:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-data-disassemble -f basics.c -l 32 -n 3 -- 1
|
||
|
^done,asm_insns=[
|
||
|
src_and_asm_line={line="31",
|
||
|
file="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb/ \
|
||
|
testsuite/gdb.mi/basics.c",line_asm_insn=[
|
||
|
{address="0x000107bc",func-name="main",offset="0",
|
||
|
inst="save %sp, -112, %sp"}]},
|
||
|
src_and_asm_line={line="32",
|
||
|
file="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb/ \
|
||
|
testsuite/gdb.mi/basics.c",line_asm_insn=[
|
||
|
{address="0x000107c0",func-name="main",offset="4",
|
||
|
inst="mov 2, %o0"},
|
||
|
{address="0x000107c4",func-name="main",offset="8",
|
||
|
inst="sethi %hi(0x11800), %o2"}]}]
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC455"></A>
|
||
|
<H3> The <CODE>-data-evaluate-expression</CODE> Command </H3>
|
||
|
<!--docid::SEC455::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC456"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC456::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -data-evaluate-expression <VAR>expr</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Evaluate <VAR>expr</VAR> as an expression. The expression could contain an
|
||
|
inferior function call. The function call will execute synchronously.
|
||
|
If the expression contains spaces, it must be enclosed in double quotes.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC457"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC457::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB commands are <SAMP>`print'</SAMP>, <SAMP>`output'</SAMP>, and
|
||
|
<SAMP>`call'</SAMP>. In <CODE>gdbtk</CODE> only, there's a corresponding
|
||
|
<SAMP>`gdb_eval'</SAMP> command.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC458"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC458::-->
|
||
|
<P>
|
||
|
|
||
|
In the following example, the numbers that precede the commands are the
|
||
|
<EM>tokens</EM> described in <A HREF="gdb_25.html#SEC245">GDB/MI Command Syntax</A>. Notice how GDB/MI returns the same tokens in its
|
||
|
output.
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>211-data-evaluate-expression A
|
||
|
211^done,value="1"
|
||
|
(gdb)
|
||
|
311-data-evaluate-expression &A
|
||
|
311^done,value="0xefffeb7c"
|
||
|
(gdb)
|
||
|
411-data-evaluate-expression A+3
|
||
|
411^done,value="4"
|
||
|
(gdb)
|
||
|
511-data-evaluate-expression "A + 3"
|
||
|
511^done,value="4"
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC459"></A>
|
||
|
<H3> The <CODE>-data-list-changed-registers</CODE> Command </H3>
|
||
|
<!--docid::SEC459::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC460"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC460::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -data-list-changed-registers
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Display a list of the registers that have changed.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC461"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC461::-->
|
||
|
<P>
|
||
|
|
||
|
GDB doesn't have a direct analog for this command; <CODE>gdbtk</CODE>
|
||
|
has the corresponding command <SAMP>`gdb_changed_register_list'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC462"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC462::-->
|
||
|
<P>
|
||
|
|
||
|
On a PPC MBX board:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-exec-continue
|
||
|
^running
|
||
|
|
||
|
(gdb)
|
||
|
*stopped,reason="breakpoint-hit",bkptno="1",frame={func="main",
|
||
|
args=[],file="try.c",fullname="/home/foo/bar/try.c",line="5"}
|
||
|
(gdb)
|
||
|
-data-list-changed-registers
|
||
|
^done,changed-registers=["0","1","2","4","5","6","7","8","9",
|
||
|
"10","11","13","14","15","16","17","18","19","20","21","22","23",
|
||
|
"24","25","26","27","28","30","31","64","65","66","67","69"]
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC463"></A>
|
||
|
<H3> The <CODE>-data-list-register-names</CODE> Command </H3>
|
||
|
<!--docid::SEC463::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC464"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC464::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -data-list-register-names [ ( <VAR>regno</VAR> )+ ]
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Show a list of register names for the current target. If no arguments
|
||
|
are given, it shows a list of the names of all the registers. If
|
||
|
integer numbers are given as arguments, it will print a list of the
|
||
|
names of the registers corresponding to the arguments. To ensure
|
||
|
consistency between a register name and its number, the output list may
|
||
|
include empty register names.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC465"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC465::-->
|
||
|
<P>
|
||
|
|
||
|
GDB does not have a command which corresponds to
|
||
|
<SAMP>`-data-list-register-names'</SAMP>. In <CODE>gdbtk</CODE> there is a
|
||
|
corresponding command <SAMP>`gdb_regnames'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC466"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC466::-->
|
||
|
<P>
|
||
|
|
||
|
For the PPC MBX board:
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-data-list-register-names
|
||
|
^done,register-names=["r0","r1","r2","r3","r4","r5","r6","r7",
|
||
|
"r8","r9","r10","r11","r12","r13","r14","r15","r16","r17","r18",
|
||
|
"r19","r20","r21","r22","r23","r24","r25","r26","r27","r28","r29",
|
||
|
"r30","r31","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9",
|
||
|
"f10","f11","f12","f13","f14","f15","f16","f17","f18","f19","f20",
|
||
|
"f21","f22","f23","f24","f25","f26","f27","f28","f29","f30","f31",
|
||
|
"", "pc","ps","cr","lr","ctr","xer"]
|
||
|
(gdb)
|
||
|
-data-list-register-names 1 2 3
|
||
|
^done,register-names=["r1","r2","r3"]
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC467"></A>
|
||
|
<H3> The <CODE>-data-list-register-values</CODE> Command </H3>
|
||
|
<!--docid::SEC467::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC468"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC468::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -data-list-register-values <VAR>fmt</VAR> [ ( <VAR>regno</VAR> )*]
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Display the registers' contents. <VAR>fmt</VAR> is the format according to
|
||
|
which the registers' contents are to be returned, followed by an optional
|
||
|
list of numbers specifying the registers to display. A missing list of
|
||
|
numbers indicates that the contents of all the registers must be returned.
|
||
|
</P><P>
|
||
|
|
||
|
Allowed formats for <VAR>fmt</VAR> are:
|
||
|
</P><P>
|
||
|
|
||
|
<DL COMPACT>
|
||
|
<DT><CODE>x</CODE>
|
||
|
<DD>Hexadecimal
|
||
|
<DT><CODE>o</CODE>
|
||
|
<DD>Octal
|
||
|
<DT><CODE>t</CODE>
|
||
|
<DD>Binary
|
||
|
<DT><CODE>d</CODE>
|
||
|
<DD>Decimal
|
||
|
<DT><CODE>r</CODE>
|
||
|
<DD>Raw
|
||
|
<DT><CODE>N</CODE>
|
||
|
<DD>Natural
|
||
|
</DL>
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC469"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC469::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB commands are <SAMP>`info reg'</SAMP>, <SAMP>`info
|
||
|
all-reg'</SAMP>, and (in <CODE>gdbtk</CODE>) <SAMP>`gdb_fetch_registers'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC470"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC470::-->
|
||
|
<P>
|
||
|
|
||
|
For a PPC MBX board (note: line breaks are for readability only, they
|
||
|
don't appear in the actual output):
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-data-list-register-values r 64 65
|
||
|
^done,register-values=[{number="64",value="0xfe00a300"},
|
||
|
{number="65",value="0x00029002"}]
|
||
|
(gdb)
|
||
|
-data-list-register-values x
|
||
|
^done,register-values=[{number="0",value="0xfe0043c8"},
|
||
|
{number="1",value="0x3fff88"},{number="2",value="0xfffffffe"},
|
||
|
{number="3",value="0x0"},{number="4",value="0xa"},
|
||
|
{number="5",value="0x3fff68"},{number="6",value="0x3fff58"},
|
||
|
{number="7",value="0xfe011e98"},{number="8",value="0x2"},
|
||
|
{number="9",value="0xfa202820"},{number="10",value="0xfa202808"},
|
||
|
{number="11",value="0x1"},{number="12",value="0x0"},
|
||
|
{number="13",value="0x4544"},{number="14",value="0xffdfffff"},
|
||
|
{number="15",value="0xffffffff"},{number="16",value="0xfffffeff"},
|
||
|
{number="17",value="0xefffffed"},{number="18",value="0xfffffffe"},
|
||
|
{number="19",value="0xffffffff"},{number="20",value="0xffffffff"},
|
||
|
{number="21",value="0xffffffff"},{number="22",value="0xfffffff7"},
|
||
|
{number="23",value="0xffffffff"},{number="24",value="0xffffffff"},
|
||
|
{number="25",value="0xffffffff"},{number="26",value="0xfffffffb"},
|
||
|
{number="27",value="0xffffffff"},{number="28",value="0xf7bfffff"},
|
||
|
{number="29",value="0x0"},{number="30",value="0xfe010000"},
|
||
|
{number="31",value="0x0"},{number="32",value="0x0"},
|
||
|
{number="33",value="0x0"},{number="34",value="0x0"},
|
||
|
{number="35",value="0x0"},{number="36",value="0x0"},
|
||
|
{number="37",value="0x0"},{number="38",value="0x0"},
|
||
|
{number="39",value="0x0"},{number="40",value="0x0"},
|
||
|
{number="41",value="0x0"},{number="42",value="0x0"},
|
||
|
{number="43",value="0x0"},{number="44",value="0x0"},
|
||
|
{number="45",value="0x0"},{number="46",value="0x0"},
|
||
|
{number="47",value="0x0"},{number="48",value="0x0"},
|
||
|
{number="49",value="0x0"},{number="50",value="0x0"},
|
||
|
{number="51",value="0x0"},{number="52",value="0x0"},
|
||
|
{number="53",value="0x0"},{number="54",value="0x0"},
|
||
|
{number="55",value="0x0"},{number="56",value="0x0"},
|
||
|
{number="57",value="0x0"},{number="58",value="0x0"},
|
||
|
{number="59",value="0x0"},{number="60",value="0x0"},
|
||
|
{number="61",value="0x0"},{number="62",value="0x0"},
|
||
|
{number="63",value="0x0"},{number="64",value="0xfe00a300"},
|
||
|
{number="65",value="0x29002"},{number="66",value="0x202f04b5"},
|
||
|
{number="67",value="0xfe0043b0"},{number="68",value="0xfe00b3e4"},
|
||
|
{number="69",value="0x20002b03"}]
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC471"></A>
|
||
|
<H3> The <CODE>-data-read-memory</CODE> Command </H3>
|
||
|
<!--docid::SEC471::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC472"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC472::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -data-read-memory [ -o <VAR>byte-offset</VAR> ]
|
||
|
<VAR>address</VAR> <VAR>word-format</VAR> <VAR>word-size</VAR>
|
||
|
<VAR>nr-rows</VAR> <VAR>nr-cols</VAR> [ <VAR>aschar</VAR> ]
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
where:
|
||
|
</P><P>
|
||
|
|
||
|
<DL COMPACT>
|
||
|
<DT><SAMP>`<VAR>address</VAR>'</SAMP>
|
||
|
<DD>An expression specifying the address of the first memory word to be
|
||
|
read. Complex expressions containing embedded white space should be
|
||
|
quoted using the C convention.
|
||
|
<P>
|
||
|
|
||
|
<DT><SAMP>`<VAR>word-format</VAR>'</SAMP>
|
||
|
<DD>The format to be used to print the memory words. The notation is the
|
||
|
same as for GDB's <CODE>print</CODE> command (see section <A HREF="gdb_9.html#SEC63">Output Formats</A>).
|
||
|
<P>
|
||
|
|
||
|
<DT><SAMP>`<VAR>word-size</VAR>'</SAMP>
|
||
|
<DD>The size of each memory word in bytes.
|
||
|
<P>
|
||
|
|
||
|
<DT><SAMP>`<VAR>nr-rows</VAR>'</SAMP>
|
||
|
<DD>The number of rows in the output table.
|
||
|
<P>
|
||
|
|
||
|
<DT><SAMP>`<VAR>nr-cols</VAR>'</SAMP>
|
||
|
<DD>The number of columns in the output table.
|
||
|
<P>
|
||
|
|
||
|
<DT><SAMP>`<VAR>aschar</VAR>'</SAMP>
|
||
|
<DD>If present, indicates that each row should include an ASCII dump. The
|
||
|
value of <VAR>aschar</VAR> is used as a padding character when a byte is not a
|
||
|
member of the printable ASCII character set (printable ASCII
|
||
|
characters are those whose code is between 32 and 126, inclusively).
|
||
|
<P>
|
||
|
|
||
|
<DT><SAMP>`<VAR>byte-offset</VAR>'</SAMP>
|
||
|
<DD>An offset to add to the <VAR>address</VAR> before fetching memory.
|
||
|
</DL>
|
||
|
<P>
|
||
|
|
||
|
This command displays memory contents as a table of <VAR>nr-rows</VAR> by
|
||
|
<VAR>nr-cols</VAR> words, each word being <VAR>word-size</VAR> bytes. In total,
|
||
|
<CODE><VAR>nr-rows</VAR> * <VAR>nr-cols</VAR> * <VAR>word-size</VAR></CODE> bytes are read
|
||
|
(returned as <SAMP>`total-bytes'</SAMP>). Should less than the requested number
|
||
|
of bytes be returned by the target, the missing words are identified
|
||
|
using <SAMP>`N/A'</SAMP>. The number of bytes read from the target is returned
|
||
|
in <SAMP>`nr-bytes'</SAMP> and the starting address used to read memory in
|
||
|
<SAMP>`addr'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
The address of the next/previous row or page is available in
|
||
|
<SAMP>`next-row'</SAMP> and <SAMP>`prev-row'</SAMP>, <SAMP>`next-page'</SAMP> and
|
||
|
<SAMP>`prev-page'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC473"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC473::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`x'</SAMP>. <CODE>gdbtk</CODE> has
|
||
|
<SAMP>`gdb_get_mem'</SAMP> memory read command.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC474"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC474::-->
|
||
|
<P>
|
||
|
|
||
|
Read six bytes of memory starting at <CODE>bytes+6</CODE> but then offset by
|
||
|
<CODE>-6</CODE> bytes. Format as three rows of two columns. One byte per
|
||
|
word. Display each word in hex.
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
9-data-read-memory -o -6 -- bytes+6 x 1 3 2
|
||
|
9^done,addr="0x00001390",nr-bytes="6",total-bytes="6",
|
||
|
next-row="0x00001396",prev-row="0x0000138e",next-page="0x00001396",
|
||
|
prev-page="0x0000138a",memory=[
|
||
|
{addr="0x00001390",data=["0x00","0x01"]},
|
||
|
{addr="0x00001392",data=["0x02","0x03"]},
|
||
|
{addr="0x00001394",data=["0x04","0x05"]}]
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Read two bytes of memory starting at address <CODE>shorts + 64</CODE> and
|
||
|
display as a single word formatted in decimal.
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
5-data-read-memory shorts+64 d 2 1 1
|
||
|
5^done,addr="0x00001510",nr-bytes="2",total-bytes="2",
|
||
|
next-row="0x00001512",prev-row="0x0000150e",
|
||
|
next-page="0x00001512",prev-page="0x0000150e",memory=[
|
||
|
{addr="0x00001510",data=["128"]}]
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Read thirty two bytes of memory starting at <CODE>bytes+16</CODE> and format
|
||
|
as eight rows of four columns. Include a string encoding with <SAMP>`x'</SAMP>
|
||
|
used as the non-printable character.
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
4-data-read-memory bytes+16 x 1 8 4 x
|
||
|
4^done,addr="0x000013a0",nr-bytes="32",total-bytes="32",
|
||
|
next-row="0x000013c0",prev-row="0x0000139c",
|
||
|
next-page="0x000013c0",prev-page="0x00001380",memory=[
|
||
|
{addr="0x000013a0",data=["0x10","0x11","0x12","0x13"],ascii="xxxx"},
|
||
|
{addr="0x000013a4",data=["0x14","0x15","0x16","0x17"],ascii="xxxx"},
|
||
|
{addr="0x000013a8",data=["0x18","0x19","0x1a","0x1b"],ascii="xxxx"},
|
||
|
{addr="0x000013ac",data=["0x1c","0x1d","0x1e","0x1f"],ascii="xxxx"},
|
||
|
{addr="0x000013b0",data=["0x20","0x21","0x22","0x23"],ascii=" !\"#"},
|
||
|
{addr="0x000013b4",data=["0x24","0x25","0x26","0x27"],ascii="$%&'"},
|
||
|
{addr="0x000013b8",data=["0x28","0x29","0x2a","0x2b"],ascii="()*+"},
|
||
|
{addr="0x000013bc",data=["0x2c","0x2d","0x2e","0x2f"],ascii=",-./"}]
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="GDB/MI Tracepoint Commands"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC475"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC449"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC476"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC248"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_26.html#SEC646"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H2> 24.14 GDB/MI Tracepoint Commands </H2>
|
||
|
<!--docid::SEC475::-->
|
||
|
<P>
|
||
|
|
||
|
The tracepoint commands are not yet implemented.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="GDB/MI Symbol Query"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC476"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC475"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC521"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC248"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_26.html#SEC646"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H2> 24.15 GDB/MI Symbol Query Commands </H2>
|
||
|
<!--docid::SEC476::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC477"></A>
|
||
|
<H3> The <CODE>-symbol-info-address</CODE> Command </H3>
|
||
|
<!--docid::SEC477::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC478"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC478::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -symbol-info-address <VAR>symbol</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Describe where <VAR>symbol</VAR> is stored.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC479"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC479::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`info address'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC480"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC480::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC481"></A>
|
||
|
<H3> The <CODE>-symbol-info-file</CODE> Command </H3>
|
||
|
<!--docid::SEC481::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC482"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC482::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -symbol-info-file
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Show the file for the symbol.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC483"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC483::-->
|
||
|
<P>
|
||
|
|
||
|
There's no equivalent GDB command. <CODE>gdbtk</CODE> has
|
||
|
<SAMP>`gdb_find_file'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC484"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC484::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC485"></A>
|
||
|
<H3> The <CODE>-symbol-info-function</CODE> Command </H3>
|
||
|
<!--docid::SEC485::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC486"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC486::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -symbol-info-function
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Show which function the symbol lives in.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC487"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC487::-->
|
||
|
<P>
|
||
|
|
||
|
<SAMP>`gdb_get_function'</SAMP> in <CODE>gdbtk</CODE>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC488"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC488::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC489"></A>
|
||
|
<H3> The <CODE>-symbol-info-line</CODE> Command </H3>
|
||
|
<!--docid::SEC489::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC490"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC490::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -symbol-info-line
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Show the core addresses of the code for a source line.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC491"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC491::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`info line'</SAMP>.
|
||
|
<CODE>gdbtk</CODE> has the <SAMP>`gdb_get_line'</SAMP> and <SAMP>`gdb_get_file'</SAMP> commands.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC492"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC492::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC493"></A>
|
||
|
<H3> The <CODE>-symbol-info-symbol</CODE> Command </H3>
|
||
|
<!--docid::SEC493::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC494"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC494::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -symbol-info-symbol <VAR>addr</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Describe what symbol is at location <VAR>addr</VAR>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC495"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC495::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`info symbol'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC496"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC496::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC497"></A>
|
||
|
<H3> The <CODE>-symbol-list-functions</CODE> Command </H3>
|
||
|
<!--docid::SEC497::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC498"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC498::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -symbol-list-functions
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
List the functions in the executable.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC499"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC499::-->
|
||
|
<P>
|
||
|
|
||
|
<SAMP>`info functions'</SAMP> in GDB, <SAMP>`gdb_listfunc'</SAMP> and
|
||
|
<SAMP>`gdb_search'</SAMP> in <CODE>gdbtk</CODE>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC500"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC500::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC501"></A>
|
||
|
<H3> The <CODE>-symbol-list-lines</CODE> Command </H3>
|
||
|
<!--docid::SEC501::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC502"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC502::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -symbol-list-lines <VAR>filename</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Print the list of lines that contain code and their associated program
|
||
|
addresses for the given source filename. The entries are sorted in
|
||
|
ascending PC order.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC503"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC503::-->
|
||
|
<P>
|
||
|
|
||
|
There is no corresponding GDB command.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC504"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC504::-->
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-symbol-list-lines basics.c
|
||
|
^done,lines=[{pc="0x08048554",line="7"},{pc="0x0804855a",line="8"}]
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table><P>
|
||
|
|
||
|
<A NAME="SEC505"></A>
|
||
|
<H3> The <CODE>-symbol-list-types</CODE> Command </H3>
|
||
|
<!--docid::SEC505::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC506"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC506::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -symbol-list-types
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
List all the type names.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC507"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC507::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding commands are <SAMP>`info types'</SAMP> in GDB,
|
||
|
<SAMP>`gdb_search'</SAMP> in <CODE>gdbtk</CODE>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC508"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC508::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC509"></A>
|
||
|
<H3> The <CODE>-symbol-list-variables</CODE> Command </H3>
|
||
|
<!--docid::SEC509::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC510"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC510::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -symbol-list-variables
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
List all the global and static variable names.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC511"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC511::-->
|
||
|
<P>
|
||
|
|
||
|
<SAMP>`info variables'</SAMP> in GDB, <SAMP>`gdb_search'</SAMP> in <CODE>gdbtk</CODE>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC512"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC512::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC513"></A>
|
||
|
<H3> The <CODE>-symbol-locate</CODE> Command </H3>
|
||
|
<!--docid::SEC513::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC514"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC514::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -symbol-locate
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC515"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC515::-->
|
||
|
<P>
|
||
|
|
||
|
<SAMP>`gdb_loc'</SAMP> in <CODE>gdbtk</CODE>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC516"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC516::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC517"></A>
|
||
|
<H3> The <CODE>-symbol-type</CODE> Command </H3>
|
||
|
<!--docid::SEC517::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC518"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC518::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -symbol-type <VAR>variable</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Show type of <VAR>variable</VAR>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC519"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC519::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`ptype'</SAMP>, <CODE>gdbtk</CODE> has
|
||
|
<SAMP>`gdb_obj_variable'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC520"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC520::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="GDB/MI File Commands"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC521"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC476"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC554"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC248"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_26.html#SEC646"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H2> 24.16 GDB/MI File Commands </H2>
|
||
|
<!--docid::SEC521::-->
|
||
|
<P>
|
||
|
|
||
|
This section describes the GDB/MI commands to specify executable file names
|
||
|
and to read in and obtain symbol table information.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC522"></A>
|
||
|
<H3> The <CODE>-file-exec-and-symbols</CODE> Command </H3>
|
||
|
<!--docid::SEC522::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC523"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC523::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -file-exec-and-symbols <VAR>file</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Specify the executable file to be debugged. This file is the one from
|
||
|
which the symbol table is also read. If no file is specified, the
|
||
|
command clears the executable and symbol information. If breakpoints
|
||
|
are set when using this command with no arguments, GDB will produce
|
||
|
error messages. Otherwise, no output is produced, except a completion
|
||
|
notification.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC524"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC524::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`file'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC525"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC525::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-file-exec-and-symbols /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
|
||
|
^done
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC526"></A>
|
||
|
<H3> The <CODE>-file-exec-file</CODE> Command </H3>
|
||
|
<!--docid::SEC526::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC527"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC527::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -file-exec-file <VAR>file</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Specify the executable file to be debugged. Unlike
|
||
|
<SAMP>`-file-exec-and-symbols'</SAMP>, the symbol table is <EM>not</EM> read
|
||
|
from this file. If used without argument, GDB clears the information
|
||
|
about the executable file. No output is produced, except a completion
|
||
|
notification.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC528"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC528::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`exec-file'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC529"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC529::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-file-exec-file /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
|
||
|
^done
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC530"></A>
|
||
|
<H3> The <CODE>-file-list-exec-sections</CODE> Command </H3>
|
||
|
<!--docid::SEC530::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC531"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC531::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -file-list-exec-sections
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
List the sections of the current executable file.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC532"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC532::-->
|
||
|
<P>
|
||
|
|
||
|
The GDB command <SAMP>`info file'</SAMP> shows, among the rest, the same
|
||
|
information as this command. <CODE>gdbtk</CODE> has a corresponding command
|
||
|
<SAMP>`gdb_load_info'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC533"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC533::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC534"></A>
|
||
|
<H3> The <CODE>-file-list-exec-source-file</CODE> Command </H3>
|
||
|
<!--docid::SEC534::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC535"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC535::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -file-list-exec-source-file
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
List the line number, the current source file, and the absolute path
|
||
|
to the current source file for the current executable. The macro
|
||
|
information field has a value of <SAMP>`1'</SAMP> or <SAMP>`0'</SAMP> depending on
|
||
|
whether or not the file includes preprocessor macro information.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC536"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC536::-->
|
||
|
<P>
|
||
|
|
||
|
The GDB equivalent is <SAMP>`info source'</SAMP>
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC537"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC537::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
123-file-list-exec-source-file
|
||
|
123^done,line="1",file="foo.c",fullname="/home/bar/foo.c,macro-info="1"
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC538"></A>
|
||
|
<H3> The <CODE>-file-list-exec-source-files</CODE> Command </H3>
|
||
|
<!--docid::SEC538::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC539"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC539::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -file-list-exec-source-files
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
List the source files for the current executable.
|
||
|
</P><P>
|
||
|
|
||
|
It will always output the filename, but only when GDB can find
|
||
|
the absolute file name of a source file, will it output the fullname.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC540"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC540::-->
|
||
|
<P>
|
||
|
|
||
|
The GDB equivalent is <SAMP>`info sources'</SAMP>.
|
||
|
<CODE>gdbtk</CODE> has an analogous command <SAMP>`gdb_listfiles'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC541"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC541::-->
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-file-list-exec-source-files
|
||
|
^done,files=[
|
||
|
{file=foo.c,fullname=/home/foo.c},
|
||
|
{file=/home/bar.c,fullname=/home/bar.c},
|
||
|
{file=gdb_could_not_find_fullpath.c}]
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table><P>
|
||
|
|
||
|
<A NAME="SEC542"></A>
|
||
|
<H3> The <CODE>-file-list-shared-libraries</CODE> Command </H3>
|
||
|
<!--docid::SEC542::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC543"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC543::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -file-list-shared-libraries
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
List the shared libraries in the program.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC544"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC544::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`info shared'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC545"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC545::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC546"></A>
|
||
|
<H3> The <CODE>-file-list-symbol-files</CODE> Command </H3>
|
||
|
<!--docid::SEC546::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC547"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC547::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -file-list-symbol-files
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
List symbol files.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC548"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC548::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`info file'</SAMP> (part of it).
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC549"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC549::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC550"></A>
|
||
|
<H3> The <CODE>-file-symbol-file</CODE> Command </H3>
|
||
|
<!--docid::SEC550::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC551"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC551::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -file-symbol-file <VAR>file</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Read symbol table info from the specified <VAR>file</VAR> argument. When
|
||
|
used without arguments, clears GDB's symbol table info. No output is
|
||
|
produced, except for a completion notification.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC552"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC552::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`symbol-file'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC553"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC553::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-file-symbol-file /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
|
||
|
^done
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="GDB/MI Target Manipulation"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC554"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC521"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC595"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC248"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_26.html#SEC646"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H2> 24.17 GDB/MI Target Manipulation Commands </H2>
|
||
|
<!--docid::SEC554::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC555"></A>
|
||
|
<H3> The <CODE>-target-attach</CODE> Command </H3>
|
||
|
<!--docid::SEC555::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC556"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC556::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -target-attach <VAR>pid</VAR> | <VAR>file</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Attach to a process <VAR>pid</VAR> or a file <VAR>file</VAR> outside of GDB.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC557"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC557::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`attach'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC558"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC558::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC559"></A>
|
||
|
<H3> The <CODE>-target-compare-sections</CODE> Command </H3>
|
||
|
<!--docid::SEC559::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC560"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC560::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -target-compare-sections [ <VAR>section</VAR> ]
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Compare data of section <VAR>section</VAR> on target to the exec file.
|
||
|
Without the argument, all sections are compared.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC561"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC561::-->
|
||
|
<P>
|
||
|
|
||
|
The GDB equivalent is <SAMP>`compare-sections'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC562"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC562::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC563"></A>
|
||
|
<H3> The <CODE>-target-detach</CODE> Command </H3>
|
||
|
<!--docid::SEC563::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC564"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC564::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -target-detach
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Detach from the remote target which normally resumes its execution.
|
||
|
There's no output.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC565"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC565::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`detach'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC566"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC566::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-target-detach
|
||
|
^done
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC567"></A>
|
||
|
<H3> The <CODE>-target-disconnect</CODE> Command </H3>
|
||
|
<!--docid::SEC567::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC568"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC568::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -target-disconnect
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Disconnect from the remote target. There's no output and the target is
|
||
|
generally not resumed.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC569"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC569::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`disconnect'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC570"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC570::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-target-disconnect
|
||
|
^done
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC571"></A>
|
||
|
<H3> The <CODE>-target-download</CODE> Command </H3>
|
||
|
<!--docid::SEC571::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC572"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC572::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -target-download
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Loads the executable onto the remote target.
|
||
|
It prints out an update message every half second, which includes the fields:
|
||
|
</P><P>
|
||
|
|
||
|
<DL COMPACT>
|
||
|
<DT><SAMP>`section'</SAMP>
|
||
|
<DD>The name of the section.
|
||
|
<DT><SAMP>`section-sent'</SAMP>
|
||
|
<DD>The size of what has been sent so far for that section.
|
||
|
<DT><SAMP>`section-size'</SAMP>
|
||
|
<DD>The size of the section.
|
||
|
<DT><SAMP>`total-sent'</SAMP>
|
||
|
<DD>The total size of what was sent so far (the current and the previous sections).
|
||
|
<DT><SAMP>`total-size'</SAMP>
|
||
|
<DD>The size of the overall executable to download.
|
||
|
</DL>
|
||
|
<P>
|
||
|
|
||
|
Each message is sent as status record (see section <A HREF="gdb_25.html#SEC247">GDB/MI Output Syntax</A>).
|
||
|
</P><P>
|
||
|
|
||
|
In addition, it prints the name and size of the sections, as they are
|
||
|
downloaded. These messages include the following fields:
|
||
|
</P><P>
|
||
|
|
||
|
<DL COMPACT>
|
||
|
<DT><SAMP>`section'</SAMP>
|
||
|
<DD>The name of the section.
|
||
|
<DT><SAMP>`section-size'</SAMP>
|
||
|
<DD>The size of the section.
|
||
|
<DT><SAMP>`total-size'</SAMP>
|
||
|
<DD>The size of the overall executable to download.
|
||
|
</DL>
|
||
|
<P>
|
||
|
|
||
|
At the end, a summary is printed.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC573"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC573::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`load'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC574"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC574::-->
|
||
|
<P>
|
||
|
|
||
|
Note: each status message appears on a single line. Here the messages
|
||
|
have been broken down so that they can fit onto a page.
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-target-download
|
||
|
+download,{section=".text",section-size="6668",total-size="9880"}
|
||
|
+download,{section=".text",section-sent="512",section-size="6668",
|
||
|
total-sent="512",total-size="9880"}
|
||
|
+download,{section=".text",section-sent="1024",section-size="6668",
|
||
|
total-sent="1024",total-size="9880"}
|
||
|
+download,{section=".text",section-sent="1536",section-size="6668",
|
||
|
total-sent="1536",total-size="9880"}
|
||
|
+download,{section=".text",section-sent="2048",section-size="6668",
|
||
|
total-sent="2048",total-size="9880"}
|
||
|
+download,{section=".text",section-sent="2560",section-size="6668",
|
||
|
total-sent="2560",total-size="9880"}
|
||
|
+download,{section=".text",section-sent="3072",section-size="6668",
|
||
|
total-sent="3072",total-size="9880"}
|
||
|
+download,{section=".text",section-sent="3584",section-size="6668",
|
||
|
total-sent="3584",total-size="9880"}
|
||
|
+download,{section=".text",section-sent="4096",section-size="6668",
|
||
|
total-sent="4096",total-size="9880"}
|
||
|
+download,{section=".text",section-sent="4608",section-size="6668",
|
||
|
total-sent="4608",total-size="9880"}
|
||
|
+download,{section=".text",section-sent="5120",section-size="6668",
|
||
|
total-sent="5120",total-size="9880"}
|
||
|
+download,{section=".text",section-sent="5632",section-size="6668",
|
||
|
total-sent="5632",total-size="9880"}
|
||
|
+download,{section=".text",section-sent="6144",section-size="6668",
|
||
|
total-sent="6144",total-size="9880"}
|
||
|
+download,{section=".text",section-sent="6656",section-size="6668",
|
||
|
total-sent="6656",total-size="9880"}
|
||
|
+download,{section=".init",section-size="28",total-size="9880"}
|
||
|
+download,{section=".fini",section-size="28",total-size="9880"}
|
||
|
+download,{section=".data",section-size="3156",total-size="9880"}
|
||
|
+download,{section=".data",section-sent="512",section-size="3156",
|
||
|
total-sent="7236",total-size="9880"}
|
||
|
+download,{section=".data",section-sent="1024",section-size="3156",
|
||
|
total-sent="7748",total-size="9880"}
|
||
|
+download,{section=".data",section-sent="1536",section-size="3156",
|
||
|
total-sent="8260",total-size="9880"}
|
||
|
+download,{section=".data",section-sent="2048",section-size="3156",
|
||
|
total-sent="8772",total-size="9880"}
|
||
|
+download,{section=".data",section-sent="2560",section-size="3156",
|
||
|
total-sent="9284",total-size="9880"}
|
||
|
+download,{section=".data",section-sent="3072",section-size="3156",
|
||
|
total-sent="9796",total-size="9880"}
|
||
|
^done,address="0x10004",load-size="9880",transfer-rate="6586",
|
||
|
write-rate="429"
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC575"></A>
|
||
|
<H3> The <CODE>-target-exec-status</CODE> Command </H3>
|
||
|
<!--docid::SEC575::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC576"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC576::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -target-exec-status
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Provide information on the state of the target (whether it is running or
|
||
|
not, for instance).
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC577"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC577::-->
|
||
|
<P>
|
||
|
|
||
|
There's no equivalent GDB command.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC578"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC578::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC579"></A>
|
||
|
<H3> The <CODE>-target-list-available-targets</CODE> Command </H3>
|
||
|
<!--docid::SEC579::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC580"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC580::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -target-list-available-targets
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
List the possible targets to connect to.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC581"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC581::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`help target'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC582"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC582::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC583"></A>
|
||
|
<H3> The <CODE>-target-list-current-targets</CODE> Command </H3>
|
||
|
<!--docid::SEC583::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC584"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC584::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -target-list-current-targets
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Describe the current target.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC585"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC585::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding information is printed by <SAMP>`info file'</SAMP> (among
|
||
|
other things).
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC586"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC586::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC587"></A>
|
||
|
<H3> The <CODE>-target-list-parameters</CODE> Command </H3>
|
||
|
<!--docid::SEC587::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC588"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC588::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -target-list-parameters
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC589"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC589::-->
|
||
|
<P>
|
||
|
|
||
|
No equivalent.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC590"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC590::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC591"></A>
|
||
|
<H3> The <CODE>-target-select</CODE> Command </H3>
|
||
|
<!--docid::SEC591::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC592"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC592::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -target-select <VAR>type</VAR> <VAR>parameters <small>...</small></VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Connect GDB to the remote target. This command takes two args:
|
||
|
</P><P>
|
||
|
|
||
|
<DL COMPACT>
|
||
|
<DT><SAMP>`<VAR>type</VAR>'</SAMP>
|
||
|
<DD>The type of target, for instance <SAMP>`async'</SAMP>, <SAMP>`remote'</SAMP>, etc.
|
||
|
<DT><SAMP>`<VAR>parameters</VAR>'</SAMP>
|
||
|
<DD>Device names, host names and the like. See section <A HREF="gdb_17.html#SEC160">Commands for Managing Targets</A>, for more details.
|
||
|
</DL>
|
||
|
<P>
|
||
|
|
||
|
The output is a connection notification, followed by the address at
|
||
|
which the target program is, in the following form:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>^connected,addr="<VAR>address</VAR>",func="<VAR>function name</VAR>",
|
||
|
args=[<VAR>arg list</VAR>]
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC593"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC593::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`target'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC594"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC594::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-target-select async /dev/ttya
|
||
|
^connected,addr="0xfe00a300",func="??",args=[]
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="GDB/MI File Transfer Commands"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC595"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC554"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC608"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC248"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_26.html#SEC646"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H2> 24.18 GDB/MI File Transfer Commands </H2>
|
||
|
<!--docid::SEC595::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC596"></A>
|
||
|
<H3> The <CODE>-target-file-put</CODE> Command </H3>
|
||
|
<!--docid::SEC596::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC597"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC597::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -target-file-put <VAR>hostfile</VAR> <VAR>targetfile</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Copy file <VAR>hostfile</VAR> from the host system (the machine running
|
||
|
GDB) to <VAR>targetfile</VAR> on the target system.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC598"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC598::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`remote put'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC599"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC599::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-target-file-put localfile remotefile
|
||
|
^done
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC600"></A>
|
||
|
<H3> The <CODE>-target-file-put</CODE> Command </H3>
|
||
|
<!--docid::SEC600::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC601"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC601::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -target-file-get <VAR>targetfile</VAR> <VAR>hostfile</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Copy file <VAR>targetfile</VAR> from the target system to <VAR>hostfile</VAR>
|
||
|
on the host system.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC602"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC602::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`remote get'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC603"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC603::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-target-file-get remotefile localfile
|
||
|
^done
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC604"></A>
|
||
|
<H3> The <CODE>-target-file-delete</CODE> Command </H3>
|
||
|
<!--docid::SEC604::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC605"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC605::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -target-file-delete <VAR>targetfile</VAR>
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Delete <VAR>targetfile</VAR> from the target system.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC606"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC606::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`remote delete'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC607"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC607::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-target-file-delete remotefile
|
||
|
^done
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="GDB/MI Miscellaneous Commands"></A>
|
||
|
<HR SIZE="6">
|
||
|
<A NAME="SEC608"></A>
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC595"> < </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_26.html#SEC646"> > </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC248"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC242"> Up </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_26.html#SEC646"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<H2> 24.19 Miscellaneous GDB/MI Commands </H2>
|
||
|
<!--docid::SEC608::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC609"></A>
|
||
|
<H3> The <CODE>-gdb-exit</CODE> Command </H3>
|
||
|
<!--docid::SEC609::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC610"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC610::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -gdb-exit
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Exit GDB immediately.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC611"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC611::-->
|
||
|
<P>
|
||
|
|
||
|
Approximately corresponds to <SAMP>`quit'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC612"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC612::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-gdb-exit
|
||
|
^exit
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC613"></A>
|
||
|
<H3> The <CODE>-exec-abort</CODE> Command </H3>
|
||
|
<!--docid::SEC613::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC614"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC614::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -exec-abort
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Kill the inferior running program.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC615"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC615::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`kill'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC616"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC616::-->
|
||
|
N.A.
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC617"></A>
|
||
|
<H3> The <CODE>-gdb-set</CODE> Command </H3>
|
||
|
<!--docid::SEC617::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC618"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC618::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -gdb-set
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Set an internal GDB variable.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC619"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC619::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`set'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC620"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC620::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-gdb-set $foo=3
|
||
|
^done
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC621"></A>
|
||
|
<H3> The <CODE>-gdb-show</CODE> Command </H3>
|
||
|
<!--docid::SEC621::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC622"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC622::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -gdb-show
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Show the current value of a GDB variable.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC623"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC623::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`show'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC624"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC624::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-gdb-show annotate
|
||
|
^done,value="0"
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC625"></A>
|
||
|
<H3> The <CODE>-gdb-version</CODE> Command </H3>
|
||
|
<!--docid::SEC625::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC626"></A>
|
||
|
<H4> Synopsis </H4>
|
||
|
<!--docid::SEC626::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre> -gdb-version
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Show version information for GDB. Used mostly in testing.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC627"></A>
|
||
|
<H4> GDB Command </H4>
|
||
|
<!--docid::SEC627::-->
|
||
|
<P>
|
||
|
|
||
|
The GDB equivalent is <SAMP>`show version'</SAMP>. GDB by
|
||
|
default shows this information when you start an interactive session.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC628"></A>
|
||
|
<H4> Example </H4>
|
||
|
<!--docid::SEC628::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-gdb-version
|
||
|
~GNU gdb 5.2.1
|
||
|
~Copyright 2000 Free Software Foundation, Inc.
|
||
|
~GDB is free software, covered by the GNU General Public License, and
|
||
|
~you are welcome to change it and/or distribute copies of it under
|
||
|
~ certain conditions.
|
||
|
~Type "show copying" to see the conditions.
|
||
|
~There is absolutely no warranty for GDB. Type "show warranty" for
|
||
|
~ details.
|
||
|
~This GDB was configured as
|
||
|
"--host=sparc-sun-solaris2.5.1 --target=ppc-eabi".
|
||
|
^done
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC629"></A>
|
||
|
<H3> The <CODE>-list-features</CODE> Command </H3>
|
||
|
<!--docid::SEC629::-->
|
||
|
<P>
|
||
|
|
||
|
Returns a list of particular features of the MI protocol that
|
||
|
this version of gdb implements. A feature can be a command,
|
||
|
or a new field in an output of some command, or even an
|
||
|
important bugfix. While a frontend can sometimes detect presence
|
||
|
of a feature at runtime, it is easier to perform detection at debugger
|
||
|
startup.
|
||
|
</P><P>
|
||
|
|
||
|
The command returns a list of strings, with each string naming an
|
||
|
available feature. Each returned string is just a name, it does not
|
||
|
have any internal structure. The list of possible feature names
|
||
|
is given below.
|
||
|
</P><P>
|
||
|
|
||
|
Example output:
|
||
|
</P><P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb) -list-features
|
||
|
^done,result=["feature1","feature2"]
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
The current list of features is:
|
||
|
</P><P>
|
||
|
|
||
|
<UL>
|
||
|
<LI>
|
||
|
<SAMP>`frozen-varobjs'</SAMP>---indicates presence of the
|
||
|
<CODE>-var-set-frozen</CODE> command, as well as possible presense of the
|
||
|
<CODE>frozen</CODE> field in the output of <CODE>-varobj-create</CODE>.
|
||
|
<LI>
|
||
|
<SAMP>`pending-breakpoints'</SAMP>---indicates presence of the <CODE>-f</CODE>
|
||
|
option to the <CODE>-break-insert</CODE> command.
|
||
|
<P>
|
||
|
|
||
|
</UL>
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC630"></A>
|
||
|
<H3> The <CODE>-interpreter-exec</CODE> Command </H3>
|
||
|
<!--docid::SEC630::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC631"></A>
|
||
|
<H3> Synopsis </H3>
|
||
|
<!--docid::SEC631::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>-interpreter-exec <VAR>interpreter</VAR> <VAR>command</VAR>
|
||
|
</FONT></pre></td></tr></table><A NAME="-interpreter-exec"></A>
|
||
|
</P><P>
|
||
|
|
||
|
Execute the specified <VAR>command</VAR> in the given <VAR>interpreter</VAR>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC632"></A>
|
||
|
<H3> GDB Command </H3>
|
||
|
<!--docid::SEC632::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`interpreter-exec'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC633"></A>
|
||
|
<H3> Example </H3>
|
||
|
<!--docid::SEC633::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-interpreter-exec console "break main"
|
||
|
&"During symbol reading, couldn't parse type; debugger out of date?.\n"
|
||
|
&"During symbol reading, bad structure-type format.\n"
|
||
|
~"Breakpoint 1 at 0x8074fc6: file ../../src/gdb/main.c, line 743.\n"
|
||
|
^done
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC634"></A>
|
||
|
<H3> The <CODE>-inferior-tty-set</CODE> Command </H3>
|
||
|
<!--docid::SEC634::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC635"></A>
|
||
|
<H3> Synopsis </H3>
|
||
|
<!--docid::SEC635::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>-inferior-tty-set /dev/pts/1
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Set terminal for future runs of the program being debugged.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC636"></A>
|
||
|
<H3> GDB Command </H3>
|
||
|
<!--docid::SEC636::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`set inferior-tty'</SAMP> /dev/pts/1.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC637"></A>
|
||
|
<H3> Example </H3>
|
||
|
<!--docid::SEC637::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-inferior-tty-set /dev/pts/1
|
||
|
^done
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC638"></A>
|
||
|
<H3> The <CODE>-inferior-tty-show</CODE> Command </H3>
|
||
|
<!--docid::SEC638::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC639"></A>
|
||
|
<H3> Synopsis </H3>
|
||
|
<!--docid::SEC639::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>-inferior-tty-show
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Show terminal for future runs of program being debugged.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC640"></A>
|
||
|
<H3> GDB Command </H3>
|
||
|
<!--docid::SEC640::-->
|
||
|
<P>
|
||
|
|
||
|
The corresponding GDB command is <SAMP>`show inferior-tty'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC641"></A>
|
||
|
<H3> Example </H3>
|
||
|
<!--docid::SEC641::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-inferior-tty-set /dev/pts/1
|
||
|
^done
|
||
|
(gdb)
|
||
|
-inferior-tty-show
|
||
|
^done,inferior_tty_terminal="/dev/pts/1"
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="SEC642"></A>
|
||
|
<H3> The <CODE>-enable-timings</CODE> Command </H3>
|
||
|
<!--docid::SEC642::-->
|
||
|
<P>
|
||
|
|
||
|
<A NAME="SEC643"></A>
|
||
|
<H3> Synopsis </H3>
|
||
|
<!--docid::SEC643::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>-enable-timings [yes | no]
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
Toggle the printing of the wallclock, user and system times for an MI
|
||
|
command as a field in its output. This command is to help frontend
|
||
|
developers optimize the performance of their code. No argument is
|
||
|
equivalent to <SAMP>`yes'</SAMP>.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC644"></A>
|
||
|
<H3> GDB Command </H3>
|
||
|
<!--docid::SEC644::-->
|
||
|
<P>
|
||
|
|
||
|
No equivalent.
|
||
|
</P><P>
|
||
|
|
||
|
<A NAME="SEC645"></A>
|
||
|
<H3> Example </H3>
|
||
|
<!--docid::SEC645::-->
|
||
|
<P>
|
||
|
|
||
|
<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(gdb)
|
||
|
-enable-timings
|
||
|
^done
|
||
|
(gdb)
|
||
|
-break-insert main
|
||
|
^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
|
||
|
addr="0x080484ed",func="main",file="myprog.c",
|
||
|
fullname="/home/nickrob/myprog.c",line="73",times="0"},
|
||
|
time={wallclock="0.05185",user="0.00800",system="0.00000"}
|
||
|
(gdb)
|
||
|
-enable-timings no
|
||
|
^done
|
||
|
(gdb)
|
||
|
-exec-run
|
||
|
^running
|
||
|
(gdb)
|
||
|
*stopped,reason="breakpoint-hit",bkptno="1",thread-id="0",
|
||
|
frame={addr="0x080484ed",func="main",args=[{name="argc",value="1"},
|
||
|
{name="argv",value="0xbfb60364"}],file="myprog.c",
|
||
|
fullname="/home/nickrob/myprog.c",line="73"}
|
||
|
(gdb)
|
||
|
</FONT></pre></td></tr></table></P><P>
|
||
|
|
||
|
<A NAME="Annotations"></A>
|
||
|
<HR SIZE="6">
|
||
|
<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
|
||
|
<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_25.html#SEC248"> << </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_26.html#SEC646"> >> </A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
|
||
|
<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
|
||
|
</TR></TABLE>
|
||
|
<BR>
|
||
|
<FONT SIZE="-1">
|
||
|
|
||
|
<address>
|
||
|
|
||
|
<p>Please send FSF & GNU inquiries & questions to <a
|
||
|
href="mailto:gnu@gnu.org">gnu@gnu.org</a>. There are also <a
|
||
|
href="http://www.gnu.org/home.html#ContactInfo">other ways to
|
||
|
contact</a> the FSF.</p>
|
||
|
|
||
|
<p>These pages are maintained by <a
|
||
|
href="http://www.gnu.org/software/gdb/">the GDB developers</a>.</p>
|
||
|
|
||
|
<p>Copyright Free Software Foundation, Inc., 59 Temple Place - Suite
|
||
|
330, Boston, MA 02111, USA.</p>
|
||
|
|
||
|
<p>Verbatim copying and distribution of this entire article is
|
||
|
permitted in any medium, provided this notice is preserved.</p>
|
||
|
|
||
|
</address>
|
||
|
|
||
|
This document was generated
|
||
|
by <I>GDB Administrator</I> on <I>March, 27 2008</I>
|
||
|
using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
|
||
|
"><I>texi2html</I></A>
|
||
|
|
||
|
</BODY>
|
||
|
</HTML>
|