mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2024-11-24 20:49:43 +00:00
3901 lines
94 KiB
Plaintext
3901 lines
94 KiB
Plaintext
@c \input texinfo @c -*-texinfo-*-
|
|
@c @c %**start of header
|
|
@c @setfilename gdbmi.info
|
|
@c @settitle GDB/MI Machine Interface
|
|
@c @setchapternewpage off
|
|
@c @c %**end of header
|
|
|
|
@c @ifinfo
|
|
@c This file documents GDB/MI, a Machine Interface to GDB.
|
|
|
|
@c Copyright (C) 2000, Free Software Foundation, Inc.
|
|
@c Contributed by Cygnus Solutions.
|
|
|
|
@c Permission is granted to make and distribute verbatim copies of this
|
|
@c manual provided the copyright notice and this permission notice are
|
|
@c preserved on all copies.
|
|
|
|
@c @ignore
|
|
@c Permission is granted to process this file through TeX and print the
|
|
@c results, provided the printed document carries copying permission notice
|
|
@c identical to this one except for the removal of this paragraph (this
|
|
@c paragraph not being relevant to the printed manual).
|
|
|
|
@c @end ignore
|
|
@c Permission is granted to copy and distribute modified versions of this
|
|
@c manual under the conditions for verbatim copying, provided also that the
|
|
@c entire resulting derived work is distributed under the terms of a
|
|
@c permission notice identical to this one.
|
|
|
|
@c Permission is granted to copy and distribute translations of this manual
|
|
@c into another language, under the above conditions for modified versions.
|
|
@c @end ifinfo
|
|
|
|
@c @c This title page illustrates only one of the
|
|
@c @c two methods of forming a title page.
|
|
|
|
@c @titlepage
|
|
@c @title GDB/MI
|
|
@c @subtitle Version 0.2
|
|
@c @subtitle Feb 2000
|
|
@c @author Andrew Cagney, Fernando Nasser and Elena Zannoni
|
|
|
|
@c @c The following two commands
|
|
@c @c start the copyright page.
|
|
@c @page
|
|
@c @vskip 0pt plus 1filll
|
|
@c Permission is granted to make and distribute verbatim copies of this
|
|
@c manual provided the copyright notice and this permission notice are
|
|
@c preserved on all copies.
|
|
|
|
@c Copyright @copyright{} 2000, Free Software Foundation, Inc.
|
|
@c @end titlepage
|
|
|
|
@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% CHAPTER %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
@node GDB/MI
|
|
@chapter The @sc{gdb/mi} Interface
|
|
|
|
@unnumberedsec Function and Purpose
|
|
|
|
@cindex @sc{gdb/mi}, its purpose
|
|
@sc{gdb/mi} is a line based machine oriented text interface to GDB. It is
|
|
specifically intended to support the development of systems which use
|
|
the debugger as just one small component of a larger system.
|
|
|
|
This chapter is a specification of the @sc{gdb/mi} interface. It is written
|
|
in the form of a reference manual.
|
|
|
|
Note that @sc{gdb/mi} is still under construction, so some of the
|
|
features described below are incomplete and subject to change.
|
|
|
|
@unnumberedsec Notation and Terminology
|
|
|
|
@cindex notational conventions, for @sc{gdb/mi}
|
|
This chapter uses the following notation:
|
|
|
|
@itemize @bullet
|
|
@item
|
|
@code{|} separates two alternatives.
|
|
|
|
@item
|
|
@code{[ @var{something} ]} indicates that @var{something} is optional:
|
|
it may or may not be given.
|
|
|
|
@item
|
|
@code{( @var{group} )*} means that @var{group} inside the parentheses
|
|
may repeat zero or more times.
|
|
|
|
@item
|
|
@code{( @var{group} )+} means that @var{group} inside the parentheses
|
|
may repeat one or more times.
|
|
|
|
@item
|
|
@code{"@var{string}"} means a literal @var{string}.
|
|
@end itemize
|
|
|
|
@ignore
|
|
@heading Dependencies
|
|
@end ignore
|
|
|
|
@heading Acknowledgments
|
|
|
|
In alphabetic order: Andrew Cagney, Fernando Nasser, Stan Shebs and
|
|
Elena Zannoni.
|
|
|
|
@menu
|
|
* GDB/MI Command Syntax::
|
|
* GDB/MI Compatibility with CLI::
|
|
* GDB/MI Output Records::
|
|
* GDB/MI Command Description Format::
|
|
* GDB/MI Breakpoint Table Commands::
|
|
* GDB/MI Data Manipulation::
|
|
* GDB/MI Program Control::
|
|
* GDB/MI Miscellaneous Commands::
|
|
* GDB/MI Stack Manipulation::
|
|
* GDB/MI Symbol Query::
|
|
* GDB/MI Target Manipulation::
|
|
* GDB/MI Thread Commands::
|
|
* GDB/MI Tracepoint Commands::
|
|
* GDB/MI Variable Objects::
|
|
* GDB/MI Draft Changes to Output Syntax::
|
|
@end menu
|
|
|
|
@c When these are implemented, they should be moved to be between Misc and
|
|
@c Stack Manipulation in the above menu. They are now outside the menu
|
|
@c because makeinfo 3.12 barfs if it sees @ignore or @comments in the
|
|
@c middle of a menu.
|
|
@ignore
|
|
* GDB/MI Kod Commands::
|
|
* GDB/MI Memory Overlay Commands::
|
|
* GDB/MI Signal Handling Commands::
|
|
@end ignore
|
|
|
|
@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
@node GDB/MI Command Syntax
|
|
@section @sc{gdb/mi} Command Syntax
|
|
|
|
@menu
|
|
* GDB/MI Input Syntax::
|
|
* GDB/MI Output Syntax::
|
|
* GDB/MI Simple Examples::
|
|
@end menu
|
|
|
|
@node GDB/MI Input Syntax
|
|
@subsection @sc{gdb/mi} Input Syntax
|
|
|
|
@cindex input syntax for @sc{gdb/mi}
|
|
@cindex @sc{gdb/mi}, input syntax
|
|
@table @code
|
|
@item @var{command} @expansion{}
|
|
@code{@var{cli-command} | @var{mi-command}}
|
|
|
|
@item @var{cli-command} @expansion{}
|
|
@code{[ @var{token} ] @var{cli-command} @var{nl}}, where
|
|
@var{cli-command} is any existing GDB CLI command.
|
|
|
|
@item @var{mi-command} @expansion{}
|
|
@code{[ @var{token} ] "-" @var{operation} ( " " @var{option} )*
|
|
@code{[} " --" @code{]} ( " " @var{parameter} )* @var{nl}}
|
|
|
|
@item @var{token} @expansion{}
|
|
@code{"any sequence of digits"}
|
|
|
|
@item @var{option} @expansion{}
|
|
@code{"-" @var{parameter} [ " " @var{parameter} ]}
|
|
|
|
@item @var{parameter} @expansion{}
|
|
@code{@var{non-blank-sequence} | @var{c-string}}
|
|
|
|
@item @var{operation} @expansion{}
|
|
@emph{any of the operations described in this document}
|
|
|
|
@item @var{non-blank-sequence} @expansion{}
|
|
@emph{anything, provided it doesn't contain special characters such as
|
|
"-", @var{nl}, """ and of course " "}
|
|
|
|
@item @var{c-string} @expansion{}
|
|
@code{""" @var{seven-bit-iso-c-string-content} """}
|
|
|
|
@item @var{nl} @expansion{}
|
|
@code{CR | CR-LF}
|
|
@end table
|
|
|
|
Notes:
|
|
|
|
@itemize @bullet
|
|
@item
|
|
The CLI commands are still handled by the @sc{mi} interpreter; their
|
|
output is described below.
|
|
|
|
@item
|
|
The @code{@var{token}}, when present, is passed back when the command
|
|
finishes.
|
|
|
|
@item
|
|
Some @sc{mi} commands accept optional arguments as part of the parameter
|
|
list. Each option is identified by a leading @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{--} (this is useful when some parameters begin with a dash).
|
|
@end itemize
|
|
|
|
Pragmatics:
|
|
|
|
@itemize @bullet
|
|
@item
|
|
We want easy access to the existing CLI syntax (for debugging).
|
|
|
|
@item
|
|
We want it to be easy to spot a @sc{mi} operation.
|
|
@end itemize
|
|
|
|
@node GDB/MI Output Syntax
|
|
@subsection @sc{gdb/mi} Output Syntax
|
|
|
|
@cindex output syntax of @sc{gdb/mi}
|
|
@cindex @sc{gdb/mi}, output syntax
|
|
The output from @sc{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)}.
|
|
|
|
If an input command was prefixed with a @code{@var{token}} then the
|
|
corresponding output for that command will also be prefixed by that same
|
|
@var{token}.
|
|
|
|
@table @code
|
|
@item @var{output} @expansion{}
|
|
@code{( @var{out-of-band-record} )* [ @var{result-record} ] "(gdb)" @var{nl}}
|
|
|
|
@item @var{result-record} @expansion{}
|
|
@code{ [ @var{token} ] "^" @var{result-class} ( "," @var{result} )* @var{nl}}
|
|
|
|
@item @var{out-of-band-record} @expansion{}
|
|
@code{@var{async-record} | @var{stream-record}}
|
|
|
|
@item @var{async-record} @expansion{}
|
|
@code{@var{exec-async-output} | @var{status-async-output} | @var{notify-async-output}}
|
|
|
|
@item @var{exec-async-output} @expansion{}
|
|
@code{[ @var{token} ] "*" @var{async-output}}
|
|
|
|
@item @var{status-async-output} @expansion{}
|
|
@code{[ @var{token} ] "+" @var{async-output}}
|
|
|
|
@item @var{notify-async-output} @expansion{}
|
|
@code{[ @var{token} ] "=" @var{async-output}}
|
|
|
|
@item @var{async-output} @expansion{}
|
|
@code{@var{async-class} ( "," @var{result} )* @var{nl}}
|
|
|
|
@item @var{result-class} @expansion{}
|
|
@code{"done" | "running" | "connected" | "error" | "exit"}
|
|
|
|
@item @var{async-class} @expansion{}
|
|
@code{"stopped" | @var{others}} (where @var{others} will be added
|
|
depending on the needs---this is still in development).
|
|
|
|
@item @var{result} @expansion{}
|
|
@code{[ @var{string} "=" ] @var{value}}
|
|
|
|
@item @var{value} @expansion{}
|
|
@code{@var{const} | "@{" @var{result} ( "," @var{result} )* "@}"}
|
|
|
|
@item @var{const} @expansion{}
|
|
@code{@var{c-string}}
|
|
|
|
@item @var{stream-record} @expansion{}
|
|
@code{@var{console-stream-output} | @var{target-stream-output} | @var{log-stream-output}}
|
|
|
|
@item @var{console-stream-output} @expansion{}
|
|
@code{"~" @var{c-string}}
|
|
|
|
@item @var{target-stream-output} @expansion{}
|
|
@code{"@@" @var{c-string}}
|
|
|
|
@item @var{log-stream-output} @expansion{}
|
|
@code{"&" @var{c-string}}
|
|
|
|
@item @var{nl} @expansion{}
|
|
@code{CR | CR-LF}
|
|
|
|
@item @var{token} @expansion{}
|
|
@emph{any sequence of digits}.
|
|
@end table
|
|
|
|
In addition, the following are still being developed:
|
|
|
|
@table @code
|
|
@item @var{query}
|
|
This action is currently undefined.
|
|
@end table
|
|
|
|
Notes:
|
|
|
|
@itemize @bullet
|
|
@item
|
|
All output sequences end in a single line containing a period.
|
|
|
|
@item
|
|
The @code{@var{token}} is from the corresponding request. If an execution
|
|
command is interrupted by the @samp{-exec-interrupt} command, the
|
|
@var{token} associated with the `*stopped' message is the one of the
|
|
original execution command, not the one of the interrupt-command.
|
|
|
|
@item
|
|
@cindex status output in @sc{gdb/mi}
|
|
@var{status-async-output} contains on-going status information about the
|
|
progress of a slow operation. It can be discarded. All status output is
|
|
prefixed by @samp{+}.
|
|
|
|
@item
|
|
@cindex async output in @sc{gdb/mi}
|
|
@var{exec-async-output} contains asynchronous state change on the target
|
|
(stopped, started, disappeared). All async output is prefixed by
|
|
@samp{*}.
|
|
|
|
@item
|
|
@cindex notify output in @sc{gdb/mi}
|
|
@var{notify-async-output} contains supplementary information that the
|
|
client should handle (e.g., a new breakpoint information). All notify
|
|
output is prefixed by @samp{=}.
|
|
|
|
@item
|
|
@cindex console output in @sc{gdb/mi}
|
|
@var{console-stream-output} 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{~}.
|
|
|
|
@item
|
|
@cindex target output in @sc{gdb/mi}
|
|
@var{target-stream-output} is the output produced by the target program.
|
|
All the target output is prefixed by @samp{@@}.
|
|
|
|
@item
|
|
@cindex log output in @sc{gdb/mi}
|
|
@var{log-stream-output} 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{&}.
|
|
@end itemize
|
|
|
|
@xref{GDB/MI Stream Records, , @sc{gdb/mi} Stream Records}, for more
|
|
details about the various output records.
|
|
|
|
@xref{GDB/MI Draft Changes to Output Syntax, , @sc{gdb/mi} Draft Changes
|
|
to Output Syntax}, for proposed revisions to the current output syntax.
|
|
|
|
@node GDB/MI Simple Examples
|
|
@subsection Simple Examples of @sc{gdb/mi} Interaction
|
|
@cindex @sc{gdb/mi}, simple examples
|
|
|
|
This subsection presents several simple examples of interaction using
|
|
the @sc{gdb/mi} interface. In these examples, @samp{->} means that the
|
|
following line is passed to @sc{gdb/mi} as input, while @samp{<-} means
|
|
the output received from @sc{gdb/mi}.
|
|
|
|
@subsubheading Target Stop
|
|
|
|
Here's an example of stopping the inferior process:
|
|
|
|
@example
|
|
-> -stop
|
|
<- (gdb)
|
|
@end example
|
|
|
|
@noindent
|
|
and later:
|
|
|
|
@example
|
|
<- *stop,reason="stop",address="0x123",source="a.c:123"
|
|
<- (gdb)
|
|
@end example
|
|
|
|
@subsubheading Simple CLI Command
|
|
|
|
Here's an example of a simple CLI command being passed through
|
|
@sc{gdb/mi} and on to the CLI.
|
|
|
|
@example
|
|
-> print 1+2
|
|
<- ~3\n
|
|
<- (gdb)
|
|
@end example
|
|
|
|
@subsubheading Command With Side Effects
|
|
|
|
@example
|
|
-> -symbol-file xyz.exe
|
|
<- *breakpoint,nr="3",address="0x123",source="a.c:123"
|
|
<- (gdb)
|
|
@end example
|
|
|
|
@subsubheading A Bad Command
|
|
|
|
Here's what happens if you pass a non-existent command:
|
|
|
|
@example
|
|
-> -rubbish
|
|
<- error,"Rubbish not found"
|
|
<- (gdb)
|
|
@end example
|
|
|
|
@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
@node GDB/MI Compatibility with CLI
|
|
@section @sc{gdb/mi} Compatibility with CLI
|
|
|
|
@cindex compatibility, @sc{gdb/mi} and CLI
|
|
@cindex @sc{gdb/mi}, compatibility with CLI
|
|
To help users familiar with GDB's existing CLI interface, @sc{gdb/mi}
|
|
accepts existing CLI commands. As specified by the syntax, such
|
|
commands can be directly entered into the @sc{gdb/mi} interface and GDB will
|
|
respond.
|
|
|
|
This mechanism is provided as an aid to developers of @sc{gdb/mi}
|
|
clients and not as a reliable interface into the CLI. Since the command
|
|
is being interpreteted in an environment that assumes @sc{gdb/mi}
|
|
behaviour, the exact output of such commands is likely to end up being
|
|
an un-supported hybrid of @sc{gdb/mi} and CLI output.
|
|
|
|
@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
@node GDB/MI Output Records
|
|
@section @sc{gdb/mi} Output Records
|
|
|
|
@menu
|
|
* GDB/MI Result Records::
|
|
* GDB/MI Stream Records::
|
|
* GDB/MI Out-of-band Records::
|
|
@end menu
|
|
|
|
@node GDB/MI Result Records
|
|
@subsection @sc{gdb/mi} Result Records
|
|
|
|
@cindex result records in @sc{gdb/mi}
|
|
@cindex @sc{gdb/mi}, result records
|
|
In addition to a number of out-of-band notifications, the response to a
|
|
@sc{gdb/mi} command includes one of the following result indications:
|
|
|
|
@table @code
|
|
@findex ^done
|
|
@item "^done" [ "," @var{results} ]
|
|
The synchronous operation was successful, @code{@var{results}} is the return
|
|
value.
|
|
|
|
@item "^running"
|
|
@findex ^running
|
|
@c Is this one correct? Should it be an out-of-band notification?
|
|
The asynchronous operation was successfully started. The target is
|
|
running.
|
|
|
|
@item "^error" "," @var{c-string}
|
|
@cindex ^error
|
|
The operation failed. The @code{@var{c-string}} contains the corresponding
|
|
error message.
|
|
@end table
|
|
|
|
@node GDB/MI Stream Records
|
|
@subsection @sc{gdb/mi} Stream Records
|
|
|
|
@cindex @sc{gdb/mi}, stream records
|
|
@cindex stream records in @sc{gdb/mi}
|
|
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 @sc{gdb/mi} interface using @dfn{stream records}.
|
|
|
|
Each stream record begins with a unique @dfn{prefix character} which
|
|
identifies its stream (@pxref{GDB/MI Output Syntax, , @sc{gdb/mi} Output
|
|
Syntax}). In addition to the prefix, each stream record contains a
|
|
@code{@var{string-output}}. This is either raw text (with an implicit new
|
|
line) or a quoted C string (which does not contain an implicit newline).
|
|
|
|
@table @code
|
|
@item "~" @var{string-output}
|
|
The console output stream contains text that should be displayed in the
|
|
CLI console window. It contains the textual responses to CLI commands.
|
|
|
|
@item "@@" @var{string-output}
|
|
The target output stream contains any textual output from the running
|
|
target.
|
|
|
|
@item "&" @var{string-output}
|
|
The LOG stream contains debugging messages being produced by GDB's
|
|
internals.
|
|
@end table
|
|
|
|
@node GDB/MI Out-of-band Records
|
|
@subsection @sc{gdb/mi} Out-of-band Records
|
|
|
|
@cindex out-of-band records in @sc{gdb/mi}
|
|
@cindex @sc{gdb/mi}, out-of-band records
|
|
@dfn{Out-of-band} records are used to notify the @sc{gdb/mi} client of
|
|
additional changes that have occurred. Those changes can either be a
|
|
consequence of @sc{gdb/mi} (e.g., a breakpoint modified) or a result of
|
|
target activity (e.g., target stopped).
|
|
|
|
The following is a preliminary list of possible out-of-band records.
|
|
|
|
@table @code
|
|
@item "*" "stop"
|
|
@end table
|
|
|
|
|
|
@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
@node GDB/MI Command Description Format
|
|
@section @sc{gdb/mi} Command Description Format
|
|
|
|
The remaining sections describe blocks of commands. Each block of
|
|
commands is laid out in a fashion similar to this chapter.
|
|
|
|
Note the the line breaks shown in the examples are here only for
|
|
readability. They don't appear in the real output.
|
|
Also note that the commands with a non-available example (N.A.@:) are
|
|
not yet implemented.
|
|
|
|
@subheading Motivation
|
|
|
|
The motivation for this collection of commands
|
|
|
|
@subheading Introduction
|
|
|
|
A brief introduction to this collection of commands as a whole.
|
|
|
|
@subheading Commands
|
|
|
|
For each command in the block, the following is described:
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-command @var{args}...
|
|
@end example
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB CLI command.
|
|
|
|
@subsubheading Result
|
|
|
|
@subsubheading Out-of-band
|
|
|
|
@subsubheading Notes
|
|
|
|
@subsubheading Example
|
|
|
|
|
|
@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
@node GDB/MI Breakpoint Table Commands
|
|
@section @sc{gdb/mi} Breakpoint table commands
|
|
|
|
@cindex breakpoint commands for @sc{gdb/mi}
|
|
@cindex @sc{gdb/mi}, breakpoint commands
|
|
This section documents @sc{gdb/mi} commands for manipulating
|
|
breakpoints.
|
|
|
|
@subheading The @code{-break-after} Command
|
|
@findex -break-after
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-break-after @var{number} @var{count}
|
|
@end example
|
|
|
|
The breakpoint number @var{number} is not in effect until it has been
|
|
hit @var{count} times. To see how this is reflected in the output of
|
|
the @samp{-break-list} command, see the description of the
|
|
@samp{-break-list} command below.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{ignore}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-break-insert main
|
|
^done,bkpt=@{number="1",addr="0x000100d0",file="hello.c",line="5"@}
|
|
(gdb)
|
|
-break-after 1 3
|
|
~
|
|
^done
|
|
(gdb)
|
|
-break-list
|
|
^done,BreakpointTable=@{hdr=@{"Num","Type","Disp","Enb","Address","What"@},
|
|
bkpt=@{number="1",type="breakpoint",disp="keep",enabled="y",
|
|
addr="0x000100d0",func="main",file="hello.c",line="5",times="0",
|
|
ignore="3"@}@}
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
@ignore
|
|
@subheading The @code{-break-catch} Command
|
|
@findex -break-catch
|
|
|
|
@subheading The @code{-break-commands} Command
|
|
@findex -break-commands
|
|
@end ignore
|
|
|
|
|
|
@subheading -break-condition
|
|
@findex -break-condition
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-break-condition @var{number} @var{expr}
|
|
@end example
|
|
|
|
Breakpoint @var{number} will stop the program only if the condition in
|
|
@var{expr} is true. The condition becomes part of the
|
|
@samp{-break-list} output (see the description of the @samp{-break-list}
|
|
command below).
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{condition}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-break-condition 1 1
|
|
^done
|
|
(gdb)
|
|
-break-list
|
|
^done,BreakpointTable=@{hdr=@{"Num","Type","Disp","Enb","Address","What"@},
|
|
bkpt=@{number="1",type="breakpoint",disp="keep",enabled="y",
|
|
addr="0x000100d0",func="main",file="hello.c",line="5",cond="1",
|
|
times="0",ignore="3"@}@}
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
@subheading The @code{-break-delete} Command
|
|
@findex -break-delete
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-break-delete ( @var{breakpoint} )+
|
|
@end example
|
|
|
|
Delete the breakpoint(s) whose number(s) are specified in the argument
|
|
list. This is obviously reflected in the breakpoint list.
|
|
|
|
@subsubheading GDB command
|
|
|
|
The corresponding GDB command is @samp{delete}.
|
|
|
|
@subsubheading Example
|
|
|
|
@example
|
|
(gdb)
|
|
-break-delete 1
|
|
^done
|
|
(gdb)
|
|
-break-list
|
|
^done,BreakpointTable=@{@}
|
|
(gdb)
|
|
@end example
|
|
|
|
@subheading The @code{-break-disable} Command
|
|
@findex -break-disable
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-break-disable ( @var{breakpoint} )+
|
|
@end example
|
|
|
|
Disable the named @var{breakpoint}(s). The field @samp{enabled} in the
|
|
break list is now set to @samp{n} for the named @var{breakpoint}(s).
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{disable}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-break-disable 2
|
|
^done
|
|
(gdb)
|
|
-break-list
|
|
^done,BreakpointTable=@{hdr=@{"Num","Type","Disp","Enb","Address","What"@},
|
|
bkpt=@{number="2",type="breakpoint",disp="keep",enabled="n",
|
|
addr="0x000100d0",func="main",file="hello.c",line="5",times="0"@}@}
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
@subheading The @code{-break-enable} Command
|
|
@findex -break-enable
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-break-enable ( @var{breakpoint} )+
|
|
@end example
|
|
|
|
Enable (previously disabled) @var{breakpoint}(s).
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{enable}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-break-enable 2
|
|
^done
|
|
(gdb)
|
|
-break-list
|
|
^done,BreakpointTable=@{hdr=@{"Num","Type","Disp","Enb","Address","What"@},
|
|
bkpt=@{number="2",type="breakpoint",disp="keep",enabled="y",
|
|
addr="0x000100d0",func="main",file="hello.c",line="5",times="0"@}@}
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
@subheading The @code{-break-info} Command
|
|
@findex -break-info
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-break-info @var{breakpoint}
|
|
@end example
|
|
|
|
@c REDUNDANT???
|
|
Get information about a single breakpoint.
|
|
|
|
@subsubheading GDB command
|
|
|
|
The corresponding GDB command is @samp{info break @var{breakpoint}}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
@subheading The @code{-break-insert} Command
|
|
@findex -break-insert
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-break-insert [ -t ] [ -h ] [ -r ]
|
|
[ -c @var{condition} ] [ -i @var{ignore-count} ]
|
|
[ -p @var{thread} ] [ @var{line} | @var{addr} ]
|
|
@end example
|
|
|
|
@noindent
|
|
If specified, @var{line}, can be one of:
|
|
|
|
@itemize @bullet
|
|
@item function
|
|
@c @item +offset
|
|
@c @item -offset
|
|
@c @item linenum
|
|
@item filename:linenum
|
|
@item filename:function
|
|
@item *address
|
|
@end itemize
|
|
|
|
The possible optional parameters of this command are:
|
|
|
|
@table @samp
|
|
@item -t
|
|
Insert a tempoary breakpoint.
|
|
@item -h
|
|
Insert a hardware breakpoint.
|
|
@item -c @var{condition}
|
|
Make the breakpoint conditional on @var{condition}.
|
|
@item -i @var{ignore-count}
|
|
Initialize the @var{ignore-count}.
|
|
@item -r
|
|
Insert a regular breakpoint in all the functions whose names match the
|
|
given regular expression. Other flags are not applicable to regular
|
|
expresson.
|
|
@end table
|
|
|
|
@subsubheading Result
|
|
|
|
The result is in the form:
|
|
|
|
@example
|
|
^done,bkptno="@var{number}",func="@var{funcname}",
|
|
file="@var{filename}",line="@var{lineno}"
|
|
@end example
|
|
|
|
@noindent
|
|
where @var{number} is the GDB number for this breakpoint, @var{funcname}
|
|
is the name of the function where the breakpoint was inserted,
|
|
@var{filename} is the name of the source file which contains this
|
|
function, and @var{lineno} is the source line number within that file.
|
|
|
|
Note: this format is open to change.
|
|
@c An out-of-band breakpoint instead of part of the result?
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB commands are @samp{break}, @samp{tbreak},
|
|
@samp{hbreak}, @samp{thbreak}, and @samp{rbreak}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-break-insert main
|
|
^done,bkpt=@{number="1",addr="0x0001072c",file="recursive2.c",line="4"@}
|
|
(gdb)
|
|
-break-insert -t foo
|
|
^done,bkpt=@{number="2",addr="0x00010774",file="recursive2.c",line="11"@}
|
|
(gdb)
|
|
-break-list
|
|
^done,BreakpointTable=@{hdr=@{"Num","Type","Disp","Enb","Address","What"@},
|
|
bkpt=@{number="1",type="breakpoint",disp="keep",enabled="y",
|
|
addr="0x0001072c", func="main",file="recursive2.c",line="4",times="0"@},
|
|
bkpt=@{number="2",type="breakpoint",disp="del",enabled="y",
|
|
addr="0x00010774",func="foo",file="recursive2.c",line="11",times="0"@}@}
|
|
(gdb)
|
|
-break-insert -r foo.*
|
|
~int foo(int, int);
|
|
^done,bkpt=@{number="3",addr="0x00010774",file="recursive2.c",line="11"@}
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
@subheading The @code{-break-list} Command
|
|
@findex -break-list
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-break-list
|
|
@end example
|
|
|
|
Displays the list of inserted breakpoints, showing the following fields:
|
|
|
|
@table @samp
|
|
@item Number
|
|
number of the breakpoint
|
|
@item Type
|
|
type of the breakpoint: @samp{breakpoint} or @samp{watchpoint}
|
|
@item Disposition
|
|
should the breakpoint be deleted or disabled when it is hit: @samp{keep}
|
|
or @samp{nokeep}
|
|
@item Enabled
|
|
is the breakpoint enabled or no: @samp{y} or @samp{n}
|
|
@item Address
|
|
memory location at which the breakpoint is set
|
|
@item What
|
|
logical location of the breakpoint, expressed by function name, file
|
|
name, line number
|
|
@item times
|
|
number of times the breakpoint has been hit
|
|
@end table
|
|
|
|
If there are no breakpoints or watchpoints, the BreakpointTable field is
|
|
an empty list.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{info break}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-break-list
|
|
^done,BreakpointTable=@{hdr=@{"Num","Type","Disp","Enb","Address","What"@},
|
|
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",line="13",times="0"@}@}
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
Here's an example of the result when there are no breakpoints:
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-break-list
|
|
^done,BreakpointTable=@{@}
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
@subheading The @code{-break-watch} Command
|
|
@findex -break-watch
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-break-watch [ -a | -r ]
|
|
@end example
|
|
|
|
Create a watchpoint. With the @samp{-a} option it will create an
|
|
@dfn{access} watchpoint, i.e. a watchpoint that triggers either on a
|
|
read from or on a write to the memory location. With the @samp{-r}
|
|
option, the watchpoint created is a @dfn{read} 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.
|
|
@xref{Set Watchpoints, , Setting watchpoints}.
|
|
|
|
Note that @samp{-break-list} will report a single list of watchpoints and
|
|
breakpoints inserted.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB commands are @samp{watch}, @samp{awatch}, and
|
|
@samp{rwatch}.
|
|
|
|
@subsubheading Example
|
|
|
|
Setting a watchpoint on a variable in the @code{main} function:
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-break-watch x
|
|
^done,wpt=@{number="2",exp="x"@}
|
|
(gdb)
|
|
-exec-continue
|
|
^running
|
|
^done,reason="watchpoint-trigger",wpt=@{number="2",exp="x"@},
|
|
value=@{old="-268439212",new="55"@},
|
|
frame=@{func="main",args=@{@},file="recursive2.c",line="5"@}
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
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.
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-break-watch C
|
|
^done,wpt=@{number="5",exp="C"@}
|
|
(gdb)
|
|
-exec-continue
|
|
^running
|
|
^done,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",line="13"@}
|
|
(gdb)
|
|
-exec-continue
|
|
^running
|
|
^done,reason="watchpoint-scope",wpnum="5",
|
|
frame=@{func="callee3",args=@{@{name="strarg",
|
|
value="0x11940 \"A string argument.\""@}@},
|
|
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="18"@}
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
Listing breakpoints and watchpoints, at different points in the program
|
|
execution. Note that once the watchpoint goes out of scope, it is
|
|
deleted.
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-break-watch C
|
|
^done,wpt=@{number="2",exp="C"@}
|
|
(gdb)
|
|
-break-list
|
|
^done,BreakpointTable=@{hdr=@{"Num","Type","Disp","Enb","Address","What"@},
|
|
bkpt=@{number="1",type="breakpoint",disp="keep",enabled="y",
|
|
addr="0x00010734",func="callee4",
|
|
file="../../../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
|
|
^done,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",line="13"@}
|
|
(gdb)
|
|
-break-list
|
|
^done,BreakpointTable=@{hdr=@{"Num","Type","Disp","Enb","Address","What"@},
|
|
bkpt=@{number="1",type="breakpoint",disp="keep",enabled="y",
|
|
addr="0x00010734",func="callee4",
|
|
file="../../../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",line="18"@}
|
|
(gdb)
|
|
-break-list
|
|
^done,BreakpointTable=@{hdr=@{"Num","Type","Disp","Enb","Address","What"@},
|
|
bkpt=@{number="1",type="breakpoint",disp="keep",enabled="y",
|
|
addr="0x00010734",func="callee4",
|
|
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="8",times="1"@}@}
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
@node GDB/MI Data Manipulation
|
|
@section @sc{gdb/mi} Data Manipulation
|
|
|
|
@cindex data manipulation, in @sc{gdb/mi}
|
|
@cindex @sc{gdb/mi}, data manipulation
|
|
This section describes the @sc{gdb/mi} commands that manipulate data:
|
|
examine memory and registers, evaluate expressions, etc.
|
|
|
|
@c REMOVED FROM THE INTERFACE.
|
|
@c @subheading -data-assign
|
|
@c Change the value of a program variable. Plenty of side effects.
|
|
@c @subsubheading GDB command
|
|
@c set variable
|
|
@c @subsubheading Example
|
|
@c N.A.
|
|
|
|
@subheading The @code{-data-disassemble} Command
|
|
@findex -data-disassemble
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-data-disassemble
|
|
[ -s @var{start-addr} -e @var{end-addr} ]
|
|
| [ -f @var{filename} -l @var{linenum} [ -n @var{lines} ] ]
|
|
-- @var{mode}
|
|
@end example
|
|
|
|
@noindent
|
|
Where:
|
|
|
|
@table @samp
|
|
@item @var{start-addr}
|
|
is the beginning address (or @code{$pc})
|
|
@item @var{end-addr}
|
|
is the end address
|
|
@item @var{filename}
|
|
is the name of the file to disassemble
|
|
@item @var{linenum}
|
|
is the line number to disassemble around
|
|
@item @var{lines}
|
|
is the the number of disassembly lines to be produced. If it is -1,
|
|
the whole function will be disassembled, in case no @var{end-addr} is
|
|
specified. If @var{end-addr} is specified as a non-zero value, and
|
|
@var{lines} is lower than the number of disassembly lines between
|
|
@var{start-addr} and @var{end-addr}, only @var{lines} lines are
|
|
displayed; if @var{lines} is higher than the number of lines between
|
|
@var{start-addr} and @var{end-addr}, only the lines up to @var{end-addr}
|
|
are displayed.
|
|
@item @var{mode}
|
|
is either 0 (meaning only disassembly) or 1 (meaning mixed source and
|
|
disassembly)
|
|
@end table
|
|
|
|
@subsubheading Result
|
|
|
|
The output for each instruction is composed of two fields:
|
|
|
|
@itemize @bullet
|
|
@item Address
|
|
@item Func-name
|
|
@item Offset
|
|
@item Instruction
|
|
@end itemize
|
|
|
|
Note that whatever included in the instruction field, is not manipulated
|
|
directely by flathead, i.e. it is not possible to adjust its format.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
There's no direct mapping from this command to the CLI.
|
|
|
|
@subsubheading Example
|
|
|
|
Disassemble from the current value of @code{$pc} to @code{$pc + 20}:
|
|
|
|
@smallexample
|
|
(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)
|
|
@end smallexample
|
|
|
|
Disassemble the whole @code{main} function. Line 32 is part of
|
|
@code{main}.
|
|
|
|
@smallexample
|
|
-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"@},
|
|
[...]
|
|
@{address="0x0001081c",func-name="main",offset="96",inst="ret "@},
|
|
@{address="0x00010820",func-name="main",offset="100",inst="restore "@}@}
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
Disassemble 3 instructions from the start of @code{main}:
|
|
|
|
@smallexample
|
|
(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)
|
|
@end smallexample
|
|
|
|
Disassemble 3 instructions from the start of @code{main} in mixed mode:
|
|
|
|
@smallexample
|
|
(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)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-data-evaluate-expression} Command
|
|
@findex -data-evaluate-expression
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-data-evaluate-expression @var{expr}
|
|
@end example
|
|
|
|
Evaluate @var{expr} 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.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB commands are @samp{print}, @samp{output}, and
|
|
@samp{call}. In @code{gdbtk} only, there's a corresponding
|
|
@samp{gdb_eval} command.
|
|
|
|
@subsubheading Example
|
|
|
|
In the following example, the numbers that precede the commands are the
|
|
@dfn{tokens} described in @ref{GDB/MI Command Syntax, , @sc{gdb/mi}
|
|
Command Syntax}. Notice how @sc{gdb/mi} returns the same tokens in its
|
|
output.
|
|
|
|
@smallexample
|
|
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)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-data-list-changed-registers} Command
|
|
@findex -data-list-changed-registers
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-data-list-changed-registers
|
|
@end example
|
|
|
|
Display a list of the registers that have changed.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
GDB doesn't have a direct analog for this command; @code{gdbtk} has the
|
|
corresponding command @samp{gdb_changed_register_list}.
|
|
|
|
@subsubheading Example
|
|
|
|
On a PPC MBX board:
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-exec-continue
|
|
^running
|
|
|
|
(gdb)
|
|
*stopped,reason="breakpoint-hit",bkptno="1",frame=@{func="main",
|
|
args=@{@},file="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)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-data-list-register-names} Command
|
|
@findex -data-list-register-names
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-data-list-register-names [ ( @var{regno} )+ ]
|
|
@end example
|
|
|
|
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.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
GDB does not have a command which corresponds to
|
|
@samp{-data-list-register-names}. In @code{gdbtk} there is a
|
|
corresponding command @samp{gdb_regnames}.
|
|
|
|
@subsubheading Example
|
|
|
|
For the PPC MBX board:
|
|
@smallexample
|
|
(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)
|
|
@end smallexample
|
|
|
|
@subheading The @code{-data-list-register-values} Command
|
|
@findex -data-list-register-values
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-data-list-register-values @var{fmt} [ ( @var{regno} )*]
|
|
@end example
|
|
|
|
Display the registers' contents. @var{fmt} 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.
|
|
|
|
Allowed formats for @var{fmt} are:
|
|
|
|
@table @code
|
|
@item x
|
|
Hexadecimal
|
|
@item o
|
|
Octal
|
|
@item t
|
|
Binary
|
|
@item d
|
|
Decimal
|
|
@item r
|
|
Raw
|
|
@item N
|
|
Natural
|
|
@end table
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB commands are @samp{info reg}, @samp{info all-reg},
|
|
and (in @code{gdbtk}) @samp{gdb_fetch_registers}.
|
|
|
|
@subsubheading Example
|
|
|
|
For a PPC MBX board (note: line breaks are for readability only, they
|
|
don't appear in the actual output):
|
|
|
|
@smallexample
|
|
(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)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-data-read-memory} Command
|
|
@findex -data-read-memory
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-data-read-memory [ -o @var{byte-offset} ]
|
|
@var{address} @var{word-format} @var{word-size}
|
|
@var{nr-rows} @var{nr-cols} [ @var{aschar} ]
|
|
@end example
|
|
|
|
@noindent
|
|
where:
|
|
|
|
@table @samp
|
|
@item @var{address}
|
|
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.
|
|
|
|
@item @var{word-format}
|
|
The format to be used to print the memory words. The notation is the
|
|
same as for GDB's @code{print} command (@pxref{Output Formats, , Output
|
|
formats}).
|
|
|
|
@item @var{word-size}
|
|
The size of each memory word in bytes.
|
|
|
|
@item @var{nr-rows}
|
|
The number of rows in the output table.
|
|
|
|
@item @var{nr-cols}
|
|
The number of columns in the output table.
|
|
|
|
@item @var{aschar}
|
|
If present, indicates that each row should include an @sc{ascii} dump. The
|
|
value of @var{aschar} is used as a padding character when a byte is not a
|
|
member of the printable @sc{ascii} character set (printable @sc{ascii}
|
|
characters are those whose code is between 32 and 126, inclusively).
|
|
|
|
@item @var{byte-offset}
|
|
An offset to add to the @var{address} before fetching memory.
|
|
@end table
|
|
|
|
This command displays memory contents as a table of @var{nr-rows} by
|
|
@var{nr-cols} words, each word being @var{word-size} bytes. In total,
|
|
@code{@var{nr-rows} * @var{nr-cols} * @var{word-size}} bytes are read
|
|
(returned as @samp{total-bytes}). Should less then the requested number
|
|
of bytes be returned by the target, the missing words are identified
|
|
using @samp{N/A}. The number of bytes read from the target is returned
|
|
in @samp{nr-bytes} and the starting address used to read memory in
|
|
@samp{addr}.
|
|
|
|
The address of the next/previous page or row is available in
|
|
@samp{next-row} and @samp{prev-row}, @samp{next-page} and
|
|
@samp{prev-page}.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{x}. @code{gdbtk} has
|
|
@samp{gdb_get_mem} memory read.
|
|
|
|
@subsubheading Example
|
|
|
|
Read six bytes of memory starting at @code{bytes+6} but then offset by
|
|
@code{-6} bytes. Format as three rows of two columns. One byte per
|
|
word. Display each word in hex.
|
|
|
|
@smallexample
|
|
(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)
|
|
@end smallexample
|
|
|
|
Read two bytes of memory starting at address @code{shorts + 64} and
|
|
display as a single word formatted in decimal.
|
|
|
|
@smallexample
|
|
(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)
|
|
@end smallexample
|
|
|
|
Read thirty two bytes of memory starting at @code{bytes+16} and format
|
|
as eight rows of four columns. Include a string encoding with @code{x}
|
|
used as the non-printable character.
|
|
|
|
@smallexample
|
|
(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)
|
|
@end smallexample
|
|
|
|
@subheading The @code{-display-delete} Command
|
|
@findex -display-delete
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-display-delete @var{number}
|
|
@end example
|
|
|
|
Delete the display @var{number}.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{delete display}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-display-disable} Command
|
|
@findex -display-disable
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-display-disable @var{number}
|
|
@end example
|
|
|
|
Disable display @var{number}.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{disable display}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-display-enable} Command
|
|
@findex -display-enable
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-display-enable @var{number}
|
|
@end example
|
|
|
|
Enable display @var{number}.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{enable display}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-display-insert} Command
|
|
@findex -display-insert
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-display-insert @var{expression}
|
|
@end example
|
|
|
|
Display @var{expression} every time the program stops.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{display}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-display-list} Command
|
|
@findex -display-list
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-display-list
|
|
@end example
|
|
|
|
List the displays. Do not show the current values.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{info display}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-environment-cd} Command
|
|
@findex -environment-cd
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-environment-cd @var{pathdir}
|
|
@end example
|
|
|
|
Set GDB's working directory.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{cd}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-environment-cd /kwikemart/marge/ezannoni/flathead-dev/devo/gdb
|
|
^done
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-environment-directory} Command
|
|
@findex -environment-directory
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-environment-directory @var{pathdir}
|
|
@end example
|
|
|
|
Add directory @var{pathdir} to beginning of search path for source files.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{dir}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-environment-directory /kwikemart/marge/ezannoni/flathead-dev/devo/gdb
|
|
^done
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-environment-path} Command
|
|
@findex -environment-path
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-environment-path ( @var{pathdir} )+
|
|
@end example
|
|
|
|
Add directories to beginning of search path for object files.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{path}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-environment-path /kwikemart/marge/ezannoni/flathead-dev/ppc-eabi/gdb
|
|
^done
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-environment-pwd} Command
|
|
@findex -environment-pwd
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-environment-pwd
|
|
@end example
|
|
|
|
Show the current working directory.
|
|
|
|
@subsubheading GDB command
|
|
|
|
The corresponding GDB command is @samp{pwd}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-environment-pwd
|
|
~Working directory /kwikemart/marge/ezannoni/flathead-dev/devo/gdb.
|
|
^done
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
@node GDB/MI Program Control
|
|
@section @sc{gdb/mi} Program control
|
|
|
|
@subsubheading Program termination
|
|
|
|
As a result of execution, the inferior program can run to completion, if
|
|
it doesn't encouter any breakpoints. In this case the ouput will
|
|
include an exit code, if the program has exited exceptionally.
|
|
|
|
@subsubheading Examples:
|
|
|
|
@noindent
|
|
Program exited normally:
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-exec-run
|
|
^running
|
|
(gdb)
|
|
x = 55
|
|
*stopped,reason="exited-normally"
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
@noindent
|
|
Program exited exceptionally:
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-exec-run
|
|
^running
|
|
(gdb)
|
|
x = 55
|
|
*stopped,reason="exited",exit-code="01"
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
Another way the program can terminate is if it receives a signal such as
|
|
@code{SIGINT}. In this case, @sc{gdb/mi} displays this:
|
|
|
|
@smallexample
|
|
(gdb)
|
|
*stopped,reason="exited-signalled",signal-name="SIGINT",
|
|
signal-meaning="Interrupt"
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-exec-abort} Command
|
|
@findex -exec-abort
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-exec-abort
|
|
@end example
|
|
|
|
Kill the inferior running program.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{kill}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-exec-arguments} Command
|
|
@findex -exec-arguments
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-exec-arguments @var{args}
|
|
@end example
|
|
|
|
Set the inferior program arguments, to be used in the next
|
|
@samp{-exec-run}.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{set args}.
|
|
|
|
@subsubheading Example
|
|
|
|
@c FIXME!
|
|
Don't have one around.
|
|
|
|
|
|
@subheading The @code{-exec-continue} Command
|
|
@findex -exec-continue
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-exec-continue
|
|
@end example
|
|
|
|
Asynchronous command. Resumes the execution of the inferior program
|
|
until a breakpoint is encountered, or until the inferior exits.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB corresponding is @samp{continue}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
-exec-continue
|
|
^running
|
|
(gdb)
|
|
@@Hello world
|
|
*stopped,reason="breakpoint-hit",bkptno="2",frame=@{func="foo",args=@{@},
|
|
file="hello.c",line="13"@}
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-exec-finish} Command
|
|
@findex -exec-finish
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-exec-finish
|
|
@end example
|
|
|
|
Asynchronous command. Resumes the execution of the inferior program
|
|
until the current function is exited. Displays the results returned by
|
|
the function.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{finish}.
|
|
|
|
@subsubheading Example
|
|
|
|
Function returning @code{void}.
|
|
|
|
@smallexample
|
|
-exec-finish
|
|
^running
|
|
(gdb)
|
|
@@hello from foo
|
|
*stopped,reason="function-finished",frame=@{func="main",args=@{@},
|
|
file="hello.c",line="7"@}
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
Function returning other than @code{void}. The name of the internal GDB
|
|
variable storing the result is printed, together with the value itself.
|
|
|
|
@smallexample
|
|
-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",line="14"@},
|
|
gdb-result-var="$1",return-value="0"
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-exec-interrupt} Command
|
|
@findex -exec-interrupt
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-exec-interrupt
|
|
@end example
|
|
|
|
Asynchronous command. 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 '^done' output. If the user is trying to
|
|
interrupt a non-running program, an error message will be printed.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{interrupt}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(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",line="13"@}
|
|
(gdb)
|
|
|
|
(gdb)
|
|
-exec-interrupt
|
|
^error,msg="mi_cmd_exec_interrupt: Inferior not executing."
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-exec-next} Command
|
|
@findex -exec-next
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-exec-next
|
|
@end example
|
|
|
|
Asynchronous command. Resumes execution of the inferior program, stopping
|
|
when the beginning of the next source line is reached.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{next}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
-exec-next
|
|
^running
|
|
(gdb)
|
|
*stopped,reason="end-stepping-range",line="8",file="hello.c"
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-exec-next-instruction} Command
|
|
@findex -exec-next-instruction
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-exec-next-instruction
|
|
@end example
|
|
|
|
Asynchronous command. 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.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{nexti}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-exec-next-instruction
|
|
^running
|
|
|
|
(gdb)
|
|
*stopped,reason="end-stepping-range",
|
|
addr="0x000100d4",line="5",file="hello.c"
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-exec-return} Command
|
|
@findex -exec-return
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-exec-return
|
|
@end example
|
|
|
|
Makes current function return immediately. Doesn't execute the inferior.
|
|
Displays the new current frame.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{return}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(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",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",line="18"@}
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-exec-run} Command
|
|
@findex -exec-run
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-exec-run
|
|
@end example
|
|
|
|
Asynchronous command. Starts execution of the inferior from the
|
|
beginning. The inferior executes until either a breakpoint is
|
|
encountered or the program exits.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{run}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(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",line="4"@}
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-exec-show-arguments} Command
|
|
@findex -exec-show-arguments
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-exec-show-arguments
|
|
@end example
|
|
|
|
Print the arguments of the program.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{show args}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
@c @subheading -exec-signal
|
|
|
|
@subheading The @code{-exec-step} Command
|
|
@findex -exec-step
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-exec-step
|
|
@end example
|
|
|
|
Asynchronous command. 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.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{step}.
|
|
|
|
@subsubheading Example
|
|
|
|
Stepping into a function:
|
|
|
|
@smallexample
|
|
-exec-step
|
|
^running
|
|
(gdb)
|
|
*stopped,reason="end-stepping-range",
|
|
frame=@{func="foo",args=@{@{name="a",value="10"@},
|
|
@{name="b",value="0"@}@},file="recursive2.c",line="11"@}
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
Regular stepping:
|
|
|
|
@smallexample
|
|
-exec-step
|
|
^running
|
|
(gdb)
|
|
*stopped,reason="end-stepping-range",line="14",file="recursive2.c"
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-exec-step-instruction} Command
|
|
@findex -exec-step-instruction
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-exec-step-instruction
|
|
@end example
|
|
|
|
Asynchronous command. 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.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{stepi}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-exec-step-instruction
|
|
^running
|
|
|
|
(gdb)
|
|
*stopped,reason="end-stepping-range",
|
|
frame=@{func="foo",args=@{@},file="try.c",line="10"@}
|
|
(gdb)
|
|
-exec-step-instruction
|
|
^running
|
|
|
|
(gdb)
|
|
*stopped,reason="end-stepping-range",
|
|
frame=@{addr="0x000100f4",func="foo",args=@{@},file="try.c",line="10"@}
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-exec-until} Command
|
|
@findex -exec-until
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-exec-until [ @var{location} ]
|
|
@end example
|
|
|
|
Asynchronous command. Executes the inferior until the @var{location}
|
|
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 ``location-reached''.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{until}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-exec-until recursive2.c:6
|
|
^running
|
|
(gdb)
|
|
x = 55
|
|
*stopped,reason="location-reached",frame=@{func="main",args=@{@},
|
|
file="recursive2.c",line="6"@}
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
@ignore
|
|
@subheading -file-clear
|
|
Is this going away????
|
|
@end ignore
|
|
|
|
|
|
@subheading The @code{-file-exec-and-symbols} Command
|
|
@findex -file-exec-and-symbols
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-file-exec-and-symbols @var{file}
|
|
@end example
|
|
|
|
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.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{file}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-file-exec-and-symbols /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
|
|
^done
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-file-exec-file} Command
|
|
@findex -file-exec-file
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-file-exec-file @var{file}
|
|
@end example
|
|
|
|
Specify the executable file to be debugged. Unlike
|
|
@samp{-file-exec-and-symbols}, the symbol table is @emph{not} read
|
|
from this file. If used without argument, GDB clears the information
|
|
about the executable file. No output is produced, except a completion
|
|
notification.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{exec-file}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-file-exec-file /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
|
|
^done
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-file-list-exec-sections} Command
|
|
@findex -file-list-exec-sections
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-file-list-exec-sections
|
|
@end example
|
|
|
|
List the sections of the current executable file.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The GDB command @samp{info file} shows, among the rest, the same
|
|
information as this command. @code{gdbtk} has a corresponding command
|
|
@samp{gdb_load_info}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-file-list-exec-source-files} Command
|
|
@findex -file-list-exec-source-files
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-file-list-exec-source-files
|
|
@end example
|
|
|
|
List the source files for the current executable.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
There's no GDB command which directly corresponds to this one.
|
|
@code{gdbtk} has an analogous command @samp{gdb_listfiles}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-file-list-shared-libraries} Command
|
|
@findex -file-list-shared-libraries
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-file-list-shared-libraries
|
|
@end example
|
|
|
|
List the shared libraries in the program.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{info shared}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-file-list-symbol-files} Command
|
|
@findex -file-list-symbol-files
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-file-list-symbol-files
|
|
@end example
|
|
|
|
List symbol files.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{info file} (part of it).
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-file-symbol-file} Command
|
|
@findex -file-symbol-file
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-file-symbol-file @var{file}
|
|
@end example
|
|
|
|
Read symbol table info from the specified @var{file} argument. When
|
|
used without arguments, clears GDB's symbol table info. No output is
|
|
produced, except for a completion notification.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{symbol-file}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-file-symbol-file /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
|
|
^done
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
@node GDB/MI Miscellaneous Commands
|
|
@section Miscellaneous GDB commands in @sc{gdb/mi}
|
|
|
|
@c @subheading -gdb-complete
|
|
|
|
@subheading The @code{-gdb-exit} Command
|
|
@findex -gdb-exit
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-gdb-exit
|
|
@end example
|
|
|
|
Exit GDB immediately.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
Approximately corresponds to @samp{quit}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-gdb-exit
|
|
@end smallexample
|
|
|
|
@subheading The @code{-gdb-set} Command
|
|
@findex -gdb-set
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-gdb-set
|
|
@end example
|
|
|
|
Set an internal GDB variable.
|
|
@c IS THIS A DOLLAR VARIABLE? OR SOMETHING LIKE ANNOTATE ?????
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{set}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-gdb-set $foo=3
|
|
^done
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-gdb-show} Command
|
|
@findex -gdb-show
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-gdb-show
|
|
@end example
|
|
|
|
Show the current value of a GDB variable.
|
|
|
|
@subsubheading GDB command
|
|
|
|
The corresponding GDB command is @samp{show}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-gdb-show annotate
|
|
^done,value="0"
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
@c @subheading -gdb-source
|
|
|
|
|
|
@subheading The @code{-gdb-version} Command
|
|
@findex -gdb-version
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-gdb-version
|
|
@end example
|
|
|
|
Show version information for GDB. Used mostly in testing.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
There's no equivalent GDB command. GDB by default shows this
|
|
information when you start an interactive session.
|
|
|
|
@subsubheading Example
|
|
|
|
@c This example modifies the actual output from GDB to avoid overfull
|
|
@c box in TeX.
|
|
@smallexample
|
|
(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)
|
|
@end smallexample
|
|
|
|
@ignore
|
|
@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
@node GDB/MI Kod Commands
|
|
@section @sc{gdb/mi} Kod Commands
|
|
|
|
The Kod commands are not implemented.
|
|
|
|
@c @subheading -kod-info
|
|
|
|
@c @subheading -kod-list
|
|
|
|
@c @subheading -kod-list-object-types
|
|
|
|
@c @subheading -kod-show
|
|
|
|
@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
@node GDB/MI Memory Overlay Commands
|
|
@section @sc{gdb/mi} Memory Overlay Commands
|
|
|
|
The memory overlay commands are not implemented.
|
|
|
|
@c @subheading -overlay-auto
|
|
|
|
@c @subheading -overlay-list-mapping-state
|
|
|
|
@c @subheading -overlay-list-overlays
|
|
|
|
@c @subheading -overlay-map
|
|
|
|
@c @subheading -overlay-off
|
|
|
|
@c @subheading -overlay-on
|
|
|
|
@c @subheading -overlay-unmap
|
|
|
|
@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
@node GDB/MI Signal Handling Commands
|
|
@section @sc{gdb/mi} Signal Handling Commands
|
|
|
|
Signal handling commands are not implemented.
|
|
|
|
@c @subheading -signal-handle
|
|
|
|
@c @subheading -signal-list-handle-actions
|
|
|
|
@c @subheading -signal-list-signal-types
|
|
@end ignore
|
|
|
|
|
|
@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
@node GDB/MI Stack Manipulation
|
|
@section Stack manipulation commands in @sc{gdb/mi}
|
|
|
|
|
|
@subheading The @code{-stack-info-frame} Command
|
|
@findex -stack-info-frame
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-stack-info-frame
|
|
@end example
|
|
|
|
Get info on the current frame.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{info frame} or @samp{frame}
|
|
(without arguments).
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
@subheading The @code{-stack-info-depth} Command
|
|
@findex -stack-info-depth
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-stack-info-depth [ @var{max-depth} ]
|
|
@end example
|
|
|
|
Return the depth of the stack. If the integer argument @var{max-depth}
|
|
is specified, do not count beyond @var{max-depth} frames.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
There's no equivalent GDB command.
|
|
|
|
@subsubheading Example
|
|
|
|
For a stack with frame levels 0 through 11:
|
|
|
|
@smallexample
|
|
(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)
|
|
@end smallexample
|
|
|
|
@subheading The @code{-stack-list-arguments} Command
|
|
@findex -stack-list-arguments
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-stack-list-arguments @var{show-values}
|
|
[ @var{low-frame} @var{high-frame} ]
|
|
@end example
|
|
|
|
Display a list of the arguments for the frames between @var{low-frame}
|
|
and @var{high-frame} (inclusive). If @var{low-frame} and
|
|
@var{high-frame} are not provided, list the arguments for the whole call
|
|
stack.
|
|
|
|
The @var{show-values} 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.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
GDB does not have an equivalent command. @code{gdbtk} has a
|
|
@samp{gdb_get_args} command which partially overlaps with the
|
|
functionality of @samp{-stack-list-arguments}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-stack-list-frames
|
|
^done,
|
|
stack=@{
|
|
frame=@{level="0 ",addr="0x00010734",func="callee4",
|
|
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="8"@},
|
|
frame=@{level="1 ",addr="0x0001076c",func="callee3",
|
|
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="17"@},
|
|
frame=@{level="2 ",addr="0x0001078c",func="callee2",
|
|
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="22"@},
|
|
frame=@{level="3 ",addr="0x000107b4",func="callee1",
|
|
file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="27"@},
|
|
frame=@{level="4 ",addr="0x000107e0",func="main",
|
|
file="../../../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)
|
|
@end smallexample
|
|
|
|
@c @subheading -stack-list-exception-handlers
|
|
|
|
|
|
@subheading The @code{-stack-list-frames} Command
|
|
@findex -stack-list-frames
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-stack-list-frames [ @var{low-frame} @var{high-frame} ]
|
|
@end example
|
|
|
|
List the frames currently on the stack. For each frame it displays the
|
|
following info:
|
|
|
|
@table @samp
|
|
@item @var{level}
|
|
The frame number, 0 being the topmost frame, i.e. the innermost function.
|
|
@item @var{addr}
|
|
The @code{$pc} value for that frame.
|
|
@item @var{func}
|
|
Function name.
|
|
@item @var{file}
|
|
File name of the source file where the function lives.
|
|
@item @var{line}
|
|
Line number corresponding to the @code{$pc}.
|
|
@end table
|
|
|
|
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.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB commands are @samp{backtrace} and @samp{where}.
|
|
|
|
@subsubheading Example
|
|
|
|
Full stack backtrace:
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-stack-list-frames
|
|
^done,stack=
|
|
@{frame=@{level="0 ",addr="0x0001076c",func="foo",
|
|
file="recursive2.c",line="11"@},
|
|
frame=@{level="1 ",addr="0x000107a4",func="foo",
|
|
file="recursive2.c",line="14"@},
|
|
frame=@{level="2 ",addr="0x000107a4",func="foo",
|
|
file="recursive2.c",line="14"@},
|
|
frame=@{level="3 ",addr="0x000107a4",func="foo",
|
|
file="recursive2.c",line="14"@},
|
|
frame=@{level="4 ",addr="0x000107a4",func="foo",
|
|
file="recursive2.c",line="14"@},
|
|
frame=@{level="5 ",addr="0x000107a4",func="foo",
|
|
file="recursive2.c",line="14"@},
|
|
frame=@{level="6 ",addr="0x000107a4",func="foo",
|
|
file="recursive2.c",line="14"@},
|
|
frame=@{level="7 ",addr="0x000107a4",func="foo",
|
|
file="recursive2.c",line="14"@},
|
|
frame=@{level="8 ",addr="0x000107a4",func="foo",
|
|
file="recursive2.c",line="14"@},
|
|
frame=@{level="9 ",addr="0x000107a4",func="foo",
|
|
file="recursive2.c",line="14"@},
|
|
frame=@{level="10",addr="0x000107a4",func="foo",
|
|
file="recursive2.c",line="14"@},
|
|
frame=@{level="11",addr="0x00010738",func="main",
|
|
file="recursive2.c",line="4"@}@}
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
Show frames between low_frame and high_frame:
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-stack-list-frames 3 5
|
|
^done,stack=
|
|
@{frame=@{level="3 ",addr="0x000107a4",func="foo",
|
|
file="recursive2.c",line="14"@},
|
|
frame=@{level="4 ",addr="0x000107a4",func="foo",
|
|
file="recursive2.c",line="14"@},
|
|
frame=@{level="5 ",addr="0x000107a4",func="foo",
|
|
file="recursive2.c",line="14"@}@}
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
Show a single frame:
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-stack-list-frames 3 3
|
|
^done,stack=
|
|
@{frame=@{level="3 ",addr="0x000107a4",func="foo",
|
|
file="recursive2.c",line="14"@}@}
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-stack-list-locals} Command
|
|
@findex -stack-list-locals
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-stack-list-locals @var{print-values}
|
|
@end example
|
|
|
|
Display the local variable names for the current frame. With an
|
|
argument of 0 prints only the names of the variables, with argument of 1
|
|
prints also their values.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
@samp{info locals} in GDB, @samp{gdb_get_locals} in @code{gdbtk}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-stack-list-locals 0
|
|
^done,locals=@{name="A",name="B",name="C"@}
|
|
(gdb)
|
|
-stack-list-locals 1
|
|
^done,locals=@{@{name="A",value="1"@},@{name="B",value="2"@},
|
|
@{name="C",value="3"@}@}
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-stack-select-frame} Command
|
|
@findex -stack-select-frame
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-stack-select-frame @var{framenum}
|
|
@end example
|
|
|
|
Change the current frame. Select a different frame @var{framenum} on
|
|
the stack.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB commands are @samp{frame}, @samp{up}, @samp{down},
|
|
@samp{select-frame}, @samp{up-silent}, and @samp{down-silent}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-stack-select-frame 2
|
|
^done
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
@node GDB/MI Symbol Query
|
|
@section @sc{gdb/mi} Symbol Query Commands
|
|
|
|
|
|
@subheading The @code{-symbol-info-address} Command
|
|
@findex -symbol-info-address
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-symbol-info-address @var{symbol}
|
|
@end example
|
|
|
|
Describe where @var{symbol} is stored.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{info address}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-symbol-info-file} Command
|
|
@findex -symbol-info-file
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-symbol-info-file
|
|
@end example
|
|
|
|
Show the file for the symbol.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
There's no equivalent GDB command. @code{gdbtk} has
|
|
@samp{gdb_filnd_file}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-symbol-info-function} Command
|
|
@findex -symbol-info-function
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-symbol-info-function
|
|
@end example
|
|
|
|
Show which function the symbol lives in.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
@samp{gdb_get_function} in @code{gdbtk}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-symbol-info-line} Command
|
|
@findex -symbol-info-line
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-symbol-info-line
|
|
@end example
|
|
|
|
Show the core addresses of the code for a source line.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB comamnd is @samp{info line}. @code{gdbtk} has the
|
|
@samp{gdb_get_line} @samp{gdb_get_file} commands.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-symbol-info-symbol} Command
|
|
@findex -symbol-info-symbol
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-symbol-info-symbol @var{addr}
|
|
@end example
|
|
|
|
Describe what symbol is at location @var{addr}.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{info symbol}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-symbol-list-functions} Command
|
|
@findex -symbol-list-functions
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-symbol-list-functions
|
|
@end example
|
|
|
|
List the functions in the executable.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
@samp{info functions} in GDB, @samp{gdb_listfunc} @samp{gdb_search} in
|
|
@code{gdbtk}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-symbol-list-types} Command
|
|
@findex -symbol-list-types
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-symbol-list-types
|
|
@end example
|
|
|
|
List all the type names.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding commands are @samp{info types} in GDB,
|
|
@samp{gdb_search} in @code{gdbtk}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-symbol-list-variables} Command
|
|
@findex -symbol-list-variables
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-symbol-list-variables
|
|
@end example
|
|
|
|
List all the global and static variable names.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
@samp{info variables} in GDB, @samp{gdb_search} in @code{gdbtk}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-symbol-locate} Command
|
|
@findex -symbol-locate
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-symbol-locate
|
|
@end example
|
|
|
|
@subsubheading GDB Command
|
|
|
|
@samp{gdb_loc} in @code{gdbtk}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-symbol-type} Command
|
|
@findex -symbol-type
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-symbol-type @var{variable}
|
|
@end example
|
|
|
|
Show type of @var{variable}.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{ptype}, @code{gdbtk} has
|
|
@samp{gdb_obj_variable}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
@node GDB/MI Target Manipulation
|
|
@section @sc{gdb/mi} Target Manipulation Commands
|
|
|
|
|
|
@subheading The @code{-target-attach} Command
|
|
@findex -target-attach
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-target-attach @var{pid} | @var{file}
|
|
@end example
|
|
|
|
Attach to a process @var{pid} or a file @var{file} outside of GDB.
|
|
|
|
@subsubheading GDB command
|
|
|
|
The corresponding GDB command is @samp{attach}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-target-compare-sections} Command
|
|
@findex -target-compare-sections
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-target-compare-sections [ @var{section} ]
|
|
@end example
|
|
|
|
Compare data of section @var{section} on target to the exec file.
|
|
Without the argument, all sections are compared.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The GDB equivalent is @samp{compare-sections}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-target-detach} Command
|
|
@findex -target-detach
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-target-detach
|
|
@end example
|
|
|
|
Disconnect from the remote target. There's no output.
|
|
|
|
@subsubheading GDB command
|
|
|
|
The corresponding GDB command is @samp{detach}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-target-detach
|
|
^done
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-target-download} Command
|
|
@findex -target-download
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-target-download
|
|
@end example
|
|
|
|
Loads the executable onto the remote target.
|
|
It prints out an update message every half second, which includes the fields:
|
|
|
|
@table @samp
|
|
@item section
|
|
The name of the section.
|
|
@item section-sent
|
|
The size of what has been sent so far for that section.
|
|
@item section-size
|
|
The size of the section.
|
|
@item total-sent
|
|
The total size of what was sent so far (the current and the previous sections).
|
|
@item total-size
|
|
The size of the overall executable to download.
|
|
@end table
|
|
|
|
@noindent
|
|
Each message is sent as status record (@pxref{GDB/MI Output Syntax, ,
|
|
@sc{gdb/mi} Output Syntax}).
|
|
|
|
In addition, it prints the name and size of the sections, as they are
|
|
downloaded. These messages include the following fields:
|
|
|
|
@table @samp
|
|
@item section
|
|
The name of the section.
|
|
@item section-size
|
|
The size of the section.
|
|
@item total-size
|
|
The size of the overall executable to download.
|
|
@end table
|
|
|
|
@noindent
|
|
At the end, a summary is printed.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{load}.
|
|
|
|
@subsubheading Example
|
|
|
|
Note: each status message appears on a single line. Here the messages
|
|
have been broken down so that they can fit onto a page.
|
|
|
|
@smallexample
|
|
(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)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-target-exec-status} Command
|
|
@findex -target-exec-status
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-target-exec-status
|
|
@end example
|
|
|
|
Provide information on the state of the target (whether it is running or
|
|
not, for instance).
|
|
|
|
@subsubheading GDB Command
|
|
|
|
There's no equivalent GDB command.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-target-list-available-targets} Command
|
|
@findex -target-list-available-targets
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-target-list-available-targets
|
|
@end example
|
|
|
|
List the possible targets to connect to.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{help target}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-target-list-current-targets} Command
|
|
@findex -target-list-current-targets
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-target-list-current-targets
|
|
@end example
|
|
|
|
Describe the current target.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding information is printed by @samp{info file} (among
|
|
other things).
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-target-list-parameters} Command
|
|
@findex -target-list-parameters
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-target-list-parameters
|
|
@end example
|
|
|
|
@c ????
|
|
|
|
@subsubheading GDB Command
|
|
|
|
No equivalent.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-target-select} Command
|
|
@findex -target-select
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-target-select @var{type} @var{parameters ...}
|
|
@end example
|
|
|
|
Connect GDB to the remote target. This command takes two args:
|
|
|
|
@table @samp
|
|
@item @var{type}
|
|
The type of target, for instance @samp{async}, @samp{remote}, etc.
|
|
@item @var{parameters}
|
|
Device names, host names and the like. @xref{Target Commands, ,
|
|
Commands for managing targets}, for more details.
|
|
@end table
|
|
|
|
The output is a connection notification, followed by the address at
|
|
which the target program is, in the following form:
|
|
|
|
@smallexample
|
|
^connected,addr="@var{address}",func="@var{function name}",
|
|
args=@{@var{arg list}@}
|
|
@end smallexample
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{target}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-target-select async /dev/ttya
|
|
^connected,addr="0xfe00a300",func="??",args=@{@}
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
@node GDB/MI Thread Commands
|
|
@section @sc{gdb/mi} Thread Commands
|
|
|
|
|
|
@subheading The @code{-thread-info} Command
|
|
@findex -thread-info
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-thread-info
|
|
@end example
|
|
|
|
@subsubheading GDB command
|
|
|
|
No equivalent.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-thread-list-all-threads} Command
|
|
@findex -thread-list-all-threads
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-thread-list-all-threads
|
|
@end example
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The equivalent GDB command is @samp{info threads}.
|
|
|
|
@subsubheading Example
|
|
N.A.
|
|
|
|
|
|
@subheading The @code{-thread-list-ids} Command
|
|
@findex -thread-list-ids
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-thread-list-ids
|
|
@end example
|
|
|
|
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.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
Part of @samp{info threads} supplies the same information.
|
|
|
|
@subsubheading Example
|
|
|
|
No threads present, besides the main process.
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-thread-list-ids
|
|
^done,thread-ids=@{@},number-of-threads="0"
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
|
|
Several threads.
|
|
|
|
@smallexample
|
|
(gdb)
|
|
-thread-list-ids
|
|
^done,thread-ids=@{thread-id="3",thread-id="2",thread-id="1"@},
|
|
number-of-threads="3"
|
|
(gdb)
|
|
@end smallexample
|
|
|
|
|
|
@subheading The @code{-thread-select} Command
|
|
@findex -thread-select
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-thread-select @var{threadnum}
|
|
@end example
|
|
|
|
Make @var{threadnum} the current thread. It prints the number of the new
|
|
current thread, and the topmost frame for that thread.
|
|
|
|
@subsubheading GDB Command
|
|
|
|
The corresponding GDB command is @samp{thread}.
|
|
|
|
@subsubheading Example
|
|
|
|
@smallexample
|
|
(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)
|
|
@end smallexample
|
|
|
|
@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
@node GDB/MI Tracepoint Commands
|
|
@section @sc{gdb/mi} Tracepoint Commands
|
|
|
|
The tracepoint commands are not yet implemented.
|
|
|
|
@c @subheading -trace-actions
|
|
|
|
@c @subheading -trace-delete
|
|
|
|
@c @subheading -trace-disable
|
|
|
|
@c @subheading -trace-dump
|
|
|
|
@c @subheading -trace-enable
|
|
|
|
@c @subheading -trace-exists
|
|
|
|
@c @subheading -trace-find
|
|
|
|
@c @subheading -trace-frame-number
|
|
|
|
@c @subheading -trace-info
|
|
|
|
@c @subheading -trace-insert
|
|
|
|
@c @subheading -trace-list
|
|
|
|
@c @subheading -trace-pass-count
|
|
|
|
@c @subheading -trace-save
|
|
|
|
@c @subheading -trace-start
|
|
|
|
@c @subheading -trace-stop
|
|
|
|
|
|
@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
@node GDB/MI Variable Objects
|
|
@section @sc{gdb/mi} Variable Objects
|
|
|
|
|
|
@subheading Motivation for Variable Objects in @sc{gdb/mi}
|
|
|
|
For the implementation of a variable debugger window (locals, watched
|
|
expressions, etc.), we are proposing the adaptation of the existing code
|
|
used by @code{Insight}.
|
|
|
|
The two main reasons for that are:
|
|
|
|
@enumerate 1
|
|
@item
|
|
It has been proven in practice (it is already on its second generation).
|
|
|
|
@item
|
|
It will shorten development time (needless to say how important it is
|
|
now).
|
|
@end enumerate
|
|
|
|
The original interface was designed to be used by Tcl code, so it was
|
|
slightly changed so it could be used through flathead. This document
|
|
describes the flathead operations that will be available and gives some
|
|
hints about their use.
|
|
|
|
@emph{Note}: In addition to the set of operations described here, we
|
|
expect the @sc{gui} implementation of a variable window to require, at
|
|
least, the following operations:
|
|
|
|
@itemize @bullet
|
|
@item -gdb-show output-radix
|
|
@item -stack-list-arguments
|
|
@item -stack-list-locals
|
|
@item -stack-select-frame
|
|
@end itemize
|
|
|
|
@subheading Introduction to Variable Objects in @sc{gdb/mi}
|
|
|
|
@cindex variable objects in @sc{gdb/mi}
|
|
The basic idea behind variable objects is the creation of a named object
|
|
to represent a variable, an expression, a memory location or even a CPU
|
|
register. For each object created, a set of operations is available for
|
|
examining or changing its properties.
|
|
|
|
Furthermore, complex data types, such as C structures, are represented
|
|
in a tree format. For instance, the @code{struct} type variable is the
|
|
root and the children will represent the struct members. If a child
|
|
is itself of a complex type, it will also have children of its own.
|
|
Appropriate language differences are handled for C, C@t{++} and Java.
|
|
|
|
When returning the actual values of the objects, this facility allows
|
|
for the individual selection of the display format used in the result
|
|
creation. It can be chosen among: binary, decimal, hexadecimal, octal
|
|
and natural. Natural refers to a default format automatically
|
|
chosen based on the variable type (like decimal for an @code{int}, hex
|
|
for pointers, etc.).
|
|
|
|
The following is the complete set of flathead operations defined to
|
|
access this functionality:
|
|
|
|
@multitable @columnfractions .3 .6
|
|
@item @strong{Operation}
|
|
@tab @strong{Description}
|
|
|
|
@item -var-create
|
|
@tab create a variable object
|
|
@item -var-delete
|
|
@tab delete the variable object and its children
|
|
@item -var-set-format
|
|
@tab set the display format of this variable
|
|
@item -var-show-format
|
|
@tab show the display format of this variable
|
|
@item -var-info-num-children
|
|
@tab tells how many children this object has
|
|
@item -var-list-children
|
|
@tab return a list of the object's children
|
|
@item -var-info-type
|
|
@tab show the type of this variable object
|
|
@item -var-info-expression
|
|
@tab print what this variable object represents
|
|
@item -var-show-attributes
|
|
@tab is this variable editable? does it exist here?
|
|
@item -var-evaluate-expression
|
|
@tab get the value of this variable
|
|
@item -var-assign
|
|
@tab set the value of this variable
|
|
@item -var-update
|
|
@tab update the variable and its children
|
|
@end multitable
|
|
|
|
In the next subsection we describe each operation in detail and suggest
|
|
how it can be used.
|
|
|
|
@subheading Description And Use of Operations on Variable Objects
|
|
|
|
@subheading The @code{-var-create} Command
|
|
@findex -var-create
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-var-create @{@var{name} | "-"@}
|
|
@{@var{frame-addr} | "*"@} @var{expression}
|
|
@end example
|
|
|
|
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.
|
|
|
|
The @var{name} parameter is the string by which the object can be
|
|
referenced. It must be unique. If @samp{-} is specified, the varobj
|
|
system will generate a string "varNNNNNN'' automatically. It will be
|
|
unique provided that one does not specify @var{name} on that format.
|
|
The command fails if a duplicate name is found.
|
|
|
|
The frame under which the expression should be evaluated can be
|
|
specified by @var{frame-addr}. A @samp{*} indicates that the current
|
|
frame should be used.
|
|
|
|
@var{expression} is any expression valid on the current language set (must not
|
|
begin with a @samp{*}), or one of the following:
|
|
|
|
@itemize @bullet
|
|
@item
|
|
@samp{*@var{addr}}, where @var{addr} is the address of a memory cell
|
|
|
|
@item
|
|
@samp{*@var{addr}-@var{addr}} -- a memory address range (TBD)
|
|
|
|
@item
|
|
@samp{$@var{regname}} -- a CPU register name
|
|
@end itemize
|
|
|
|
@subsubheading Result
|
|
|
|
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:
|
|
|
|
@example
|
|
name="@var{name}",numchild="N",type="@var{type}"
|
|
@end example
|
|
|
|
|
|
@subheading The @code{-var-delete} Command
|
|
@findex -var-delete
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-var-delete @var{name}
|
|
@end example
|
|
|
|
Deletes a previously created variable object and all of its children.
|
|
|
|
Returns an error if the object @var{name} is not found.
|
|
|
|
|
|
@subheading The @code{-var-set-format} Command
|
|
@findex -var-set-format
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-var-set-format @var{name} @var{format-spec}
|
|
@end example
|
|
|
|
Sets the output format for the value of the object @var{name} to be
|
|
@var{format-spec}.
|
|
|
|
The syntax for the @var{format-spec} is as follows:
|
|
|
|
@example
|
|
@var{format-spec} @expansion{}
|
|
@{binary | decimal | hexadecimal | octal | natural@}
|
|
@end example
|
|
|
|
|
|
@subheading The @code{-var-show-format} Command
|
|
@findex -var-show-format
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-var-show-format @var{name}
|
|
@end example
|
|
|
|
Returns the format used to display the value of the object @var{name}.
|
|
|
|
@example
|
|
format @expansion{}
|
|
@var{format-spec}
|
|
@end example
|
|
|
|
|
|
@subheading The @code{-var-info-num-children} Command
|
|
@findex -var-info-num-children
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-var-info-num-children @var{name}
|
|
@end example
|
|
|
|
Returns the number of children of a variable object @var{name}:
|
|
|
|
@example
|
|
numchild=@var{n}
|
|
@end example
|
|
|
|
|
|
@subheading The @code{-var-list-children} Command
|
|
@findex -var-list-children
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-var-list-children @var{name}
|
|
@end example
|
|
|
|
Returns a list of the children of the specified variable object:
|
|
|
|
@example
|
|
numchild=@var{n},children=@{@{name=@var{name},
|
|
numchild=@var{n},type=@var{type}@},(repeats N times)@}
|
|
@end example
|
|
|
|
|
|
@subheading The @code{-var-info-type} Command
|
|
@findex -var-info-type
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-var-info-type @var{name}
|
|
@end example
|
|
|
|
Returns the type of the specified variable @var{name}. The type is
|
|
returned as a string in the same format as it is output by the GDB CLI:
|
|
|
|
@example
|
|
type=@var{typename}
|
|
@end example
|
|
|
|
|
|
@subheading The @code{-var-info-expression} Command
|
|
@findex -var-info-expression
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-var-info-expression @var{name}
|
|
@end example
|
|
|
|
Returns what is represented by the variable object @var{name}:
|
|
|
|
@example
|
|
lang=@var{lang-spec},exp=@var{expression}
|
|
@end example
|
|
|
|
@noindent
|
|
where @var{lang-spec} is @code{@{"C" | "C++" | "Java"@}}.
|
|
|
|
@subheading The @code{-var-show-attributes} Command
|
|
@findex -var-show-attributes
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-var-show-attributes @var{name}
|
|
@end example
|
|
|
|
List attributes of the specified variable object @var{name}:
|
|
|
|
@example
|
|
status=@var{attr} [ ( ,@var{attr} )* ]
|
|
@end example
|
|
|
|
@noindent
|
|
where @var{attr} is @code{@{ @{ editable | noneditable @} | TBD @}}.
|
|
|
|
@subheading The @code{-var-evaluate-expression} Command
|
|
@findex -var-evaluate-expression
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-var-evaluate-expression @var{name}
|
|
@end example
|
|
|
|
Evaluates the expression that is represented by the specified variable
|
|
object and returns its value as a string in the current format specified
|
|
for the object:
|
|
|
|
@example
|
|
value=@var{value}
|
|
@end example
|
|
|
|
@subheading The @code{-var-assign} Command
|
|
@findex -var-assign
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-var-assign @var{name} @var{expression}
|
|
@end example
|
|
|
|
Assigns the value of @var{expression} to the variable object specified
|
|
by @var{name}. The object must be ``editable''.
|
|
|
|
@subheading The @code{-var-update} Command
|
|
@findex -var-update
|
|
|
|
@subsubheading Synopsis
|
|
|
|
@example
|
|
-var-update @{@var{name} | "*"@}
|
|
@end example
|
|
|
|
Update the value of the variable object @var{name} by evaluating its
|
|
expression after fetching all the new values from memory or registers.
|
|
A @samp{*} causes all existing variable objects to be updated.
|
|
|
|
@c %%%%%%%%%%%%%%%%%%%%%%%%%%%% SECTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
@node GDB/MI Draft Changes to Output Syntax
|
|
@section @sc{gdb/mi} Draft Changes to Output Syntax
|
|
|
|
@cindex draft changes to output syntax of @sc{gdb/mi}
|
|
@cindex @sc{gdb/mi}, draft changes to output syntax
|
|
|
|
One problem identified in the existing @sc{gdb/mi} output syntax was the
|
|
difficulty in differentiating between a tuple such as:
|
|
|
|
@example
|
|
@{number="1",type="breakpoint",disp="keep",enabled="y"@}
|
|
@end example
|
|
|
|
where each value has a unique label, and a list such as:
|
|
|
|
@example
|
|
@{"1","2","4"@}
|
|
@{bp="1",bp="2",bp="4"@}
|
|
@end example
|
|
|
|
where values are un-labeled or the label is duplicated.
|
|
|
|
What follows is a draft revision to the output specification that
|
|
addresses this problem.
|
|
|
|
The output from @sc{gdb/mi} consists of zero or more out-of-band records
|
|
optionally followed by a single result record, the result record being
|
|
for the most recent command input. The sequence is terminated by
|
|
``(gdb)''.
|
|
|
|
Asynchronous @sc{gdb/mi} output is similar.
|
|
|
|
Each output record directly associated with an input command is prefixed
|
|
by the input commands @code{@var{token}}.
|
|
|
|
@table @code
|
|
@item @var{output} @expansion{}
|
|
@{ @var{out-of-band-record} @} @code{[} @var{result-record} @code{]} "(gdb)" @var{nl}
|
|
|
|
@item @var{result-record} @expansion{}
|
|
@code{[} @var{token} @code{]} "^" @var{result-class} @{ "," @var{result} @} @var{nl}
|
|
|
|
@item @var{out-of-band-record} @expansion{}
|
|
@var{async-record} @code{|} @var{stream-record}
|
|
|
|
@item @var{async-record} @expansion{}
|
|
@var{exec-async-output} @code{|} @var{status-async-output} @code{|} @var{notify-async-output}
|
|
|
|
@item @var{exec-async-output} @expansion{}
|
|
@code{[} @var{token} @code{]} "*" @var{async-output}
|
|
|
|
@item @var{status-async-output} @expansion{}
|
|
@code{[} @var{token} @code{]} "+" @var{async-output}
|
|
|
|
@item @var{notify-async-output} @expansion{}
|
|
@code{[} @var{token} @code{]} "=" @var{async-output}
|
|
|
|
@item @var{async-output} @expansion{}
|
|
@var{async-class} @{ "," @var{result} @} @var{nl}
|
|
|
|
@item @var{result-class} @expansion{}
|
|
"done" @code{|} "running" @code{|} "connected" @code{|} "error" @code{|} "exit"
|
|
|
|
@item @var{async-class} @expansion{}
|
|
"stopped" @code{|} @emph{others depending on need as still in development}
|
|
|
|
@item @var{result} @expansion{}
|
|
@var{string} "=" @var{value}
|
|
|
|
@item @var{value} @expansion{}
|
|
@var{c-string} @code{|} @var{tupple} @code{|} @var{list}
|
|
|
|
@item @var{tupple} @expansion{}
|
|
"@{@}" @code{|} "@{" @var{result} @{ "," @var{result} @} "@}"
|
|
|
|
@item @var{list} @expansion{}
|
|
"@code{[]}" @code{|} "@code{[}" @var{value} @{ "," @var{value} @} "@code{]}"
|
|
|
|
@item @var{string} @expansion{}
|
|
@emph{[-A-Za-z\.0-9_]*}
|
|
|
|
@item @var{c-string} @expansion{}
|
|
@emph{See the input specification}
|
|
|
|
@item @var{stream-record} @expansion{}
|
|
@var{console-stream-output} @code{|} @var{target-stream-output} @code{|} @var{log-stream-output}
|
|
|
|
@item @var{console-stream-output} @expansion{}
|
|
"~" @var{c-string}
|
|
|
|
@item @var{target-stream-output} @expansion{}
|
|
"@@" @var{c-string}
|
|
|
|
@item @var{log-stream-output} @expansion{}
|
|
"&" @var{c-string}
|
|
|
|
@item @var{nl} @expansion{}
|
|
CR @code{|} CR-LF
|
|
|
|
@item @var{token} @expansion{}
|
|
"any sequence of digits"
|
|
|
|
@end table
|
|
|
|
In addition, the following are still being developed.
|
|
|
|
@table @code
|
|
|
|
@item @var{query}
|
|
This action is currently undefined.
|
|
|
|
@end table
|
|
|
|
Notes:
|
|
|
|
@itemize @bullet
|
|
|
|
@item
|
|
All output sequences end in a single line containing a period.
|
|
|
|
@item
|
|
The @code{@var{token}} is from the corresponding request. If an execution
|
|
command is interrupted by the -exec-interrupt command, the token
|
|
associated with the `*stopped' message is the one of the original
|
|
execution command, not the one of the interrupt-command.
|
|
|
|
@item
|
|
@var{status-async-output} contains on-going status information about the progress
|
|
of a slow operation. It can be discarded. All status output is prefixed by
|
|
the prefix `+'.
|
|
|
|
@item
|
|
@var{exec-async-output} contains asynchronous state change on the target
|
|
(stopped, started, disappeared). All async output is prefixed by
|
|
the prefix `*'.
|
|
|
|
@item
|
|
@var{notify-async-output} contains supplementary information that the client should
|
|
handle (new breakpoint information). All notify output is prefixed by
|
|
the prefix `='.
|
|
|
|
@item
|
|
@var{console-stream-output} 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 the prefix ``~''.
|
|
|
|
@item
|
|
@var{target-stream-output} is the output produced by the target program.
|
|
All the target output is prefixed by the prefix ``@@''.
|
|
|
|
@item
|
|
@var{log-stream-output} 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 the prefix ``&''.
|
|
|
|
@end itemize
|
|
|
|
@c Local variables:
|
|
@c change-log-default-name: "ChangeLog-mi"
|
|
@c End:
|