summaryrefslogtreecommitdiff
path: root/share/info/gdb.info
diff options
context:
space:
mode:
Diffstat (limited to 'share/info/gdb.info')
-rw-r--r--share/info/gdb.info39097
1 files changed, 39097 insertions, 0 deletions
diff --git a/share/info/gdb.info b/share/info/gdb.info
new file mode 100644
index 0000000..5838703
--- /dev/null
+++ b/share/info/gdb.info
@@ -0,0 +1,39097 @@
+This is gdb.info, produced by makeinfo version 4.13 from
+/Volumes/androidtc/androidtoolchain/./src/build/../gdb/gdb-7.3.x/gdb/doc/gdb.texinfo.
+
+INFO-DIR-SECTION Software development
+START-INFO-DIR-ENTRY
+* Gdb: (gdb). The GNU debugger.
+END-INFO-DIR-ENTRY
+
+ Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
+1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+2010 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being "Free Software" and "Free Software Needs Free
+Documentation", with the Front-Cover Texts being "A GNU Manual," and
+with the Back-Cover Texts as in (a) below.
+
+ (a) The FSF's Back-Cover Text is: "You are free to copy and modify
+this GNU Manual. Buying copies from GNU Press supports the FSF in
+developing GNU and promoting software freedom."
+
+ This file documents the GNU debugger GDB.
+
+ This is the Tenth Edition, of `Debugging with GDB: the GNU
+Source-Level Debugger' for GDB (GDB) Version 7.3.1-gg2.
+
+ Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
+1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
+2010 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being "Free Software" and "Free Software Needs Free
+Documentation", with the Front-Cover Texts being "A GNU Manual," and
+with the Back-Cover Texts as in (a) below.
+
+ (a) The FSF's Back-Cover Text is: "You are free to copy and modify
+this GNU Manual. Buying copies from GNU Press supports the FSF in
+developing GNU and promoting software freedom."
+
+
+File: gdb.info, Node: Top, Next: Summary, Prev: (dir), Up: (dir)
+
+Debugging with GDB
+******************
+
+This file describes GDB, the GNU symbolic debugger.
+
+ This is the Tenth Edition, for GDB (GDB) Version 7.3.1-gg2.
+
+ Copyright (C) 1988-2010 Free Software Foundation, Inc.
+
+ This edition of the GDB manual is dedicated to the memory of Fred
+Fish. Fred was a long-standing contributor to GDB and to Free software
+in general. We will miss him.
+
+* Menu:
+
+* Summary:: Summary of GDB
+* Sample Session:: A sample GDB session
+
+* Invocation:: Getting in and out of GDB
+* Commands:: GDB commands
+* Running:: Running programs under GDB
+* Stopping:: Stopping and continuing
+* Reverse Execution:: Running programs backward
+* Process Record and Replay:: Recording inferior's execution and replaying it
+* Stack:: Examining the stack
+* Source:: Examining source files
+* Data:: Examining data
+* Optimized Code:: Debugging optimized code
+* Macros:: Preprocessor Macros
+* Tracepoints:: Debugging remote targets non-intrusively
+* Overlays:: Debugging programs that use overlays
+
+* Languages:: Using GDB with different languages
+
+* Symbols:: Examining the symbol table
+* Altering:: Altering execution
+* GDB Files:: GDB files
+* Targets:: Specifying a debugging target
+* Remote Debugging:: Debugging remote programs
+* Configurations:: Configuration-specific information
+* Controlling GDB:: Controlling GDB
+* Extending GDB:: Extending GDB
+* Interpreters:: Command Interpreters
+* TUI:: GDB Text User Interface
+* Emacs:: Using GDB under GNU Emacs
+* GDB/MI:: GDB's Machine Interface.
+* Annotations:: GDB's annotation interface.
+* JIT Interface:: Using the JIT debugging interface.
+
+* GDB Bugs:: Reporting bugs in GDB
+
+
+* Command Line Editing:: Command Line Editing
+* Using History Interactively:: Using History Interactively
+* In Memoriam:: In Memoriam
+* Formatting Documentation:: How to format and print GDB documentation
+* Installing GDB:: Installing GDB
+* Maintenance Commands:: Maintenance Commands
+* Remote Protocol:: GDB Remote Serial Protocol
+* Agent Expressions:: The GDB Agent Expression Mechanism
+* Target Descriptions:: How targets can describe themselves to
+ GDB
+* Operating System Information:: Getting additional information from
+ the operating system
+* Trace File Format:: GDB trace file format
+* Copying:: GNU General Public License says
+ how you can copy and share GDB
+* GNU Free Documentation License:: The license for this documentation
+* Index:: Index
+
+
+File: gdb.info, Node: Summary, Next: Sample Session, Prev: Top, Up: Top
+
+Summary of GDB
+**************
+
+The purpose of a debugger such as GDB is to allow you to see what is
+going on "inside" another program while it executes--or what another
+program was doing at the moment it crashed.
+
+ GDB can do four main kinds of things (plus other things in support of
+these) to help you catch bugs in the act:
+
+ * Start your program, specifying anything that might affect its
+ behavior.
+
+ * Make your program stop on specified conditions.
+
+ * Examine what has happened, when your program has stopped.
+
+ * Change things in your program, so you can experiment with
+ correcting the effects of one bug and go on to learn about another.
+
+ You can use GDB to debug programs written in C and C++. For more
+information, see *note Supported Languages: Supported Languages. For
+more information, see *note C and C++: C.
+
+ Support for D is partial. For information on D, see *note D: D.
+
+ Support for Modula-2 is partial. For information on Modula-2, see
+*note Modula-2: Modula-2.
+
+ Support for OpenCL C is partial. For information on OpenCL C, see
+*note OpenCL C: OpenCL C.
+
+ Debugging Pascal programs which use sets, subranges, file variables,
+or nested functions does not currently work. GDB does not support
+entering expressions, printing values, or similar features using Pascal
+syntax.
+
+ GDB can be used to debug programs written in Fortran, although it
+may be necessary to refer to some variables with a trailing underscore.
+
+ GDB can be used to debug programs written in Objective-C, using
+either the Apple/NeXT or the GNU Objective-C runtime.
+
+* Menu:
+
+* Free Software:: Freely redistributable software
+* Contributors:: Contributors to GDB
+
+
+File: gdb.info, Node: Free Software, Next: Contributors, Up: Summary
+
+Free Software
+=============
+
+GDB is "free software", protected by the GNU General Public License
+(GPL). The GPL gives you the freedom to copy or adapt a licensed
+program--but every person getting a copy also gets with it the freedom
+to modify that copy (which means that they must get access to the
+source code), and the freedom to distribute further copies. Typical
+software companies use copyrights to limit your freedoms; the Free
+Software Foundation uses the GPL to preserve these freedoms.
+
+ Fundamentally, the General Public License is a license which says
+that you have these freedoms and that you cannot take these freedoms
+away from anyone else.
+
+Free Software Needs Free Documentation
+======================================
+
+The biggest deficiency in the free software community today is not in
+the software--it is the lack of good free documentation that we can
+include with the free software. Many of our most important programs do
+not come with free reference manuals and free introductory texts.
+Documentation is an essential part of any software package; when an
+important free software package does not come with a free manual and a
+free tutorial, that is a major gap. We have many such gaps today.
+
+ Consider Perl, for instance. The tutorial manuals that people
+normally use are non-free. How did this come about? Because the
+authors of those manuals published them with restrictive terms--no
+copying, no modification, source files not available--which exclude
+them from the free software world.
+
+ That wasn't the first time this sort of thing happened, and it was
+far from the last. Many times we have heard a GNU user eagerly
+describe a manual that he is writing, his intended contribution to the
+community, only to learn that he had ruined everything by signing a
+publication contract to make it non-free.
+
+ Free documentation, like free software, is a matter of freedom, not
+price. The problem with the non-free manual is not that publishers
+charge a price for printed copies--that in itself is fine. (The Free
+Software Foundation sells printed copies of manuals, too.) The problem
+is the restrictions on the use of the manual. Free manuals are
+available in source code form, and give you permission to copy and
+modify. Non-free manuals do not allow this.
+
+ The criteria of freedom for a free manual are roughly the same as for
+free software. Redistribution (including the normal kinds of
+commercial redistribution) must be permitted, so that the manual can
+accompany every copy of the program, both on-line and on paper.
+
+ Permission for modification of the technical content is crucial too.
+When people modify the software, adding or changing features, if they
+are conscientious they will change the manual too--so they can provide
+accurate and clear documentation for the modified program. A manual
+that leaves you no choice but to write a new manual to document a
+changed version of the program is not really available to our community.
+
+ Some kinds of limits on the way modification is handled are
+acceptable. For example, requirements to preserve the original
+author's copyright notice, the distribution terms, or the list of
+authors, are ok. It is also no problem to require modified versions to
+include notice that they were modified. Even entire sections that may
+not be deleted or changed are acceptable, as long as they deal with
+nontechnical topics (like this one). These kinds of restrictions are
+acceptable because they don't obstruct the community's normal use of
+the manual.
+
+ However, it must be possible to modify all the _technical_ content
+of the manual, and then distribute the result in all the usual media,
+through all the usual channels. Otherwise, the restrictions obstruct
+the use of the manual, it is not free, and we need another manual to
+replace it.
+
+ Please spread the word about this issue. Our community continues to
+lose manuals to proprietary publishing. If we spread the word that
+free software needs free reference manuals and free tutorials, perhaps
+the next person who wants to contribute by writing documentation will
+realize, before it is too late, that only free manuals contribute to
+the free software community.
+
+ If you are writing documentation, please insist on publishing it
+under the GNU Free Documentation License or another free documentation
+license. Remember that this decision requires your approval--you don't
+have to let the publisher decide. Some commercial publishers will use
+a free license if you insist, but they will not propose the option; it
+is up to you to raise the issue and say firmly that this is what you
+want. If the publisher you are dealing with refuses, please try other
+publishers. If you're not sure whether a proposed license is free,
+write to <licensing@gnu.org>.
+
+ You can encourage commercial publishers to sell more free, copylefted
+manuals and tutorials by buying them, and particularly by buying copies
+from the publishers that paid for their writing or for major
+improvements. Meanwhile, try to avoid buying non-free documentation at
+all. Check the distribution terms of a manual before you buy it, and
+insist that whoever seeks your business must respect your freedom.
+Check the history of the book, and try to reward the publishers that
+have paid or pay the authors to work on it.
+
+ The Free Software Foundation maintains a list of free documentation
+published by other publishers, at
+`http://www.fsf.org/doc/other-free-books.html'.
+
+
+File: gdb.info, Node: Contributors, Prev: Free Software, Up: Summary
+
+Contributors to GDB
+===================
+
+Richard Stallman was the original author of GDB, and of many other GNU
+programs. Many others have contributed to its development. This
+section attempts to credit major contributors. One of the virtues of
+free software is that everyone is free to contribute to it; with
+regret, we cannot actually acknowledge everyone here. The file
+`ChangeLog' in the GDB distribution approximates a blow-by-blow account.
+
+ Changes much prior to version 2.0 are lost in the mists of time.
+
+ _Plea:_ Additions to this section are particularly welcome. If you
+ or your friends (or enemies, to be evenhanded) have been unfairly
+ omitted from this list, we would like to add your names!
+
+ So that they may not regard their many labors as thankless, we
+particularly thank those who shepherded GDB through major releases:
+Andrew Cagney (releases 6.3, 6.2, 6.1, 6.0, 5.3, 5.2, 5.1 and 5.0); Jim
+Blandy (release 4.18); Jason Molenda (release 4.17); Stan Shebs
+(release 4.14); Fred Fish (releases 4.16, 4.15, 4.13, 4.12, 4.11, 4.10,
+and 4.9); Stu Grossman and John Gilmore (releases 4.8, 4.7, 4.6, 4.5,
+and 4.4); John Gilmore (releases 4.3, 4.2, 4.1, 4.0, and 3.9); Jim
+Kingdon (releases 3.5, 3.4, and 3.3); and Randy Smith (releases 3.2,
+3.1, and 3.0).
+
+ Richard Stallman, assisted at various times by Peter TerMaat, Chris
+Hanson, and Richard Mlynarik, handled releases through 2.8.
+
+ Michael Tiemann is the author of most of the GNU C++ support in GDB,
+with significant additional contributions from Per Bothner and Daniel
+Berlin. James Clark wrote the GNU C++ demangler. Early work on C++
+was by Peter TerMaat (who also did much general update work leading to
+release 3.0).
+
+ GDB uses the BFD subroutine library to examine multiple object-file
+formats; BFD was a joint project of David V. Henkel-Wallace, Rich
+Pixley, Steve Chamberlain, and John Gilmore.
+
+ David Johnson wrote the original COFF support; Pace Willison did the
+original support for encapsulated COFF.
+
+ Brent Benson of Harris Computer Systems contributed DWARF 2 support.
+
+ Adam de Boor and Bradley Davis contributed the ISI Optimum V support.
+Per Bothner, Noboyuki Hikichi, and Alessandro Forin contributed MIPS
+support. Jean-Daniel Fekete contributed Sun 386i support. Chris
+Hanson improved the HP9000 support. Noboyuki Hikichi and Tomoyuki
+Hasei contributed Sony/News OS 3 support. David Johnson contributed
+Encore Umax support. Jyrki Kuoppala contributed Altos 3068 support.
+Jeff Law contributed HP PA and SOM support. Keith Packard contributed
+NS32K support. Doug Rabson contributed Acorn Risc Machine support.
+Bob Rusk contributed Harris Nighthawk CX-UX support. Chris Smith
+contributed Convex support (and Fortran debugging). Jonathan Stone
+contributed Pyramid support. Michael Tiemann contributed SPARC support.
+Tim Tucker contributed support for the Gould NP1 and Gould Powernode.
+Pace Willison contributed Intel 386 support. Jay Vosburgh contributed
+Symmetry support. Marko Mlinar contributed OpenRISC 1000 support.
+
+ Andreas Schwab contributed M68K GNU/Linux support.
+
+ Rich Schaefer and Peter Schauer helped with support of SunOS shared
+libraries.
+
+ Jay Fenlason and Roland McGrath ensured that GDB and GAS agree about
+several machine instruction sets.
+
+ Patrick Duval, Ted Goldstein, Vikram Koka and Glenn Engel helped
+develop remote debugging. Intel Corporation, Wind River Systems, AMD,
+and ARM contributed remote debugging modules for the i960, VxWorks,
+A29K UDI, and RDI targets, respectively.
+
+ Brian Fox is the author of the readline libraries providing
+command-line editing and command history.
+
+ Andrew Beers of SUNY Buffalo wrote the language-switching code, the
+Modula-2 support, and contributed the Languages chapter of this manual.
+
+ Fred Fish wrote most of the support for Unix System Vr4. He also
+enhanced the command-completion support to cover C++ overloaded symbols.
+
+ Hitachi America (now Renesas America), Ltd. sponsored the support for
+H8/300, H8/500, and Super-H processors.
+
+ NEC sponsored the support for the v850, Vr4xxx, and Vr5xxx
+processors.
+
+ Mitsubishi (now Renesas) sponsored the support for D10V, D30V, and
+M32R/D processors.
+
+ Toshiba sponsored the support for the TX39 Mips processor.
+
+ Matsushita sponsored the support for the MN10200 and MN10300
+processors.
+
+ Fujitsu sponsored the support for SPARClite and FR30 processors.
+
+ Kung Hsu, Jeff Law, and Rick Sladkey added support for hardware
+watchpoints.
+
+ Michael Snyder added support for tracepoints.
+
+ Stu Grossman wrote gdbserver.
+
+ Jim Kingdon, Peter Schauer, Ian Taylor, and Stu Grossman made nearly
+innumerable bug fixes and cleanups throughout GDB.
+
+ The following people at the Hewlett-Packard Company contributed
+support for the PA-RISC 2.0 architecture, HP-UX 10.20, 10.30, and 11.0
+(narrow mode), HP's implementation of kernel threads, HP's aC++
+compiler, and the Text User Interface (nee Terminal User Interface):
+Ben Krepp, Richard Title, John Bishop, Susan Macchia, Kathy Mann,
+Satish Pai, India Paul, Steve Rehrauer, and Elena Zannoni. Kim Haase
+provided HP-specific information in this manual.
+
+ DJ Delorie ported GDB to MS-DOS, for the DJGPP project. Robert
+Hoehne made significant contributions to the DJGPP port.
+
+ Cygnus Solutions has sponsored GDB maintenance and much of its
+development since 1991. Cygnus engineers who have worked on GDB
+fulltime include Mark Alexander, Jim Blandy, Per Bothner, Kevin
+Buettner, Edith Epstein, Chris Faylor, Fred Fish, Martin Hunt, Jim
+Ingham, John Gilmore, Stu Grossman, Kung Hsu, Jim Kingdon, John Metzler,
+Fernando Nasser, Geoffrey Noer, Dawn Perchik, Rich Pixley, Zdenek
+Radouch, Keith Seitz, Stan Shebs, David Taylor, and Elena Zannoni. In
+addition, Dave Brolley, Ian Carmichael, Steve Chamberlain, Nick Clifton,
+JT Conklin, Stan Cox, DJ Delorie, Ulrich Drepper, Frank Eigler, Doug
+Evans, Sean Fagan, David Henkel-Wallace, Richard Henderson, Jeff
+Holcomb, Jeff Law, Jim Lemke, Tom Lord, Bob Manson, Michael Meissner,
+Jason Merrill, Catherine Moore, Drew Moseley, Ken Raeburn, Gavin
+Romig-Koch, Rob Savoye, Jamie Smith, Mike Stump, Ian Taylor, Angela
+Thomas, Michael Tiemann, Tom Tromey, Ron Unrau, Jim Wilson, and David
+Zuhn have made contributions both large and small.
+
+ Andrew Cagney, Fernando Nasser, and Elena Zannoni, while working for
+Cygnus Solutions, implemented the original GDB/MI interface.
+
+ Jim Blandy added support for preprocessor macros, while working for
+Red Hat.
+
+ Andrew Cagney designed GDB's architecture vector. Many people
+including Andrew Cagney, Stephane Carrez, Randolph Chung, Nick Duffek,
+Richard Henderson, Mark Kettenis, Grace Sainsbury, Kei Sakamoto,
+Yoshinori Sato, Michael Snyder, Andreas Schwab, Jason Thorpe, Corinna
+Vinschen, Ulrich Weigand, and Elena Zannoni, helped with the migration
+of old architectures to this new framework.
+
+ Andrew Cagney completely re-designed and re-implemented GDB's
+unwinder framework, this consisting of a fresh new design featuring
+frame IDs, independent frame sniffers, and the sentinel frame. Mark
+Kettenis implemented the DWARF 2 unwinder, Jeff Johnston the libunwind
+unwinder, and Andrew Cagney the dummy, sentinel, tramp, and trad
+unwinders. The architecture-specific changes, each involving a
+complete rewrite of the architecture's frame code, were carried out by
+Jim Blandy, Joel Brobecker, Kevin Buettner, Andrew Cagney, Stephane
+Carrez, Randolph Chung, Orjan Friberg, Richard Henderson, Daniel
+Jacobowitz, Jeff Johnston, Mark Kettenis, Theodore A. Roth, Kei
+Sakamoto, Yoshinori Sato, Michael Snyder, Corinna Vinschen, and Ulrich
+Weigand.
+
+ Christian Zankel, Ross Morley, Bob Wilson, and Maxim Grigoriev from
+Tensilica, Inc. contributed support for Xtensa processors. Others who
+have worked on the Xtensa port of GDB in the past include Steve Tjiang,
+John Newlin, and Scott Foehner.
+
+ Michael Eager and staff of Xilinx, Inc., contributed support for the
+Xilinx MicroBlaze architecture.
+
+
+File: gdb.info, Node: Sample Session, Next: Invocation, Prev: Summary, Up: Top
+
+1 A Sample GDB Session
+**********************
+
+You can use this manual at your leisure to read all about GDB.
+However, a handful of commands are enough to get started using the
+debugger. This chapter illustrates those commands.
+
+ One of the preliminary versions of GNU `m4' (a generic macro
+processor) exhibits the following bug: sometimes, when we change its
+quote strings from the default, the commands used to capture one macro
+definition within another stop working. In the following short `m4'
+session, we define a macro `foo' which expands to `0000'; we then use
+the `m4' built-in `defn' to define `bar' as the same thing. However,
+when we change the open quote string to `<QUOTE>' and the close quote
+string to `<UNQUOTE>', the same procedure fails to define a new synonym
+`baz':
+
+ $ cd gnu/m4
+ $ ./m4
+ define(foo,0000)
+
+ foo
+ 0000
+ define(bar,defn(`foo'))
+
+ bar
+ 0000
+ changequote(<QUOTE>,<UNQUOTE>)
+
+ define(baz,defn(<QUOTE>foo<UNQUOTE>))
+ baz
+ Ctrl-d
+ m4: End of input: 0: fatal error: EOF in string
+
+Let us use GDB to try to see what is going on.
+
+ $ gdb m4
+ GDB is free software and you are welcome to 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.
+
+ GDB 7.3.1-gg2, Copyright 1999 Free Software Foundation, Inc...
+ (gdb)
+
+GDB reads only enough symbol data to know where to find the rest when
+needed; as a result, the first prompt comes up very quickly. We now
+tell GDB to use a narrower display width than usual, so that examples
+fit in this manual.
+
+ (gdb) set width 70
+
+We need to see how the `m4' built-in `changequote' works. Having
+looked at the source, we know the relevant subroutine is
+`m4_changequote', so we set a breakpoint there with the GDB `break'
+command.
+
+ (gdb) break m4_changequote
+ Breakpoint 1 at 0x62f4: file builtin.c, line 879.
+
+Using the `run' command, we start `m4' running under GDB control; as
+long as control does not reach the `m4_changequote' subroutine, the
+program runs as usual:
+
+ (gdb) run
+ Starting program: /work/Editorial/gdb/gnu/m4/m4
+ define(foo,0000)
+
+ foo
+ 0000
+
+To trigger the breakpoint, we call `changequote'. GDB suspends
+execution of `m4', displaying information about the context where it
+stops.
+
+ changequote(<QUOTE>,<UNQUOTE>)
+
+ Breakpoint 1, m4_changequote (argc=3, argv=0x33c70)
+ at builtin.c:879
+ 879 if (bad_argc(TOKEN_DATA_TEXT(argv[0]),argc,1,3))
+
+Now we use the command `n' (`next') to advance execution to the next
+line of the current function.
+
+ (gdb) n
+ 882 set_quotes((argc >= 2) ? TOKEN_DATA_TEXT(argv[1])\
+ : nil,
+
+`set_quotes' looks like a promising subroutine. We can go into it by
+using the command `s' (`step') instead of `next'. `step' goes to the
+next line to be executed in _any_ subroutine, so it steps into
+`set_quotes'.
+
+ (gdb) s
+ set_quotes (lq=0x34c78 "<QUOTE>", rq=0x34c88 "<UNQUOTE>")
+ at input.c:530
+ 530 if (lquote != def_lquote)
+
+The display that shows the subroutine where `m4' is now suspended (and
+its arguments) is called a stack frame display. It shows a summary of
+the stack. We can use the `backtrace' command (which can also be
+spelled `bt'), to see where we are in the stack as a whole: the
+`backtrace' command displays a stack frame for each active subroutine.
+
+ (gdb) bt
+ #0 set_quotes (lq=0x34c78 "<QUOTE>", rq=0x34c88 "<UNQUOTE>")
+ at input.c:530
+ #1 0x6344 in m4_changequote (argc=3, argv=0x33c70)
+ at builtin.c:882
+ #2 0x8174 in expand_macro (sym=0x33320) at macro.c:242
+ #3 0x7a88 in expand_token (obs=0x0, t=209696, td=0xf7fffa30)
+ at macro.c:71
+ #4 0x79dc in expand_input () at macro.c:40
+ #5 0x2930 in main (argc=0, argv=0xf7fffb20) at m4.c:195
+
+We step through a few more lines to see what happens. The first two
+times, we can use `s'; the next two times we use `n' to avoid falling
+into the `xstrdup' subroutine.
+
+ (gdb) s
+ 0x3b5c 532 if (rquote != def_rquote)
+ (gdb) s
+ 0x3b80 535 lquote = (lq == nil || *lq == '\0') ? \
+ def_lquote : xstrdup(lq);
+ (gdb) n
+ 536 rquote = (rq == nil || *rq == '\0') ? def_rquote\
+ : xstrdup(rq);
+ (gdb) n
+ 538 len_lquote = strlen(rquote);
+
+The last line displayed looks a little odd; we can examine the variables
+`lquote' and `rquote' to see if they are in fact the new left and right
+quotes we specified. We use the command `p' (`print') to see their
+values.
+
+ (gdb) p lquote
+ $1 = 0x35d40 "<QUOTE>"
+ (gdb) p rquote
+ $2 = 0x35d50 "<UNQUOTE>"
+
+`lquote' and `rquote' are indeed the new left and right quotes. To
+look at some context, we can display ten lines of source surrounding
+the current line with the `l' (`list') command.
+
+ (gdb) l
+ 533 xfree(rquote);
+ 534
+ 535 lquote = (lq == nil || *lq == '\0') ? def_lquote\
+ : xstrdup (lq);
+ 536 rquote = (rq == nil || *rq == '\0') ? def_rquote\
+ : xstrdup (rq);
+ 537
+ 538 len_lquote = strlen(rquote);
+ 539 len_rquote = strlen(lquote);
+ 540 }
+ 541
+ 542 void
+
+Let us step past the two lines that set `len_lquote' and `len_rquote',
+and then examine the values of those variables.
+
+ (gdb) n
+ 539 len_rquote = strlen(lquote);
+ (gdb) n
+ 540 }
+ (gdb) p len_lquote
+ $3 = 9
+ (gdb) p len_rquote
+ $4 = 7
+
+That certainly looks wrong, assuming `len_lquote' and `len_rquote' are
+meant to be the lengths of `lquote' and `rquote' respectively. We can
+set them to better values using the `p' command, since it can print the
+value of any expression--and that expression can include subroutine
+calls and assignments.
+
+ (gdb) p len_lquote=strlen(lquote)
+ $5 = 7
+ (gdb) p len_rquote=strlen(rquote)
+ $6 = 9
+
+Is that enough to fix the problem of using the new quotes with the `m4'
+built-in `defn'? We can allow `m4' to continue executing with the `c'
+(`continue') command, and then try the example that caused trouble
+initially:
+
+ (gdb) c
+ Continuing.
+
+ define(baz,defn(<QUOTE>foo<UNQUOTE>))
+
+ baz
+ 0000
+
+Success! The new quotes now work just as well as the default ones. The
+problem seems to have been just the two typos defining the wrong
+lengths. We allow `m4' exit by giving it an EOF as input:
+
+ Ctrl-d
+ Program exited normally.
+
+The message `Program exited normally.' is from GDB; it indicates `m4'
+has finished executing. We can end our GDB session with the GDB `quit'
+command.
+
+ (gdb) quit
+
+
+File: gdb.info, Node: Invocation, Next: Commands, Prev: Sample Session, Up: Top
+
+2 Getting In and Out of GDB
+***************************
+
+This chapter discusses how to start GDB, and how to get out of it. The
+essentials are:
+ * type `gdb' to start GDB.
+
+ * type `quit' or `Ctrl-d' to exit.
+
+* Menu:
+
+* Invoking GDB:: How to start GDB
+* Quitting GDB:: How to quit GDB
+* Shell Commands:: How to use shell commands inside GDB
+* Logging Output:: How to log GDB's output to a file
+
+
+File: gdb.info, Node: Invoking GDB, Next: Quitting GDB, Up: Invocation
+
+2.1 Invoking GDB
+================
+
+Invoke GDB by running the program `gdb'. Once started, GDB reads
+commands from the terminal until you tell it to exit.
+
+ You can also run `gdb' with a variety of arguments and options, to
+specify more of your debugging environment at the outset.
+
+ The command-line options described here are designed to cover a
+variety of situations; in some environments, some of these options may
+effectively be unavailable.
+
+ The most usual way to start GDB is with one argument, specifying an
+executable program:
+
+ gdb PROGRAM
+
+You can also start with both an executable program and a core file
+specified:
+
+ gdb PROGRAM CORE
+
+ You can, instead, specify a process ID as a second argument, if you
+want to debug a running process:
+
+ gdb PROGRAM 1234
+
+would attach GDB to process `1234' (unless you also have a file named
+`1234'; GDB does check for a core file first).
+
+ Taking advantage of the second command-line argument requires a
+fairly complete operating system; when you use GDB as a remote debugger
+attached to a bare board, there may not be any notion of "process", and
+there is often no way to get a core dump. GDB will warn you if it is
+unable to attach or to read core dumps.
+
+ You can optionally have `gdb' pass any arguments after the
+executable file to the inferior using `--args'. This option stops
+option processing.
+ gdb --args gcc -O2 -c foo.c
+ This will cause `gdb' to debug `gcc', and to set `gcc''s
+command-line arguments (*note Arguments::) to `-O2 -c foo.c'.
+
+ You can run `gdb' without printing the front material, which
+describes GDB's non-warranty, by specifying `-silent':
+
+ gdb -silent
+
+You can further control how GDB starts up by using command-line
+options. GDB itself can remind you of the options available.
+
+Type
+
+ gdb -help
+
+to display all available options and briefly describe their use (`gdb
+-h' is a shorter equivalent).
+
+ All options and command line arguments you give are processed in
+sequential order. The order makes a difference when the `-x' option is
+used.
+
+* Menu:
+
+* File Options:: Choosing files
+* Mode Options:: Choosing modes
+* Startup:: What GDB does during startup
+
+
+File: gdb.info, Node: File Options, Next: Mode Options, Up: Invoking GDB
+
+2.1.1 Choosing Files
+--------------------
+
+When GDB starts, it reads any arguments other than options as
+specifying an executable file and core file (or process ID). This is
+the same as if the arguments were specified by the `-se' and `-c' (or
+`-p') options respectively. (GDB reads the first argument that does
+not have an associated option flag as equivalent to the `-se' option
+followed by that argument; and the second argument that does not have
+an associated option flag, if any, as equivalent to the `-c'/`-p'
+option followed by that argument.) If the second argument begins with
+a decimal digit, GDB will first attempt to attach to it as a process,
+and if that fails, attempt to open it as a corefile. If you have a
+corefile whose name begins with a digit, you can prevent GDB from
+treating it as a pid by prefixing it with `./', e.g. `./12345'.
+
+ If GDB has not been configured to included core file support, such
+as for most embedded targets, then it will complain about a second
+argument and ignore it.
+
+ Many options have both long and short forms; both are shown in the
+following list. GDB also recognizes the long forms if you truncate
+them, so long as enough of the option is present to be unambiguous.
+(If you prefer, you can flag option arguments with `--' rather than
+`-', though we illustrate the more usual convention.)
+
+`-symbols FILE'
+`-s FILE'
+ Read symbol table from file FILE.
+
+`-exec FILE'
+`-e FILE'
+ Use file FILE as the executable file to execute when appropriate,
+ and for examining pure data in conjunction with a core dump.
+
+`-se FILE'
+ Read symbol table from file FILE and use it as the executable file.
+
+`-core FILE'
+`-c FILE'
+ Use file FILE as a core dump to examine.
+
+`-pid NUMBER'
+`-p NUMBER'
+ Connect to process ID NUMBER, as with the `attach' command.
+
+`-command FILE'
+`-x FILE'
+ Execute commands from file FILE. The contents of this file is
+ evaluated exactly as the `source' command would. *Note Command
+ files: Command Files.
+
+`-eval-command COMMAND'
+`-ex COMMAND'
+ Execute a single GDB command.
+
+ This option may be used multiple times to call multiple commands.
+ It may also be interleaved with `-command' as required.
+
+ gdb -ex 'target sim' -ex 'load' \
+ -x setbreakpoints -ex 'run' a.out
+
+`-directory DIRECTORY'
+`-d DIRECTORY'
+ Add DIRECTORY to the path to search for source and script files.
+
+`-r'
+`-readnow'
+ Read each symbol file's entire symbol table immediately, rather
+ than the default, which is to read it incrementally as it is
+ needed. This makes startup slower, but makes future operations
+ faster.
+
+
+
+File: gdb.info, Node: Mode Options, Next: Startup, Prev: File Options, Up: Invoking GDB
+
+2.1.2 Choosing Modes
+--------------------
+
+You can run GDB in various alternative modes--for example, in batch
+mode or quiet mode.
+
+`-nx'
+`-n'
+ Do not execute commands found in any initialization files.
+ Normally, GDB executes the commands in these files after all the
+ command options and arguments have been processed. *Note Command
+ Files: Command Files.
+
+`-quiet'
+`-silent'
+`-q'
+ "Quiet". Do not print the introductory and copyright messages.
+ These messages are also suppressed in batch mode.
+
+`-batch'
+ Run in batch mode. Exit with status `0' after processing all the
+ command files specified with `-x' (and all commands from
+ initialization files, if not inhibited with `-n'). Exit with
+ nonzero status if an error occurs in executing the GDB commands in
+ the command files. Batch mode also disables pagination, sets
+ unlimited terminal width and height *note Screen Size::, and acts
+ as if `set confirm off' were in effect (*note Messages/Warnings::).
+
+ Batch mode may be useful for running GDB as a filter, for example
+ to download and run a program on another computer; in order to
+ make this more useful, the message
+
+ Program exited normally.
+
+ (which is ordinarily issued whenever a program running under GDB
+ control terminates) is not issued when running in batch mode.
+
+`-batch-silent'
+ Run in batch mode exactly like `-batch', but totally silently. All
+ GDB output to `stdout' is prevented (`stderr' is unaffected).
+ This is much quieter than `-silent' and would be useless for an
+ interactive session.
+
+ This is particularly useful when using targets that give `Loading
+ section' messages, for example.
+
+ Note that targets that give their output via GDB, as opposed to
+ writing directly to `stdout', will also be made silent.
+
+`-return-child-result'
+ The return code from GDB will be the return code from the child
+ process (the process being debugged), with the following
+ exceptions:
+
+ * GDB exits abnormally. E.g., due to an incorrect argument or
+ an internal error. In this case the exit code is the same as
+ it would have been without `-return-child-result'.
+
+ * The user quits with an explicit value. E.g., `quit 1'.
+
+ * The child process never runs, or is not allowed to terminate,
+ in which case the exit code will be -1.
+
+ This option is useful in conjunction with `-batch' or
+ `-batch-silent', when GDB is being used as a remote program loader
+ or simulator interface.
+
+`-nowindows'
+`-nw'
+ "No windows". If GDB comes with a graphical user interface (GUI)
+ built in, then this option tells GDB to only use the command-line
+ interface. If no GUI is available, this option has no effect.
+
+`-windows'
+`-w'
+ If GDB includes a GUI, then this option requires it to be used if
+ possible.
+
+`-cd DIRECTORY'
+ Run GDB using DIRECTORY as its working directory, instead of the
+ current directory.
+
+`-data-directory DIRECTORY'
+ Run GDB using DIRECTORY as its data directory. The data directory
+ is where GDB searches for its auxiliary files. *Note Data Files::.
+
+`-fullname'
+`-f'
+ GNU Emacs sets this option when it runs GDB as a subprocess. It
+ tells GDB to output the full file name and line number in a
+ standard, recognizable fashion each time a stack frame is
+ displayed (which includes each time your program stops). This
+ recognizable format looks like two `\032' characters, followed by
+ the file name, line number and character position separated by
+ colons, and a newline. The Emacs-to-GDB interface program uses
+ the two `\032' characters as a signal to display the source code
+ for the frame.
+
+`-epoch'
+ The Epoch Emacs-GDB interface sets this option when it runs GDB as
+ a subprocess. It tells GDB to modify its print routines so as to
+ allow Epoch to display values of expressions in a separate window.
+
+`-annotate LEVEL'
+ This option sets the "annotation level" inside GDB. Its effect is
+ identical to using `set annotate LEVEL' (*note Annotations::).
+ The annotation LEVEL controls how much information GDB prints
+ together with its prompt, values of expressions, source lines, and
+ other types of output. Level 0 is the normal, level 1 is for use
+ when GDB is run as a subprocess of GNU Emacs, level 3 is the
+ maximum annotation suitable for programs that control GDB, and
+ level 2 has been deprecated.
+
+ The annotation mechanism has largely been superseded by GDB/MI
+ (*note GDB/MI::).
+
+`--args'
+ Change interpretation of command line so that arguments following
+ the executable file are passed as command line arguments to the
+ inferior. This option stops option processing.
+
+`-baud BPS'
+`-b BPS'
+ Set the line speed (baud rate or bits per second) of any serial
+ interface used by GDB for remote debugging.
+
+`-l TIMEOUT'
+ Set the timeout (in seconds) of any communication used by GDB for
+ remote debugging.
+
+`-tty DEVICE'
+`-t DEVICE'
+ Run using DEVICE for your program's standard input and output.
+
+`-tui'
+ Activate the "Text User Interface" when starting. The Text User
+ Interface manages several text windows on the terminal, showing
+ source, assembly, registers and GDB command outputs (*note GDB
+ Text User Interface: TUI.). Alternatively, the Text User
+ Interface can be enabled by invoking the program `gdbtui'. Do not
+ use this option if you run GDB from Emacs (*note Using GDB under
+ GNU Emacs: Emacs.).
+
+`-interpreter INTERP'
+ Use the interpreter INTERP for interface with the controlling
+ program or device. This option is meant to be set by programs
+ which communicate with GDB using it as a back end. *Note Command
+ Interpreters: Interpreters.
+
+ `--interpreter=mi' (or `--interpreter=mi2') causes GDB to use the
+ "GDB/MI interface" (*note The GDB/MI Interface: GDB/MI.) included
+ since GDB version 6.0. The previous GDB/MI interface, included in
+ GDB version 5.3 and selected with `--interpreter=mi1', is
+ deprecated. Earlier GDB/MI interfaces are no longer supported.
+
+`-write'
+ Open the executable and core files for both reading and writing.
+ This is equivalent to the `set write on' command inside GDB (*note
+ Patching::).
+
+`-statistics'
+ This option causes GDB to print statistics about time and memory
+ usage after it completes each command and returns to the prompt.
+
+`-version'
+ This option causes GDB to print its version number and no-warranty
+ blurb, and exit.
+
+`-disable-gdb-index'
+ This option causes GDB to avoid using the `.gdb_index' ELF
+ section, even if present in the executable or a shared library.
+ This section improves the speed of loading of debug information.
+ This option is present as an escape hatch in case there is a
+ problem with the contents of this section.
+
+
+
+File: gdb.info, Node: Startup, Prev: Mode Options, Up: Invoking GDB
+
+2.1.3 What GDB Does During Startup
+----------------------------------
+
+Here's the description of what GDB does during session startup:
+
+ 1. Sets up the command interpreter as specified by the command line
+ (*note interpreter: Mode Options.).
+
+ 2. Reads the system-wide "init file" (if `--with-system-gdbinit' was
+ used when building GDB; *note System-wide configuration and
+ settings: System-wide configuration.) and executes all the
+ commands in that file.
+
+ 3. Reads the init file (if any) in your home directory(1) and
+ executes all the commands in that file.
+
+ 4. Processes command line options and operands.
+
+ 5. Reads and executes the commands from init file (if any) in the
+ current working directory. This is only done if the current
+ directory is different from your home directory. Thus, you can
+ have more than one init file, one generic in your home directory,
+ and another, specific to the program you are debugging, in the
+ directory where you invoke GDB.
+
+ 6. If the command line specified a program to debug, or a process to
+ attach to, or a core file, GDB loads any auto-loaded scripts
+ provided for the program or for its loaded shared libraries.
+ *Note Auto-loading::.
+
+ If you wish to disable the auto-loading during startup, you must
+ do something like the following:
+
+ $ gdb -ex "set auto-load-scripts off" -ex "file myprogram"
+
+ The following does not work because the auto-loading is turned off
+ too late:
+
+ $ gdb -ex "set auto-load-scripts off" myprogram
+
+ 7. Reads command files specified by the `-x' option. *Note Command
+ Files::, for more details about GDB command files.
+
+ 8. Reads the command history recorded in the "history file". *Note
+ Command History::, for more details about the command history and
+ the files where GDB records it.
+
+ Init files use the same syntax as "command files" (*note Command
+Files::) and are processed by GDB in the same way. The init file in
+your home directory can set options (such as `set complaints') that
+affect subsequent processing of command line options and operands.
+Init files are not executed if you use the `-nx' option (*note Choosing
+Modes: Mode Options.).
+
+ To display the list of init files loaded by gdb at startup, you can
+use `gdb --help'.
+
+ The GDB init files are normally called `.gdbinit'. The DJGPP port
+of GDB uses the name `gdb.ini', due to the limitations of file names
+imposed by DOS filesystems. The Windows ports of GDB use the standard
+name, but if they find a `gdb.ini' file, they warn you about that and
+suggest to rename the file to the standard name.
+
+ ---------- Footnotes ----------
+
+ (1) On DOS/Windows systems, the home directory is the one pointed to
+by the `HOME' environment variable.
+
+
+File: gdb.info, Node: Quitting GDB, Next: Shell Commands, Prev: Invoking GDB, Up: Invocation
+
+2.2 Quitting GDB
+================
+
+`quit [EXPRESSION]'
+`q'
+ To exit GDB, use the `quit' command (abbreviated `q'), or type an
+ end-of-file character (usually `Ctrl-d'). If you do not supply
+ EXPRESSION, GDB will terminate normally; otherwise it will
+ terminate using the result of EXPRESSION as the error code.
+
+ An interrupt (often `Ctrl-c') does not exit from GDB, but rather
+terminates the action of any GDB command that is in progress and
+returns to GDB command level. It is safe to type the interrupt
+character at any time because GDB does not allow it to take effect
+until a time when it is safe.
+
+ If you have been using GDB to control an attached process or device,
+you can release it with the `detach' command (*note Debugging an
+Already-running Process: Attach.).
+
+
+File: gdb.info, Node: Shell Commands, Next: Logging Output, Prev: Quitting GDB, Up: Invocation
+
+2.3 Shell Commands
+==================
+
+If you need to execute occasional shell commands during your debugging
+session, there is no need to leave or suspend GDB; you can just use the
+`shell' command.
+
+`shell COMMAND STRING'
+ Invoke a standard shell to execute COMMAND STRING. If it exists,
+ the environment variable `SHELL' determines which shell to run.
+ Otherwise GDB uses the default shell (`/bin/sh' on Unix systems,
+ `COMMAND.COM' on MS-DOS, etc.).
+
+ The utility `make' is often needed in development environments. You
+do not have to use the `shell' command for this purpose in GDB:
+
+`make MAKE-ARGS'
+ Execute the `make' program with the specified arguments. This is
+ equivalent to `shell make MAKE-ARGS'.
+
+
+File: gdb.info, Node: Logging Output, Prev: Shell Commands, Up: Invocation
+
+2.4 Logging Output
+==================
+
+You may want to save the output of GDB commands to a file. There are
+several commands to control GDB's logging.
+
+`set logging on'
+ Enable logging.
+
+`set logging off'
+ Disable logging.
+
+`set logging file FILE'
+ Change the name of the current logfile. The default logfile is
+ `gdb.txt'.
+
+`set logging overwrite [on|off]'
+ By default, GDB will append to the logfile. Set `overwrite' if
+ you want `set logging on' to overwrite the logfile instead.
+
+`set logging redirect [on|off]'
+ By default, GDB output will go to both the terminal and the
+ logfile. Set `redirect' if you want output to go only to the log
+ file.
+
+`show logging'
+ Show the current values of the logging settings.
+
+
+File: gdb.info, Node: Commands, Next: Running, Prev: Invocation, Up: Top
+
+3 GDB Commands
+**************
+
+You can abbreviate a GDB command to the first few letters of the command
+name, if that abbreviation is unambiguous; and you can repeat certain
+GDB commands by typing just <RET>. You can also use the <TAB> key to
+get GDB to fill out the rest of a word in a command (or to show you the
+alternatives available, if there is more than one possibility).
+
+* Menu:
+
+* Command Syntax:: How to give commands to GDB
+* Completion:: Command completion
+* Help:: How to ask GDB for help
+
+
+File: gdb.info, Node: Command Syntax, Next: Completion, Up: Commands
+
+3.1 Command Syntax
+==================
+
+A GDB command is a single line of input. There is no limit on how long
+it can be. It starts with a command name, which is followed by
+arguments whose meaning depends on the command name. For example, the
+command `step' accepts an argument which is the number of times to
+step, as in `step 5'. You can also use the `step' command with no
+arguments. Some commands do not allow any arguments.
+
+ GDB command names may always be truncated if that abbreviation is
+unambiguous. Other possible command abbreviations are listed in the
+documentation for individual commands. In some cases, even ambiguous
+abbreviations are allowed; for example, `s' is specially defined as
+equivalent to `step' even though there are other commands whose names
+start with `s'. You can test abbreviations by using them as arguments
+to the `help' command.
+
+ A blank line as input to GDB (typing just <RET>) means to repeat the
+previous command. Certain commands (for example, `run') will not
+repeat this way; these are commands whose unintentional repetition
+might cause trouble and which you are unlikely to want to repeat.
+User-defined commands can disable this feature; see *note dont-repeat:
+Define.
+
+ The `list' and `x' commands, when you repeat them with <RET>,
+construct new arguments rather than repeating exactly as typed. This
+permits easy scanning of source or memory.
+
+ GDB can also use <RET> in another way: to partition lengthy output,
+in a way similar to the common utility `more' (*note Screen Size:
+Screen Size.). Since it is easy to press one <RET> too many in this
+situation, GDB disables command repetition after any command that
+generates this sort of display.
+
+ Any text from a `#' to the end of the line is a comment; it does
+nothing. This is useful mainly in command files (*note Command Files:
+Command Files.).
+
+ The `Ctrl-o' binding is useful for repeating a complex sequence of
+commands. This command accepts the current line, like <RET>, and then
+fetches the next line relative to the current line from the history for
+editing.
+
+
+File: gdb.info, Node: Completion, Next: Help, Prev: Command Syntax, Up: Commands
+
+3.2 Command Completion
+======================
+
+GDB can fill in the rest of a word in a command for you, if there is
+only one possibility; it can also show you what the valid possibilities
+are for the next word in a command, at any time. This works for GDB
+commands, GDB subcommands, and the names of symbols in your program.
+
+ Press the <TAB> key whenever you want GDB to fill out the rest of a
+word. If there is only one possibility, GDB fills in the word, and
+waits for you to finish the command (or press <RET> to enter it). For
+example, if you type
+
+ (gdb) info bre <TAB>
+
+GDB fills in the rest of the word `breakpoints', since that is the only
+`info' subcommand beginning with `bre':
+
+ (gdb) info breakpoints
+
+You can either press <RET> at this point, to run the `info breakpoints'
+command, or backspace and enter something else, if `breakpoints' does
+not look like the command you expected. (If you were sure you wanted
+`info breakpoints' in the first place, you might as well just type
+<RET> immediately after `info bre', to exploit command abbreviations
+rather than command completion).
+
+ If there is more than one possibility for the next word when you
+press <TAB>, GDB sounds a bell. You can either supply more characters
+and try again, or just press <TAB> a second time; GDB displays all the
+possible completions for that word. For example, you might want to set
+a breakpoint on a subroutine whose name begins with `make_', but when
+you type `b make_<TAB>' GDB just sounds the bell. Typing <TAB> again
+displays all the function names in your program that begin with those
+characters, for example:
+
+ (gdb) b make_ <TAB>
+GDB sounds bell; press <TAB> again, to see:
+ make_a_section_from_file make_environ
+ make_abs_section make_function_type
+ make_blockvector make_pointer_type
+ make_cleanup make_reference_type
+ make_command make_symbol_completion_list
+ (gdb) b make_
+
+After displaying the available possibilities, GDB copies your partial
+input (`b make_' in the example) so you can finish the command.
+
+ If you just want to see the list of alternatives in the first place,
+you can press `M-?' rather than pressing <TAB> twice. `M-?' means
+`<META> ?'. You can type this either by holding down a key designated
+as the <META> shift on your keyboard (if there is one) while typing
+`?', or as <ESC> followed by `?'.
+
+ Sometimes the string you need, while logically a "word", may contain
+parentheses or other characters that GDB normally excludes from its
+notion of a word. To permit word completion to work in this situation,
+you may enclose words in `'' (single quote marks) in GDB commands.
+
+ The most likely situation where you might need this is in typing the
+name of a C++ function. This is because C++ allows function
+overloading (multiple definitions of the same function, distinguished
+by argument type). For example, when you want to set a breakpoint you
+may need to distinguish whether you mean the version of `name' that
+takes an `int' parameter, `name(int)', or the version that takes a
+`float' parameter, `name(float)'. To use the word-completion
+facilities in this situation, type a single quote `'' at the beginning
+of the function name. This alerts GDB that it may need to consider
+more information than usual when you press <TAB> or `M-?' to request
+word completion:
+
+ (gdb) b 'bubble( M-?
+ bubble(double,double) bubble(int,int)
+ (gdb) b 'bubble(
+
+ In some cases, GDB can tell that completing a name requires using
+quotes. When this happens, GDB inserts the quote for you (while
+completing as much as it can) if you do not type the quote in the first
+place:
+
+ (gdb) b bub <TAB>
+GDB alters your input line to the following, and rings a bell:
+ (gdb) b 'bubble(
+
+In general, GDB can tell that a quote is needed (and inserts it) if you
+have not yet started typing the argument list when you ask for
+completion on an overloaded symbol.
+
+ For more information about overloaded functions, see *note C++
+Expressions: C Plus Plus Expressions. You can use the command `set
+overload-resolution off' to disable overload resolution; see *note GDB
+Features for C++: Debugging C Plus Plus.
+
+ When completing in an expression which looks up a field in a
+structure, GDB also tries(1) to limit completions to the field names
+available in the type of the left-hand-side:
+
+ (gdb) p gdb_stdout.M-?
+ magic to_delete to_fputs to_put to_rewind
+ to_data to_flush to_isatty to_read to_write
+
+This is because the `gdb_stdout' is a variable of the type `struct
+ui_file' that is defined in GDB sources as follows:
+
+ struct ui_file
+ {
+ int *magic;
+ ui_file_flush_ftype *to_flush;
+ ui_file_write_ftype *to_write;
+ ui_file_fputs_ftype *to_fputs;
+ ui_file_read_ftype *to_read;
+ ui_file_delete_ftype *to_delete;
+ ui_file_isatty_ftype *to_isatty;
+ ui_file_rewind_ftype *to_rewind;
+ ui_file_put_ftype *to_put;
+ void *to_data;
+ }
+
+ ---------- Footnotes ----------
+
+ (1) The completer can be confused by certain kinds of invalid
+expressions. Also, it only examines the static type of the expression,
+not the dynamic type.
+
+
+File: gdb.info, Node: Help, Prev: Completion, Up: Commands
+
+3.3 Getting Help
+================
+
+You can always ask GDB itself for information on its commands, using
+the command `help'.
+
+`help'
+`h'
+ You can use `help' (abbreviated `h') with no arguments to display
+ a short list of named classes of commands:
+
+ (gdb) help
+ List of classes of commands:
+
+ aliases -- Aliases of other commands
+ breakpoints -- Making program stop at certain points
+ data -- Examining data
+ files -- Specifying and examining files
+ internals -- Maintenance commands
+ obscure -- Obscure features
+ running -- Running the program
+ stack -- Examining the stack
+ status -- Status inquiries
+ support -- Support facilities
+ tracepoints -- Tracing of program execution without
+ stopping the program
+ user-defined -- User-defined commands
+
+ Type "help" followed by a class name for a list of
+ commands in that class.
+ Type "help" followed by command name for full
+ documentation.
+ Command name abbreviations are allowed if unambiguous.
+ (gdb)
+
+`help CLASS'
+ Using one of the general help classes as an argument, you can get a
+ list of the individual commands in that class. For example, here
+ is the help display for the class `status':
+
+ (gdb) help status
+ Status inquiries.
+
+ List of commands:
+
+ info -- Generic command for showing things
+ about the program being debugged
+ show -- Generic command for showing things
+ about the debugger
+
+ Type "help" followed by command name for full
+ documentation.
+ Command name abbreviations are allowed if unambiguous.
+ (gdb)
+
+`help COMMAND'
+ With a command name as `help' argument, GDB displays a short
+ paragraph on how to use that command.
+
+`apropos ARGS'
+ The `apropos' command searches through all of the GDB commands,
+ and their documentation, for the regular expression specified in
+ ARGS. It prints out all matches found. For example:
+
+ apropos reload
+
+ results in:
+
+ set symbol-reloading -- Set dynamic symbol table reloading
+ multiple times in one run
+ show symbol-reloading -- Show dynamic symbol table reloading
+ multiple times in one run
+
+`complete ARGS'
+ The `complete ARGS' command lists all the possible completions for
+ the beginning of a command. Use ARGS to specify the beginning of
+ the command you want completed. For example:
+
+ complete i
+
+ results in:
+
+ if
+ ignore
+ info
+ inspect
+
+ This is intended for use by GNU Emacs.
+
+ In addition to `help', you can use the GDB commands `info' and
+`show' to inquire about the state of your program, or the state of GDB
+itself. Each command supports many topics of inquiry; this manual
+introduces each of them in the appropriate context. The listings under
+`info' and under `show' in the Index point to all the sub-commands.
+*Note Index::.
+
+`info'
+ This command (abbreviated `i') is for describing the state of your
+ program. For example, you can show the arguments passed to a
+ function with `info args', list the registers currently in use
+ with `info registers', or list the breakpoints you have set with
+ `info breakpoints'. You can get a complete list of the `info'
+ sub-commands with `help info'.
+
+`set'
+ You can assign the result of an expression to an environment
+ variable with `set'. For example, you can set the GDB prompt to a
+ $-sign with `set prompt $'.
+
+`show'
+ In contrast to `info', `show' is for describing the state of GDB
+ itself. You can change most of the things you can `show', by
+ using the related command `set'; for example, you can control what
+ number system is used for displays with `set radix', or simply
+ inquire which is currently in use with `show radix'.
+
+ To display all the settable parameters and their current values,
+ you can use `show' with no arguments; you may also use `info set'.
+ Both commands produce the same display.
+
+ Here are three miscellaneous `show' subcommands, all of which are
+exceptional in lacking corresponding `set' commands:
+
+`show version'
+ Show what version of GDB is running. You should include this
+ information in GDB bug-reports. If multiple versions of GDB are
+ in use at your site, you may need to determine which version of
+ GDB you are running; as GDB evolves, new commands are introduced,
+ and old ones may wither away. Also, many system vendors ship
+ variant versions of GDB, and there are variant versions of GDB in
+ GNU/Linux distributions as well. The version number is the same
+ as the one announced when you start GDB.
+
+`show copying'
+`info copying'
+ Display information about permission for copying GDB.
+
+`show warranty'
+`info warranty'
+ Display the GNU "NO WARRANTY" statement, or a warranty, if your
+ version of GDB comes with one.
+
+
+
+File: gdb.info, Node: Running, Next: Stopping, Prev: Commands, Up: Top
+
+4 Running Programs Under GDB
+****************************
+
+When you run a program under GDB, you must first generate debugging
+information when you compile it.
+
+ You may start GDB with its arguments, if any, in an environment of
+your choice. If you are doing native debugging, you may redirect your
+program's input and output, debug an already running process, or kill a
+child process.
+
+* Menu:
+
+* Compilation:: Compiling for debugging
+* Starting:: Starting your program
+* Arguments:: Your program's arguments
+* Environment:: Your program's environment
+
+* Working Directory:: Your program's working directory
+* Input/Output:: Your program's input and output
+* Attach:: Debugging an already-running process
+* Kill Process:: Killing the child process
+
+* Inferiors and Programs:: Debugging multiple inferiors and programs
+* Threads:: Debugging programs with multiple threads
+* Forks:: Debugging forks
+* Checkpoint/Restart:: Setting a _bookmark_ to return to later
+
+
+File: gdb.info, Node: Compilation, Next: Starting, Up: Running
+
+4.1 Compiling for Debugging
+===========================
+
+In order to debug a program effectively, you need to generate debugging
+information when you compile it. This debugging information is stored
+in the object file; it describes the data type of each variable or
+function and the correspondence between source line numbers and
+addresses in the executable code.
+
+ To request debugging information, specify the `-g' option when you
+run the compiler.
+
+ Programs that are to be shipped to your customers are compiled with
+optimizations, using the `-O' compiler option. However, some compilers
+are unable to handle the `-g' and `-O' options together. Using those
+compilers, you cannot generate optimized executables containing
+debugging information.
+
+ GCC, the GNU C/C++ compiler, supports `-g' with or without `-O',
+making it possible to debug optimized code. We recommend that you
+_always_ use `-g' whenever you compile a program. You may think your
+program is correct, but there is no sense in pushing your luck. For
+more information, see *note Optimized Code::.
+
+ Older versions of the GNU C compiler permitted a variant option
+`-gg' for debugging information. GDB no longer supports this format;
+if your GNU C compiler has this option, do not use it.
+
+ GDB knows about preprocessor macros and can show you their expansion
+(*note Macros::). Most compilers do not include information about
+preprocessor macros in the debugging information if you specify the
+`-g' flag alone, because this information is rather large. Version 3.1
+and later of GCC, the GNU C compiler, provides macro information if you
+specify the options `-gdwarf-2' and `-g3'; the former option requests
+debugging information in the Dwarf 2 format, and the latter requests
+"extra information". In the future, we hope to find more compact ways
+to represent macro information, so that it can be included with `-g'
+alone.
+
+
+File: gdb.info, Node: Starting, Next: Arguments, Prev: Compilation, Up: Running
+
+4.2 Starting your Program
+=========================
+
+`run'
+`r'
+ Use the `run' command to start your program under GDB. You must
+ first specify the program name (except on VxWorks) with an
+ argument to GDB (*note Getting In and Out of GDB: Invocation.), or
+ by using the `file' or `exec-file' command (*note Commands to
+ Specify Files: Files.).
+
+
+ If you are running your program in an execution environment that
+supports processes, `run' creates an inferior process and makes that
+process run your program. In some environments without processes,
+`run' jumps to the start of your program. Other targets, like
+`remote', are always running. If you get an error message like this
+one:
+
+ The "remote" target does not support "run".
+ Try "help target" or "continue".
+
+then use `continue' to run your program. You may need `load' first
+(*note load::).
+
+ The execution of a program is affected by certain information it
+receives from its superior. GDB provides ways to specify this
+information, which you must do _before_ starting your program. (You
+can change it after starting your program, but such changes only affect
+your program the next time you start it.) This information may be
+divided into four categories:
+
+The _arguments._
+ Specify the arguments to give your program as the arguments of the
+ `run' command. If a shell is available on your target, the shell
+ is used to pass the arguments, so that you may use normal
+ conventions (such as wildcard expansion or variable substitution)
+ in describing the arguments. In Unix systems, you can control
+ which shell is used with the `SHELL' environment variable. *Note
+ Your Program's Arguments: Arguments.
+
+The _environment._
+ Your program normally inherits its environment from GDB, but you
+ can use the GDB commands `set environment' and `unset environment'
+ to change parts of the environment that affect your program.
+ *Note Your Program's Environment: Environment.
+
+The _working directory._
+ Your program inherits its working directory from GDB. You can set
+ the GDB working directory with the `cd' command in GDB. *Note
+ Your Program's Working Directory: Working Directory.
+
+The _standard input and output._
+ Your program normally uses the same device for standard input and
+ standard output as GDB is using. You can redirect input and output
+ in the `run' command line, or you can use the `tty' command to set
+ a different device for your program. *Note Your Program's Input
+ and Output: Input/Output.
+
+ _Warning:_ While input and output redirection work, you cannot use
+ pipes to pass the output of the program you are debugging to
+ another program; if you attempt this, GDB is likely to wind up
+ debugging the wrong program.
+
+ When you issue the `run' command, your program begins to execute
+immediately. *Note Stopping and Continuing: Stopping, for discussion
+of how to arrange for your program to stop. Once your program has
+stopped, you may call functions in your program, using the `print' or
+`call' commands. *Note Examining Data: Data.
+
+ If the modification time of your symbol file has changed since the
+last time GDB read its symbols, GDB discards its symbol table, and
+reads it again. When it does this, GDB tries to retain your current
+breakpoints.
+
+`start'
+ The name of the main procedure can vary from language to language.
+ With C or C++, the main procedure name is always `main', but other
+ languages such as Ada do not require a specific name for their
+ main procedure. The debugger provides a convenient way to start
+ the execution of the program and to stop at the beginning of the
+ main procedure, depending on the language used.
+
+ The `start' command does the equivalent of setting a temporary
+ breakpoint at the beginning of the main procedure and then invoking
+ the `run' command.
+
+ Some programs contain an "elaboration" phase where some startup
+ code is executed before the main procedure is called. This
+ depends on the languages used to write your program. In C++, for
+ instance, constructors for static and global objects are executed
+ before `main' is called. It is therefore possible that the
+ debugger stops before reaching the main procedure. However, the
+ temporary breakpoint will remain to halt execution.
+
+ Specify the arguments to give to your program as arguments to the
+ `start' command. These arguments will be given verbatim to the
+ underlying `run' command. Note that the same arguments will be
+ reused if no argument is provided during subsequent calls to
+ `start' or `run'.
+
+ It is sometimes necessary to debug the program during elaboration.
+ In these cases, using the `start' command would stop the execution
+ of your program too late, as the program would have already
+ completed the elaboration phase. Under these circumstances,
+ insert breakpoints in your elaboration code before running your
+ program.
+
+`set exec-wrapper WRAPPER'
+`show exec-wrapper'
+`unset exec-wrapper'
+ When `exec-wrapper' is set, the specified wrapper is used to
+ launch programs for debugging. GDB starts your program with a
+ shell command of the form `exec WRAPPER PROGRAM'. Quoting is
+ added to PROGRAM and its arguments, but not to WRAPPER, so you
+ should add quotes if appropriate for your shell. The wrapper runs
+ until it executes your program, and then GDB takes control.
+
+ You can use any program that eventually calls `execve' with its
+ arguments as a wrapper. Several standard Unix utilities do this,
+ e.g. `env' and `nohup'. Any Unix shell script ending with `exec
+ "$@"' will also work.
+
+ For example, you can use `env' to pass an environment variable to
+ the debugged program, without setting the variable in your shell's
+ environment:
+
+ (gdb) set exec-wrapper env 'LD_PRELOAD=libtest.so'
+ (gdb) run
+
+ This command is available when debugging locally on most targets,
+ excluding DJGPP, Cygwin, MS Windows, and QNX Neutrino.
+
+`set disable-randomization'
+`set disable-randomization on'
+ This option (enabled by default in GDB) will turn off the native
+ randomization of the virtual address space of the started program.
+ This option is useful for multiple debugging sessions to make the
+ execution better reproducible and memory addresses reusable across
+ debugging sessions.
+
+ This feature is implemented only on GNU/Linux. You can get the
+ same behavior using
+
+ (gdb) set exec-wrapper setarch `uname -m` -R
+
+`set disable-randomization off'
+ Leave the behavior of the started executable unchanged. Some bugs
+ rear their ugly heads only when the program is loaded at certain
+ addresses. If your bug disappears when you run the program under
+ GDB, that might be because GDB by default disables the address
+ randomization on platforms, such as GNU/Linux, which do that for
+ stand-alone programs. Use `set disable-randomization off' to try
+ to reproduce such elusive bugs.
+
+ The virtual address space randomization is implemented only on
+ GNU/Linux. It protects the programs against some kinds of
+ security attacks. In these cases the attacker needs to know the
+ exact location of a concrete executable code. Randomizing its
+ location makes it impossible to inject jumps misusing a code at
+ its expected addresses.
+
+ Prelinking shared libraries provides a startup performance
+ advantage but it makes addresses in these libraries predictable
+ for privileged processes by having just unprivileged access at the
+ target system. Reading the shared library binary gives enough
+ information for assembling the malicious code misusing it. Still
+ even a prelinked shared library can get loaded at a new random
+ address just requiring the regular relocation process during the
+ startup. Shared libraries not already prelinked are always loaded
+ at a randomly chosen address.
+
+ Position independent executables (PIE) contain position
+ independent code similar to the shared libraries and therefore
+ such executables get loaded at a randomly chosen address upon
+ startup. PIE executables always load even already prelinked
+ shared libraries at a random address. You can build such
+ executable using `gcc -fPIE -pie'.
+
+ Heap (malloc storage), stack and custom mmap areas are always
+ placed randomly (as long as the randomization is enabled).
+
+`show disable-randomization'
+ Show the current setting of the explicit disable of the native
+ randomization of the virtual address space of the started program.
+
+
+
+File: gdb.info, Node: Arguments, Next: Environment, Prev: Starting, Up: Running
+
+4.3 Your Program's Arguments
+============================
+
+The arguments to your program can be specified by the arguments of the
+`run' command. They are passed to a shell, which expands wildcard
+characters and performs redirection of I/O, and thence to your program.
+Your `SHELL' environment variable (if it exists) specifies what shell
+GDB uses. If you do not define `SHELL', GDB uses the default shell
+(`/bin/sh' on Unix).
+
+ On non-Unix systems, the program is usually invoked directly by GDB,
+which emulates I/O redirection via the appropriate system calls, and
+the wildcard characters are expanded by the startup code of the
+program, not by the shell.
+
+ `run' with no arguments uses the same arguments used by the previous
+`run', or those set by the `set args' command.
+
+`set args'
+ Specify the arguments to be used the next time your program is
+ run. If `set args' has no arguments, `run' executes your program
+ with no arguments. Once you have run your program with arguments,
+ using `set args' before the next `run' is the only way to run it
+ again without arguments.
+
+`show args'
+ Show the arguments to give your program when it is started.
+
+
+File: gdb.info, Node: Environment, Next: Working Directory, Prev: Arguments, Up: Running
+
+4.4 Your Program's Environment
+==============================
+
+The "environment" consists of a set of environment variables and their
+values. Environment variables conventionally record such things as
+your user name, your home directory, your terminal type, and your search
+path for programs to run. Usually you set up environment variables with
+the shell and they are inherited by all the other programs you run.
+When debugging, it can be useful to try running your program with a
+modified environment without having to start GDB over again.
+
+`path DIRECTORY'
+ Add DIRECTORY to the front of the `PATH' environment variable (the
+ search path for executables) that will be passed to your program.
+ The value of `PATH' used by GDB does not change. You may specify
+ several directory names, separated by whitespace or by a
+ system-dependent separator character (`:' on Unix, `;' on MS-DOS
+ and MS-Windows). If DIRECTORY is already in the path, it is moved
+ to the front, so it is searched sooner.
+
+ You can use the string `$cwd' to refer to whatever is the current
+ working directory at the time GDB searches the path. If you use
+ `.' instead, it refers to the directory where you executed the
+ `path' command. GDB replaces `.' in the DIRECTORY argument (with
+ the current path) before adding DIRECTORY to the search path.
+
+`show paths'
+ Display the list of search paths for executables (the `PATH'
+ environment variable).
+
+`show environment [VARNAME]'
+ Print the value of environment variable VARNAME to be given to
+ your program when it starts. If you do not supply VARNAME, print
+ the names and values of all environment variables to be given to
+ your program. You can abbreviate `environment' as `env'.
+
+`set environment VARNAME [=VALUE]'
+ Set environment variable VARNAME to VALUE. The value changes for
+ your program only, not for GDB itself. VALUE may be any string;
+ the values of environment variables are just strings, and any
+ interpretation is supplied by your program itself. The VALUE
+ parameter is optional; if it is eliminated, the variable is set to
+ a null value.
+
+ For example, this command:
+
+ set env USER = foo
+
+ tells the debugged program, when subsequently run, that its user
+ is named `foo'. (The spaces around `=' are used for clarity here;
+ they are not actually required.)
+
+`unset environment VARNAME'
+ Remove variable VARNAME from the environment to be passed to your
+ program. This is different from `set env VARNAME ='; `unset
+ environment' removes the variable from the environment, rather
+ than assigning it an empty value.
+
+ _Warning:_ On Unix systems, GDB runs your program using the shell
+indicated by your `SHELL' environment variable if it exists (or
+`/bin/sh' if not). If your `SHELL' variable names a shell that runs an
+initialization file--such as `.cshrc' for C-shell, or `.bashrc' for
+BASH--any variables you set in that file affect your program. You may
+wish to move setting of environment variables to files that are only
+run when you sign on, such as `.login' or `.profile'.
+
+
+File: gdb.info, Node: Working Directory, Next: Input/Output, Prev: Environment, Up: Running
+
+4.5 Your Program's Working Directory
+====================================
+
+Each time you start your program with `run', it inherits its working
+directory from the current working directory of GDB. The GDB working
+directory is initially whatever it inherited from its parent process
+(typically the shell), but you can specify a new working directory in
+GDB with the `cd' command.
+
+ The GDB working directory also serves as a default for the commands
+that specify files for GDB to operate on. *Note Commands to Specify
+Files: Files.
+
+`cd DIRECTORY'
+ Set the GDB working directory to DIRECTORY.
+
+`pwd'
+ Print the GDB working directory.
+
+ It is generally impossible to find the current working directory of
+the process being debugged (since a program can change its directory
+during its run). If you work on a system where GDB is configured with
+the `/proc' support, you can use the `info proc' command (*note SVR4
+Process Information::) to find out the current working directory of the
+debuggee.
+
+
+File: gdb.info, Node: Input/Output, Next: Attach, Prev: Working Directory, Up: Running
+
+4.6 Your Program's Input and Output
+===================================
+
+By default, the program you run under GDB does input and output to the
+same terminal that GDB uses. GDB switches the terminal to its own
+terminal modes to interact with you, but it records the terminal modes
+your program was using and switches back to them when you continue
+running your program.
+
+`info terminal'
+ Displays information recorded by GDB about the terminal modes your
+ program is using.
+
+ You can redirect your program's input and/or output using shell
+redirection with the `run' command. For example,
+
+ run > outfile
+
+starts your program, diverting its output to the file `outfile'.
+
+ Another way to specify where your program should do input and output
+is with the `tty' command. This command accepts a file name as
+argument, and causes this file to be the default for future `run'
+commands. It also resets the controlling terminal for the child
+process, for future `run' commands. For example,
+
+ tty /dev/ttyb
+
+directs that processes started with subsequent `run' commands default
+to do input and output on the terminal `/dev/ttyb' and have that as
+their controlling terminal.
+
+ An explicit redirection in `run' overrides the `tty' command's
+effect on the input/output device, but not its effect on the controlling
+terminal.
+
+ When you use the `tty' command or redirect input in the `run'
+command, only the input _for your program_ is affected. The input for
+GDB still comes from your terminal. `tty' is an alias for `set
+inferior-tty'.
+
+ You can use the `show inferior-tty' command to tell GDB to display
+the name of the terminal that will be used for future runs of your
+program.
+
+`set inferior-tty /dev/ttyb'
+ Set the tty for the program being debugged to /dev/ttyb.
+
+`show inferior-tty'
+ Show the current tty for the program being debugged.
+
+
+File: gdb.info, Node: Attach, Next: Kill Process, Prev: Input/Output, Up: Running
+
+4.7 Debugging an Already-running Process
+========================================
+
+`attach PROCESS-ID'
+ This command attaches to a running process--one that was started
+ outside GDB. (`info files' shows your active targets.) The
+ command takes as argument a process ID. The usual way to find out
+ the PROCESS-ID of a Unix process is with the `ps' utility, or with
+ the `jobs -l' shell command.
+
+ `attach' does not repeat if you press <RET> a second time after
+ executing the command.
+
+ To use `attach', your program must be running in an environment
+which supports processes; for example, `attach' does not work for
+programs on bare-board targets that lack an operating system. You must
+also have permission to send the process a signal.
+
+ When you use `attach', the debugger finds the program running in the
+process first by looking in the current working directory, then (if the
+program is not found) by using the source file search path (*note
+Specifying Source Directories: Source Path.). You can also use the
+`file' command to load the program. *Note Commands to Specify Files:
+Files.
+
+ The first thing GDB does after arranging to debug the specified
+process is to stop it. You can examine and modify an attached process
+with all the GDB commands that are ordinarily available when you start
+processes with `run'. You can insert breakpoints; you can step and
+continue; you can modify storage. If you would rather the process
+continue running, you may use the `continue' command after attaching
+GDB to the process.
+
+`detach'
+ When you have finished debugging the attached process, you can use
+ the `detach' command to release it from GDB control. Detaching
+ the process continues its execution. After the `detach' command,
+ that process and GDB become completely independent once more, and
+ you are ready to `attach' another process or start one with `run'.
+ `detach' does not repeat if you press <RET> again after executing
+ the command.
+
+ If you exit GDB while you have an attached process, you detach that
+process. If you use the `run' command, you kill that process. By
+default, GDB asks for confirmation if you try to do either of these
+things; you can control whether or not you need to confirm by using the
+`set confirm' command (*note Optional Warnings and Messages:
+Messages/Warnings.).
+
+
+File: gdb.info, Node: Kill Process, Next: Inferiors and Programs, Prev: Attach, Up: Running
+
+4.8 Killing the Child Process
+=============================
+
+`kill'
+ Kill the child process in which your program is running under GDB.
+
+ This command is useful if you wish to debug a core dump instead of a
+running process. GDB ignores any core dump file while your program is
+running.
+
+ On some operating systems, a program cannot be executed outside GDB
+while you have breakpoints set on it inside GDB. You can use the
+`kill' command in this situation to permit running your program outside
+the debugger.
+
+ The `kill' command is also useful if you wish to recompile and
+relink your program, since on many systems it is impossible to modify an
+executable file while it is running in a process. In this case, when
+you next type `run', GDB notices that the file has changed, and reads
+the symbol table again (while trying to preserve your current
+breakpoint settings).
+
+
+File: gdb.info, Node: Inferiors and Programs, Next: Threads, Prev: Kill Process, Up: Running
+
+4.9 Debugging Multiple Inferiors and Programs
+=============================================
+
+GDB lets you run and debug multiple programs in a single session. In
+addition, GDB on some systems may let you run several programs
+simultaneously (otherwise you have to exit from one before starting
+another). In the most general case, you can have multiple threads of
+execution in each of multiple processes, launched from multiple
+executables.
+
+ GDB represents the state of each program execution with an object
+called an "inferior". An inferior typically corresponds to a process,
+but is more general and applies also to targets that do not have
+processes. Inferiors may be created before a process runs, and may be
+retained after a process exits. Inferiors have unique identifiers that
+are different from process ids. Usually each inferior will also have
+its own distinct address space, although some embedded targets may have
+several inferiors running in different parts of a single address space.
+Each inferior may in turn have multiple threads running in it.
+
+ To find out what inferiors exist at any moment, use `info inferiors':
+
+`info inferiors'
+ Print a list of all inferiors currently being managed by GDB.
+
+ GDB displays for each inferior (in this order):
+
+ 1. the inferior number assigned by GDB
+
+ 2. the target system's inferior identifier
+
+ 3. the name of the executable the inferior is running.
+
+
+ An asterisk `*' preceding the GDB inferior number indicates the
+ current inferior.
+
+ For example,
+
+ (gdb) info inferiors
+ Num Description Executable
+ 2 process 2307 hello
+ * 1 process 3401 goodbye
+
+ To switch focus between inferiors, use the `inferior' command:
+
+`inferior INFNO'
+ Make inferior number INFNO the current inferior. The argument
+ INFNO is the inferior number assigned by GDB, as shown in the
+ first field of the `info inferiors' display.
+
+ You can get multiple executables into a debugging session via the
+`add-inferior' and `clone-inferior' commands. On some systems GDB can
+add inferiors to the debug session automatically by following calls to
+`fork' and `exec'. To remove inferiors from the debugging session use
+the `remove-inferiors' command.
+
+`add-inferior [ -copies N ] [ -exec EXECUTABLE ]'
+ Adds N inferiors to be run using EXECUTABLE as the executable. N
+ defaults to 1. If no executable is specified, the inferiors
+ begins empty, with no program. You can still assign or change the
+ program assigned to the inferior at any time by using the `file'
+ command with the executable name as its argument.
+
+`clone-inferior [ -copies N ] [ INFNO ]'
+ Adds N inferiors ready to execute the same program as inferior
+ INFNO. N defaults to 1. INFNO defaults to the number of the
+ current inferior. This is a convenient command when you want to
+ run another instance of the inferior you are debugging.
+
+ (gdb) info inferiors
+ Num Description Executable
+ * 1 process 29964 helloworld
+ (gdb) clone-inferior
+ Added inferior 2.
+ 1 inferiors added.
+ (gdb) info inferiors
+ Num Description Executable
+ 2 <null> helloworld
+ * 1 process 29964 helloworld
+
+ You can now simply switch focus to inferior 2 and run it.
+
+`remove-inferiors INFNO...'
+ Removes the inferior or inferiors INFNO.... It is not possible to
+ remove an inferior that is running with this command. For those,
+ use the `kill' or `detach' command first.
+
+
+ To quit debugging one of the running inferiors that is not the
+current inferior, you can either detach from it by using the
+`detach inferior' command (allowing it to run independently), or kill it
+using the `kill inferiors' command:
+
+`detach inferior INFNO...'
+ Detach from the inferior or inferiors identified by GDB inferior
+ number(s) INFNO.... Note that the inferior's entry still stays on
+ the list of inferiors shown by `info inferiors', but its
+ Description will show `<null>'.
+
+`kill inferiors INFNO...'
+ Kill the inferior or inferiors identified by GDB inferior
+ number(s) INFNO.... Note that the inferior's entry still stays on
+ the list of inferiors shown by `info inferiors', but its
+ Description will show `<null>'.
+
+ After the successful completion of a command such as `detach',
+`detach inferiors', `kill' or `kill inferiors', or after a normal
+process exit, the inferior is still valid and listed with `info
+inferiors', ready to be restarted.
+
+ To be notified when inferiors are started or exit under GDB's
+control use `set print inferior-events':
+
+`set print inferior-events'
+`set print inferior-events on'
+`set print inferior-events off'
+ The `set print inferior-events' command allows you to enable or
+ disable printing of messages when GDB notices that new inferiors
+ have started or that inferiors have exited or have been detached.
+ By default, these messages will not be printed.
+
+`show print inferior-events'
+ Show whether messages will be printed when GDB detects that
+ inferiors have started, exited or have been detached.
+
+ Many commands will work the same with multiple programs as with a
+single program: e.g., `print myglobal' will simply display the value of
+`myglobal' in the current inferior.
+
+ Occasionaly, when debugging GDB itself, it may be useful to get more
+info about the relationship of inferiors, programs, address spaces in a
+debug session. You can do that with the `maint info program-spaces'
+command.
+
+`maint info program-spaces'
+ Print a list of all program spaces currently being managed by GDB.
+
+ GDB displays for each program space (in this order):
+
+ 1. the program space number assigned by GDB
+
+ 2. the name of the executable loaded into the program space,
+ with e.g., the `file' command.
+
+
+ An asterisk `*' preceding the GDB program space number indicates
+ the current program space.
+
+ In addition, below each program space line, GDB prints extra
+ information that isn't suitable to display in tabular form. For
+ example, the list of inferiors bound to the program space.
+
+ (gdb) maint info program-spaces
+ Id Executable
+ 2 goodbye
+ Bound inferiors: ID 1 (process 21561)
+ * 1 hello
+
+ Here we can see that no inferior is running the program `hello',
+ while `process 21561' is running the program `goodbye'. On some
+ targets, it is possible that multiple inferiors are bound to the
+ same program space. The most common example is that of debugging
+ both the parent and child processes of a `vfork' call. For
+ example,
+
+ (gdb) maint info program-spaces
+ Id Executable
+ * 1 vfork-test
+ Bound inferiors: ID 2 (process 18050), ID 1 (process 18045)
+
+ Here, both inferior 2 and inferior 1 are running in the same
+ program space as a result of inferior 1 having executed a `vfork'
+ call.
+
+
+File: gdb.info, Node: Threads, Next: Forks, Prev: Inferiors and Programs, Up: Running
+
+4.10 Debugging Programs with Multiple Threads
+=============================================
+
+In some operating systems, such as HP-UX and Solaris, a single program
+may have more than one "thread" of execution. The precise semantics of
+threads differ from one operating system to another, but in general the
+threads of a single program are akin to multiple processes--except that
+they share one address space (that is, they can all examine and modify
+the same variables). On the other hand, each thread has its own
+registers and execution stack, and perhaps private memory.
+
+ GDB provides these facilities for debugging multi-thread programs:
+
+ * automatic notification of new threads
+
+ * `thread THREADNO', a command to switch among threads
+
+ * `info threads', a command to inquire about existing threads
+
+ * `thread apply [THREADNO] [ALL] ARGS', a command to apply a command
+ to a list of threads
+
+ * thread-specific breakpoints
+
+ * `set print thread-events', which controls printing of messages on
+ thread start and exit.
+
+ * `set libthread-db-search-path PATH', which lets the user specify
+ which `libthread_db' to use if the default choice isn't compatible
+ with the program.
+
+ _Warning:_ These facilities are not yet available on every GDB
+ configuration where the operating system supports threads. If
+ your GDB does not support threads, these commands have no effect.
+ For example, a system without thread support shows no output from
+ `info threads', and always rejects the `thread' command, like this:
+
+ (gdb) info threads
+ (gdb) thread 1
+ Thread ID 1 not known. Use the "info threads" command to
+ see the IDs of currently known threads.
+
+ The GDB thread debugging facility allows you to observe all threads
+while your program runs--but whenever GDB takes control, one thread in
+particular is always the focus of debugging. This thread is called the
+"current thread". Debugging commands show program information from the
+perspective of the current thread.
+
+ Whenever GDB detects a new thread in your program, it displays the
+target system's identification for the thread with a message in the
+form `[New SYSTAG]'. SYSTAG is a thread identifier whose form varies
+depending on the particular system. For example, on GNU/Linux, you
+might see
+
+ [New Thread 0x41e02940 (LWP 25582)]
+
+when GDB notices a new thread. In contrast, on an SGI system, the
+SYSTAG is simply something like `process 368', with no further
+qualifier.
+
+ For debugging purposes, GDB associates its own thread number--always
+a single integer--with each thread in your program.
+
+`info threads [ID...]'
+ Display a summary of all threads currently in your program.
+ Optional argument ID... is one or more thread ids separated by
+ spaces, and means to print information only about the specified
+ thread or threads. GDB displays for each thread (in this order):
+
+ 1. the thread number assigned by GDB
+
+ 2. the target system's thread identifier (SYSTAG)
+
+ 3. the thread's name, if one is known. A thread can either be
+ named by the user (see `thread name', below), or, in some
+ cases, by the program itself.
+
+ 4. the current stack frame summary for that thread
+
+ An asterisk `*' to the left of the GDB thread number indicates the
+ current thread.
+
+ For example,
+
+ (gdb) info threads
+ Id Target Id Frame
+ 3 process 35 thread 27 0x34e5 in sigpause ()
+ 2 process 35 thread 23 0x34e5 in sigpause ()
+ * 1 process 35 thread 13 main (argc=1, argv=0x7ffffff8)
+ at threadtest.c:68
+
+ On Solaris, you can display more information about user threads with
+a Solaris-specific command:
+
+`maint info sol-threads'
+ Display info on Solaris user threads.
+
+`thread THREADNO'
+ Make thread number THREADNO the current thread. The command
+ argument THREADNO is the internal GDB thread number, as shown in
+ the first field of the `info threads' display. GDB responds by
+ displaying the system identifier of the thread you selected, and
+ its current stack frame summary:
+
+ (gdb) thread 2
+ [Switching to thread 2 (Thread 0xb7fdab70 (LWP 12747))]
+ #0 some_function (ignore=0x0) at example.c:8
+ 8 printf ("hello\n");
+
+ As with the `[New ...]' message, the form of the text after
+ `Switching to' depends on your system's conventions for identifying
+ threads.
+
+ The debugger convenience variable `$_thread' contains the number
+ of the current thread. You may find this useful in writing
+ breakpoint conditional expressions, command scripts, and so forth.
+ See *Note Convenience Variables: Convenience Vars, for general
+ information on convenience variables.
+
+`thread apply [THREADNO | all] COMMAND'
+ The `thread apply' command allows you to apply the named COMMAND
+ to one or more threads. Specify the numbers of the threads that
+ you want affected with the command argument THREADNO. It can be a
+ single thread number, one of the numbers shown in the first field
+ of the `info threads' display; or it could be a range of thread
+ numbers, as in `2-4'. To apply a command to all threads, type
+ `thread apply all COMMAND'.
+
+`thread name [NAME]'
+ This command assigns a name to the current thread. If no argument
+ is given, any existing user-specified name is removed. The thread
+ name appears in the `info threads' display.
+
+ On some systems, such as GNU/Linux, GDB is able to determine the
+ name of the thread as given by the OS. On these systems, a name
+ specified with `thread name' will override the system-give name,
+ and removing the user-specified name will cause GDB to once again
+ display the system-specified name.
+
+`thread find [REGEXP]'
+ Search for and display thread ids whose name or SYSTAG matches the
+ supplied regular expression.
+
+ As well as being the complement to the `thread name' command, this
+ command also allows you to identify a thread by its target SYSTAG.
+ For instance, on GNU/Linux, the target SYSTAG is the LWP id.
+
+ (GDB) thread find 26688
+ Thread 4 has target id 'Thread 0x41e02940 (LWP 26688)'
+ (GDB) info thread 4
+ Id Target Id Frame
+ 4 Thread 0x41e02940 (LWP 26688) 0x00000031ca6cd372 in select ()
+
+`set print thread-events'
+`set print thread-events on'
+`set print thread-events off'
+ The `set print thread-events' command allows you to enable or
+ disable printing of messages when GDB notices that new threads have
+ started or that threads have exited. By default, these messages
+ will be printed if detection of these events is supported by the
+ target. Note that these messages cannot be disabled on all
+ targets.
+
+`show print thread-events'
+ Show whether messages will be printed when GDB detects that threads
+ have started and exited.
+
+ *Note Stopping and Starting Multi-thread Programs: Thread Stops, for
+more information about how GDB behaves when you stop and start programs
+with multiple threads.
+
+ *Note Setting Watchpoints: Set Watchpoints, for information about
+watchpoints in programs with multiple threads.
+
+`set libthread-db-search-path [PATH]'
+ If this variable is set, PATH is a colon-separated list of
+ directories GDB will use to search for `libthread_db'. If you
+ omit PATH, `libthread-db-search-path' will be reset to its default
+ value (`$sdir:$pdir' on GNU/Linux and Solaris systems).
+ Internally, the default value comes from the
+ `LIBTHREAD_DB_SEARCH_PATH' macro.
+
+ On GNU/Linux and Solaris systems, GDB uses a "helper"
+ `libthread_db' library to obtain information about threads in the
+ inferior process. GDB will use `libthread-db-search-path' to find
+ `libthread_db'.
+
+ A special entry `$sdir' for `libthread-db-search-path' refers to
+ the default system directories that are normally searched for
+ loading shared libraries.
+
+ A special entry `$pdir' for `libthread-db-search-path' refers to
+ the directory from which `libpthread' was loaded in the inferior
+ process.
+
+ For any `libthread_db' library GDB finds in above directories, GDB
+ attempts to initialize it with the current inferior process. If
+ this initialization fails (which could happen because of a version
+ mismatch between `libthread_db' and `libpthread'), GDB will unload
+ `libthread_db', and continue with the next directory. If none of
+ `libthread_db' libraries initialize successfully, GDB will issue a
+ warning and thread debugging will be disabled.
+
+ Setting `libthread-db-search-path' is currently implemented only
+ on some platforms.
+
+`show libthread-db-search-path'
+ Display current libthread_db search path.
+
+`set debug libthread-db'
+`show debug libthread-db'
+ Turns on or off display of `libthread_db'-related events. Use `1'
+ to enable, `0' to disable.
+
+
+File: gdb.info, Node: Forks, Next: Checkpoint/Restart, Prev: Threads, Up: Running
+
+4.11 Debugging Forks
+====================
+
+On most systems, GDB has no special support for debugging programs
+which create additional processes using the `fork' function. When a
+program forks, GDB will continue to debug the parent process and the
+child process will run unimpeded. If you have set a breakpoint in any
+code which the child then executes, the child will get a `SIGTRAP'
+signal which (unless it catches the signal) will cause it to terminate.
+
+ However, if you want to debug the child process there is a workaround
+which isn't too painful. Put a call to `sleep' in the code which the
+child process executes after the fork. It may be useful to sleep only
+if a certain environment variable is set, or a certain file exists, so
+that the delay need not occur when you don't want to run GDB on the
+child. While the child is sleeping, use the `ps' program to get its
+process ID. Then tell GDB (a new invocation of GDB if you are also
+debugging the parent process) to attach to the child process (*note
+Attach::). From that point on you can debug the child process just
+like any other process which you attached to.
+
+ On some systems, GDB provides support for debugging programs that
+create additional processes using the `fork' or `vfork' functions.
+Currently, the only platforms with this feature are HP-UX (11.x and
+later only?) and GNU/Linux (kernel version 2.5.60 and later).
+
+ By default, when a program forks, GDB will continue to debug the
+parent process and the child process will run unimpeded.
+
+ If you want to follow the child process instead of the parent
+process, use the command `set follow-fork-mode'.
+
+`set follow-fork-mode MODE'
+ Set the debugger response to a program call of `fork' or `vfork'.
+ A call to `fork' or `vfork' creates a new process. The MODE
+ argument can be:
+
+ `parent'
+ The original process is debugged after a fork. The child
+ process runs unimpeded. This is the default.
+
+ `child'
+ The new process is debugged after a fork. The parent process
+ runs unimpeded.
+
+
+`show follow-fork-mode'
+ Display the current debugger response to a `fork' or `vfork' call.
+
+ On Linux, if you want to debug both the parent and child processes,
+use the command `set detach-on-fork'.
+
+`set detach-on-fork MODE'
+ Tells gdb whether to detach one of the processes after a fork, or
+ retain debugger control over them both.
+
+ `on'
+ The child process (or parent process, depending on the value
+ of `follow-fork-mode') will be detached and allowed to run
+ independently. This is the default.
+
+ `off'
+ Both processes will be held under the control of GDB. One
+ process (child or parent, depending on the value of
+ `follow-fork-mode') is debugged as usual, while the other is
+ held suspended.
+
+
+`show detach-on-fork'
+ Show whether detach-on-fork mode is on/off.
+
+ If you choose to set `detach-on-fork' mode off, then GDB will retain
+control of all forked processes (including nested forks). You can list
+the forked processes under the control of GDB by using the
+`info inferiors' command, and switch from one fork to another by using
+the `inferior' command (*note Debugging Multiple Inferiors and
+Programs: Inferiors and Programs.).
+
+ To quit debugging one of the forked processes, you can either detach
+from it by using the `detach inferiors' command (allowing it to run
+independently), or kill it using the `kill inferiors' command. *Note
+Debugging Multiple Inferiors and Programs: Inferiors and Programs.
+
+ If you ask to debug a child process and a `vfork' is followed by an
+`exec', GDB executes the new target up to the first breakpoint in the
+new target. If you have a breakpoint set on `main' in your original
+program, the breakpoint will also be set on the child process's `main'.
+
+ On some systems, when a child process is spawned by `vfork', you
+cannot debug the child or parent until an `exec' call completes.
+
+ If you issue a `run' command to GDB after an `exec' call executes,
+the new target restarts. To restart the parent process, use the `file'
+command with the parent executable name as its argument. By default,
+after an `exec' call executes, GDB discards the symbols of the previous
+executable image. You can change this behaviour with the
+`set follow-exec-mode' command.
+
+`set follow-exec-mode MODE'
+ Set debugger response to a program call of `exec'. An `exec' call
+ replaces the program image of a process.
+
+ `follow-exec-mode' can be:
+
+ `new'
+ GDB creates a new inferior and rebinds the process to this
+ new inferior. The program the process was running before the
+ `exec' call can be restarted afterwards by restarting the
+ original inferior.
+
+ For example:
+
+ (gdb) info inferiors
+ (gdb) info inferior
+ Id Description Executable
+ * 1 <null> prog1
+ (gdb) run
+ process 12020 is executing new program: prog2
+ Program exited normally.
+ (gdb) info inferiors
+ Id Description Executable
+ * 2 <null> prog2
+ 1 <null> prog1
+
+ `same'
+ GDB keeps the process bound to the same inferior. The new
+ executable image replaces the previous executable loaded in
+ the inferior. Restarting the inferior after the `exec' call,
+ with e.g., the `run' command, restarts the executable the
+ process was running after the `exec' call. This is the
+ default mode.
+
+ For example:
+
+ (gdb) info inferiors
+ Id Description Executable
+ * 1 <null> prog1
+ (gdb) run
+ process 12020 is executing new program: prog2
+ Program exited normally.
+ (gdb) info inferiors
+ Id Description Executable
+ * 1 <null> prog2
+
+
+ You can use the `catch' command to make GDB stop whenever a `fork',
+`vfork', or `exec' call is made. *Note Setting Catchpoints: Set
+Catchpoints.
+
+
+File: gdb.info, Node: Checkpoint/Restart, Prev: Forks, Up: Running
+
+4.12 Setting a _Bookmark_ to Return to Later
+============================================
+
+On certain operating systems(1), GDB is able to save a "snapshot" of a
+program's state, called a "checkpoint", and come back to it later.
+
+ Returning to a checkpoint effectively undoes everything that has
+happened in the program since the `checkpoint' was saved. This
+includes changes in memory, registers, and even (within some limits)
+system state. Effectively, it is like going back in time to the moment
+when the checkpoint was saved.
+
+ Thus, if you're stepping thru a program and you think you're getting
+close to the point where things go wrong, you can save a checkpoint.
+Then, if you accidentally go too far and miss the critical statement,
+instead of having to restart your program from the beginning, you can
+just go back to the checkpoint and start again from there.
+
+ This can be especially useful if it takes a lot of time or steps to
+reach the point where you think the bug occurs.
+
+ To use the `checkpoint'/`restart' method of debugging:
+
+`checkpoint'
+ Save a snapshot of the debugged program's current execution state.
+ The `checkpoint' command takes no arguments, but each checkpoint
+ is assigned a small integer id, similar to a breakpoint id.
+
+`info checkpoints'
+ List the checkpoints that have been saved in the current debugging
+ session. For each checkpoint, the following information will be
+ listed:
+
+ `Checkpoint ID'
+
+ `Process ID'
+
+ `Code Address'
+
+ `Source line, or label'
+
+`restart CHECKPOINT-ID'
+ Restore the program state that was saved as checkpoint number
+ CHECKPOINT-ID. All program variables, registers, stack frames
+ etc. will be returned to the values that they had when the
+ checkpoint was saved. In essence, gdb will "wind back the clock"
+ to the point in time when the checkpoint was saved.
+
+ Note that breakpoints, GDB variables, command history etc. are
+ not affected by restoring a checkpoint. In general, a checkpoint
+ only restores things that reside in the program being debugged,
+ not in the debugger.
+
+`delete checkpoint CHECKPOINT-ID'
+ Delete the previously-saved checkpoint identified by CHECKPOINT-ID.
+
+
+ Returning to a previously saved checkpoint will restore the user
+state of the program being debugged, plus a significant subset of the
+system (OS) state, including file pointers. It won't "un-write" data
+from a file, but it will rewind the file pointer to the previous
+location, so that the previously written data can be overwritten. For
+files opened in read mode, the pointer will also be restored so that the
+previously read data can be read again.
+
+ Of course, characters that have been sent to a printer (or other
+external device) cannot be "snatched back", and characters received
+from eg. a serial device can be removed from internal program buffers,
+but they cannot be "pushed back" into the serial pipeline, ready to be
+received again. Similarly, the actual contents of files that have been
+changed cannot be restored (at this time).
+
+ However, within those constraints, you actually can "rewind" your
+program to a previously saved point in time, and begin debugging it
+again -- and you can change the course of events so as to debug a
+different execution path this time.
+
+ Finally, there is one bit of internal program state that will be
+different when you return to a checkpoint -- the program's process id.
+Each checkpoint will have a unique process id (or PID), and each will
+be different from the program's original PID. If your program has
+saved a local copy of its process id, this could potentially pose a
+problem.
+
+4.12.1 A Non-obvious Benefit of Using Checkpoints
+-------------------------------------------------
+
+On some systems such as GNU/Linux, address space randomization is
+performed on new processes for security reasons. This makes it
+difficult or impossible to set a breakpoint, or watchpoint, on an
+absolute address if you have to restart the program, since the absolute
+location of a symbol will change from one execution to the next.
+
+ A checkpoint, however, is an _identical_ copy of a process.
+Therefore if you create a checkpoint at (eg.) the start of main, and
+simply return to that checkpoint instead of restarting the process, you
+can avoid the effects of address randomization and your symbols will
+all stay in the same place.
+
+ ---------- Footnotes ----------
+
+ (1) Currently, only GNU/Linux.
+
+
+File: gdb.info, Node: Stopping, Next: Reverse Execution, Prev: Running, Up: Top
+
+5 Stopping and Continuing
+*************************
+
+The principal purposes of using a debugger are so that you can stop your
+program before it terminates; or so that, if your program runs into
+trouble, you can investigate and find out why.
+
+ Inside GDB, your program may stop for any of several reasons, such
+as a signal, a breakpoint, or reaching a new line after a GDB command
+such as `step'. You may then examine and change variables, set new
+breakpoints or remove old ones, and then continue execution. Usually,
+the messages shown by GDB provide ample explanation of the status of
+your program--but you can also explicitly request this information at
+any time.
+
+`info program'
+ Display information about the status of your program: whether it is
+ running or not, what process it is, and why it stopped.
+
+* Menu:
+
+* Breakpoints:: Breakpoints, watchpoints, and catchpoints
+* Continuing and Stepping:: Resuming execution
+* Signals:: Signals
+* Thread Stops:: Stopping and starting multi-thread programs
+
+
+File: gdb.info, Node: Breakpoints, Next: Continuing and Stepping, Up: Stopping
+
+5.1 Breakpoints, Watchpoints, and Catchpoints
+=============================================
+
+A "breakpoint" makes your program stop whenever a certain point in the
+program is reached. For each breakpoint, you can add conditions to
+control in finer detail whether your program stops. You can set
+breakpoints with the `break' command and its variants (*note Setting
+Breakpoints: Set Breaks.), to specify the place where your program
+should stop by line number, function name or exact address in the
+program.
+
+ On some systems, you can set breakpoints in shared libraries before
+the executable is run. There is a minor limitation on HP-UX systems:
+you must wait until the executable is run in order to set breakpoints
+in shared library routines that are not called directly by the program
+(for example, routines that are arguments in a `pthread_create' call).
+
+ A "watchpoint" is a special breakpoint that stops your program when
+the value of an expression changes. The expression may be a value of a
+variable, or it could involve values of one or more variables combined
+by operators, such as `a + b'. This is sometimes called "data
+breakpoints". You must use a different command to set watchpoints
+(*note Setting Watchpoints: Set Watchpoints.), but aside from that, you
+can manage a watchpoint like any other breakpoint: you enable, disable,
+and delete both breakpoints and watchpoints using the same commands.
+
+ You can arrange to have values from your program displayed
+automatically whenever GDB stops at a breakpoint. *Note Automatic
+Display: Auto Display.
+
+ A "catchpoint" is another special breakpoint that stops your program
+when a certain kind of event occurs, such as the throwing of a C++
+exception or the loading of a library. As with watchpoints, you use a
+different command to set a catchpoint (*note Setting Catchpoints: Set
+Catchpoints.), but aside from that, you can manage a catchpoint like any
+other breakpoint. (To stop when your program receives a signal, use the
+`handle' command; see *note Signals: Signals.)
+
+ GDB assigns a number to each breakpoint, watchpoint, or catchpoint
+when you create it; these numbers are successive integers starting with
+one. In many of the commands for controlling various features of
+breakpoints you use the breakpoint number to say which breakpoint you
+want to change. Each breakpoint may be "enabled" or "disabled"; if
+disabled, it has no effect on your program until you enable it again.
+
+ Some GDB commands accept a range of breakpoints on which to operate.
+A breakpoint range is either a single breakpoint number, like `5', or
+two such numbers, in increasing order, separated by a hyphen, like
+`5-7'. When a breakpoint range is given to a command, all breakpoints
+in that range are operated on.
+
+* Menu:
+
+* Set Breaks:: Setting breakpoints
+* Set Watchpoints:: Setting watchpoints
+* Set Catchpoints:: Setting catchpoints
+* Delete Breaks:: Deleting breakpoints
+* Disabling:: Disabling breakpoints
+* Conditions:: Break conditions
+* Break Commands:: Breakpoint command lists
+* Save Breakpoints:: How to save breakpoints in a file
+* Error in Breakpoints:: ``Cannot insert breakpoints''
+* Breakpoint-related Warnings:: ``Breakpoint address adjusted...''
+
+
+File: gdb.info, Node: Set Breaks, Next: Set Watchpoints, Up: Breakpoints
+
+5.1.1 Setting Breakpoints
+-------------------------
+
+Breakpoints are set with the `break' command (abbreviated `b'). The
+debugger convenience variable `$bpnum' records the number of the
+breakpoint you've set most recently; see *note Convenience Variables:
+Convenience Vars, for a discussion of what you can do with convenience
+variables.
+
+`break LOCATION'
+ Set a breakpoint at the given LOCATION, which can specify a
+ function name, a line number, or an address of an instruction.
+ (*Note Specify Location::, for a list of all the possible ways to
+ specify a LOCATION.) The breakpoint will stop your program just
+ before it executes any of the code in the specified LOCATION.
+
+ When using source languages that permit overloading of symbols,
+ such as C++, a function name may refer to more than one possible
+ place to break. *Note Ambiguous Expressions: Ambiguous
+ Expressions, for a discussion of that situation.
+
+ It is also possible to insert a breakpoint that will stop the
+ program only if a specific thread (*note Thread-Specific
+ Breakpoints::) or a specific task (*note Ada Tasks::) hits that
+ breakpoint.
+
+`break'
+ When called without any arguments, `break' sets a breakpoint at
+ the next instruction to be executed in the selected stack frame
+ (*note Examining the Stack: Stack.). In any selected frame but the
+ innermost, this makes your program stop as soon as control returns
+ to that frame. This is similar to the effect of a `finish'
+ command in the frame inside the selected frame--except that
+ `finish' does not leave an active breakpoint. If you use `break'
+ without an argument in the innermost frame, GDB stops the next
+ time it reaches the current location; this may be useful inside
+ loops.
+
+ GDB normally ignores breakpoints when it resumes execution, until
+ at least one instruction has been executed. If it did not do
+ this, you would be unable to proceed past a breakpoint without
+ first disabling the breakpoint. This rule applies whether or not
+ the breakpoint already existed when your program stopped.
+
+`break ... if COND'
+ Set a breakpoint with condition COND; evaluate the expression COND
+ each time the breakpoint is reached, and stop only if the value is
+ nonzero--that is, if COND evaluates as true. `...' stands for one
+ of the possible arguments described above (or no argument)
+ specifying where to break. *Note Break Conditions: Conditions,
+ for more information on breakpoint conditions.
+
+`tbreak ARGS'
+ Set a breakpoint enabled only for one stop. ARGS are the same as
+ for the `break' command, and the breakpoint is set in the same
+ way, but the breakpoint is automatically deleted after the first
+ time your program stops there. *Note Disabling Breakpoints:
+ Disabling.
+
+`hbreak ARGS'
+ Set a hardware-assisted breakpoint. ARGS are the same as for the
+ `break' command and the breakpoint is set in the same way, but the
+ breakpoint requires hardware support and some target hardware may
+ not have this support. The main purpose of this is EPROM/ROM code
+ debugging, so you can set a breakpoint at an instruction without
+ changing the instruction. This can be used with the new
+ trap-generation provided by SPARClite DSU and most x86-based
+ targets. These targets will generate traps when a program
+ accesses some data or instruction address that is assigned to the
+ debug registers. However the hardware breakpoint registers can
+ take a limited number of breakpoints. For example, on the DSU,
+ only two data breakpoints can be set at a time, and GDB will
+ reject this command if more than two are used. Delete or disable
+ unused hardware breakpoints before setting new ones (*note
+ Disabling Breakpoints: Disabling.). *Note Break Conditions:
+ Conditions. For remote targets, you can restrict the number of
+ hardware breakpoints GDB will use, see *note set remote
+ hardware-breakpoint-limit::.
+
+`thbreak ARGS'
+ Set a hardware-assisted breakpoint enabled only for one stop. ARGS
+ are the same as for the `hbreak' command and the breakpoint is set
+ in the same way. However, like the `tbreak' command, the
+ breakpoint is automatically deleted after the first time your
+ program stops there. Also, like the `hbreak' command, the
+ breakpoint requires hardware support and some target hardware may
+ not have this support. *Note Disabling Breakpoints: Disabling.
+ See also *note Break Conditions: Conditions.
+
+`rbreak REGEX'
+ Set breakpoints on all functions matching the regular expression
+ REGEX. This command sets an unconditional breakpoint on all
+ matches, printing a list of all breakpoints it set. Once these
+ breakpoints are set, they are treated just like the breakpoints
+ set with the `break' command. You can delete them, disable them,
+ or make them conditional the same way as any other breakpoint.
+
+ The syntax of the regular expression is the standard one used with
+ tools like `grep'. Note that this is different from the syntax
+ used by shells, so for instance `foo*' matches all functions that
+ include an `fo' followed by zero or more `o's. There is an
+ implicit `.*' leading and trailing the regular expression you
+ supply, so to match only functions that begin with `foo', use
+ `^foo'.
+
+ When debugging C++ programs, `rbreak' is useful for setting
+ breakpoints on overloaded functions that are not members of any
+ special classes.
+
+ The `rbreak' command can be used to set breakpoints in *all* the
+ functions in a program, like this:
+
+ (gdb) rbreak .
+
+`rbreak FILE:REGEX'
+ If `rbreak' is called with a filename qualification, it limits the
+ search for functions matching the given regular expression to the
+ specified FILE. This can be used, for example, to set breakpoints
+ on every function in a given file:
+
+ (gdb) rbreak file.c:.
+
+ The colon separating the filename qualifier from the regex may
+ optionally be surrounded by spaces.
+
+`info breakpoints [N...]'
+`info break [N...]'
+ Print a table of all breakpoints, watchpoints, and catchpoints set
+ and not deleted. Optional argument N means print information only
+ about the specified breakpoint(s) (or watchpoint(s) or
+ catchpoint(s)). For each breakpoint, following columns are
+ printed:
+
+ _Breakpoint Numbers_
+
+ _Type_
+ Breakpoint, watchpoint, or catchpoint.
+
+ _Disposition_
+ Whether the breakpoint is marked to be disabled or deleted
+ when hit.
+
+ _Enabled or Disabled_
+ Enabled breakpoints are marked with `y'. `n' marks
+ breakpoints that are not enabled.
+
+ _Address_
+ Where the breakpoint is in your program, as a memory address.
+ For a pending breakpoint whose address is not yet known, this
+ field will contain `<PENDING>'. Such breakpoint won't fire
+ until a shared library that has the symbol or line referred
+ by breakpoint is loaded. See below for details. A
+ breakpoint with several locations will have `<MULTIPLE>' in
+ this field--see below for details.
+
+ _What_
+ Where the breakpoint is in the source for your program, as a
+ file and line number. For a pending breakpoint, the original
+ string passed to the breakpoint command will be listed as it
+ cannot be resolved until the appropriate shared library is
+ loaded in the future.
+
+ If a breakpoint is conditional, `info break' shows the condition on
+ the line following the affected breakpoint; breakpoint commands,
+ if any, are listed after that. A pending breakpoint is allowed to
+ have a condition specified for it. The condition is not parsed
+ for validity until a shared library is loaded that allows the
+ pending breakpoint to resolve to a valid location.
+
+ `info break' with a breakpoint number N as argument lists only
+ that breakpoint. The convenience variable `$_' and the default
+ examining-address for the `x' command are set to the address of
+ the last breakpoint listed (*note Examining Memory: Memory.).
+
+ `info break' displays a count of the number of times the breakpoint
+ has been hit. This is especially useful in conjunction with the
+ `ignore' command. You can ignore a large number of breakpoint
+ hits, look at the breakpoint info to see how many times the
+ breakpoint was hit, and then run again, ignoring one less than
+ that number. This will get you quickly to the last hit of that
+ breakpoint.
+
+ GDB allows you to set any number of breakpoints at the same place in
+your program. There is nothing silly or meaningless about this. When
+the breakpoints are conditional, this is even useful (*note Break
+Conditions: Conditions.).
+
+ It is possible that a breakpoint corresponds to several locations in
+your program. Examples of this situation are:
+
+ * For a C++ constructor, the GCC compiler generates several
+ instances of the function body, used in different cases.
+
+ * For a C++ template function, a given line in the function can
+ correspond to any number of instantiations.
+
+ * For an inlined function, a given source line can correspond to
+ several places where that function is inlined.
+
+ In all those cases, GDB will insert a breakpoint at all the relevant
+locations(1).
+
+ A breakpoint with multiple locations is displayed in the breakpoint
+table using several rows--one header row, followed by one row for each
+breakpoint location. The header row has `<MULTIPLE>' in the address
+column. The rows for individual locations contain the actual addresses
+for locations, and show the functions to which those locations belong.
+The number column for a location is of the form
+BREAKPOINT-NUMBER.LOCATION-NUMBER.
+
+ For example:
+
+ Num Type Disp Enb Address What
+ 1 breakpoint keep y <MULTIPLE>
+ stop only if i==1
+ breakpoint already hit 1 time
+ 1.1 y 0x080486a2 in void foo<int>() at t.cc:8
+ 1.2 y 0x080486ca in void foo<double>() at t.cc:8
+
+ Each location can be individually enabled or disabled by passing
+BREAKPOINT-NUMBER.LOCATION-NUMBER as argument to the `enable' and
+`disable' commands. Note that you cannot delete the individual
+locations from the list, you can only delete the entire list of
+locations that belong to their parent breakpoint (with the `delete NUM'
+command, where NUM is the number of the parent breakpoint, 1 in the
+above example). Disabling or enabling the parent breakpoint (*note
+Disabling::) affects all of the locations that belong to that
+breakpoint.
+
+ It's quite common to have a breakpoint inside a shared library.
+Shared libraries can be loaded and unloaded explicitly, and possibly
+repeatedly, as the program is executed. To support this use case, GDB
+updates breakpoint locations whenever any shared library is loaded or
+unloaded. Typically, you would set a breakpoint in a shared library at
+the beginning of your debugging session, when the library is not
+loaded, and when the symbols from the library are not available. When
+you try to set breakpoint, GDB will ask you if you want to set a so
+called "pending breakpoint"--breakpoint whose address is not yet
+resolved.
+
+ After the program is run, whenever a new shared library is loaded,
+GDB reevaluates all the breakpoints. When a newly loaded shared
+library contains the symbol or line referred to by some pending
+breakpoint, that breakpoint is resolved and becomes an ordinary
+breakpoint. When a library is unloaded, all breakpoints that refer to
+its symbols or source lines become pending again.
+
+ This logic works for breakpoints with multiple locations, too. For
+example, if you have a breakpoint in a C++ template function, and a
+newly loaded shared library has an instantiation of that template, a
+new location is added to the list of locations for the breakpoint.
+
+ Except for having unresolved address, pending breakpoints do not
+differ from regular breakpoints. You can set conditions or commands,
+enable and disable them and perform other breakpoint operations.
+
+ GDB provides some additional commands for controlling what happens
+when the `break' command cannot resolve breakpoint address
+specification to an address:
+
+`set breakpoint pending auto'
+ This is the default behavior. When GDB cannot find the breakpoint
+ location, it queries you whether a pending breakpoint should be
+ created.
+
+`set breakpoint pending on'
+ This indicates that an unrecognized breakpoint location should
+ automatically result in a pending breakpoint being created.
+
+`set breakpoint pending off'
+ This indicates that pending breakpoints are not to be created. Any
+ unrecognized breakpoint location results in an error. This
+ setting does not affect any pending breakpoints previously created.
+
+`show breakpoint pending'
+ Show the current behavior setting for creating pending breakpoints.
+
+ The settings above only affect the `break' command and its variants.
+Once breakpoint is set, it will be automatically updated as shared
+libraries are loaded and unloaded.
+
+ For some targets, GDB can automatically decide if hardware or
+software breakpoints should be used, depending on whether the
+breakpoint address is read-only or read-write. This applies to
+breakpoints set with the `break' command as well as to internal
+breakpoints set by commands like `next' and `finish'. For breakpoints
+set with `hbreak', GDB will always use hardware breakpoints.
+
+ You can control this automatic behaviour with the following
+commands::
+
+`set breakpoint auto-hw on'
+ This is the default behavior. When GDB sets a breakpoint, it will
+ try to use the target memory map to decide if software or hardware
+ breakpoint must be used.
+
+`set breakpoint auto-hw off'
+ This indicates GDB should not automatically select breakpoint
+ type. If the target provides a memory map, GDB will warn when
+ trying to set software breakpoint at a read-only address.
+
+ GDB normally implements breakpoints by replacing the program code at
+the breakpoint address with a special instruction, which, when
+executed, given control to the debugger. By default, the program code
+is so modified only when the program is resumed. As soon as the
+program stops, GDB restores the original instructions. This behaviour
+guards against leaving breakpoints inserted in the target should gdb
+abrubptly disconnect. However, with slow remote targets, inserting and
+removing breakpoint can reduce the performance. This behavior can be
+controlled with the following commands::
+
+`set breakpoint always-inserted off'
+ All breakpoints, including newly added by the user, are inserted in
+ the target only when the target is resumed. All breakpoints are
+ removed from the target when it stops.
+
+`set breakpoint always-inserted on'
+ Causes all breakpoints to be inserted in the target at all times.
+ If the user adds a new breakpoint, or changes an existing
+ breakpoint, the breakpoints in the target are updated immediately.
+ A breakpoint is removed from the target only when breakpoint
+ itself is removed.
+
+`set breakpoint always-inserted auto'
+ This is the default mode. If GDB is controlling the inferior in
+ non-stop mode (*note Non-Stop Mode::), gdb behaves as if
+ `breakpoint always-inserted' mode is on. If GDB is controlling
+ the inferior in all-stop mode, GDB behaves as if `breakpoint
+ always-inserted' mode is off.
+
+ GDB itself sometimes sets breakpoints in your program for special
+purposes, such as proper handling of `longjmp' (in C programs). These
+internal breakpoints are assigned negative numbers, starting with `-1';
+`info breakpoints' does not display them. You can see these
+breakpoints with the GDB maintenance command `maint info breakpoints'
+(*note maint info breakpoints::).
+
+ ---------- Footnotes ----------
+
+ (1) As of this writing, multiple-location breakpoints work only if
+there's line number information for all the locations. This means that
+they will generally not work in system libraries, unless you have debug
+info with line numbers for them.
+
+
+File: gdb.info, Node: Set Watchpoints, Next: Set Catchpoints, Prev: Set Breaks, Up: Breakpoints
+
+5.1.2 Setting Watchpoints
+-------------------------
+
+You can use a watchpoint to stop execution whenever the value of an
+expression changes, without having to predict a particular place where
+this may happen. (This is sometimes called a "data breakpoint".) The
+expression may be as simple as the value of a single variable, or as
+complex as many variables combined by operators. Examples include:
+
+ * A reference to the value of a single variable.
+
+ * An address cast to an appropriate data type. For example, `*(int
+ *)0x12345678' will watch a 4-byte region at the specified address
+ (assuming an `int' occupies 4 bytes).
+
+ * An arbitrarily complex expression, such as `a*b + c/d'. The
+ expression can use any operators valid in the program's native
+ language (*note Languages::).
+
+ You can set a watchpoint on an expression even if the expression can
+not be evaluated yet. For instance, you can set a watchpoint on
+`*global_ptr' before `global_ptr' is initialized. GDB will stop when
+your program sets `global_ptr' and the expression produces a valid
+value. If the expression becomes valid in some other way than changing
+a variable (e.g. if the memory pointed to by `*global_ptr' becomes
+readable as the result of a `malloc' call), GDB may not stop until the
+next time the expression changes.
+
+ Depending on your system, watchpoints may be implemented in software
+or hardware. GDB does software watchpointing by single-stepping your
+program and testing the variable's value each time, which is hundreds of
+times slower than normal execution. (But this may still be worth it, to
+catch errors where you have no clue what part of your program is the
+culprit.)
+
+ On some systems, such as HP-UX, PowerPC, GNU/Linux and most other
+x86-based targets, GDB includes support for hardware watchpoints, which
+do not slow down the running of your program.
+
+`watch [-l|-location] EXPR [thread THREADNUM]'
+ Set a watchpoint for an expression. GDB will break when the
+ expression EXPR is written into by the program and its value
+ changes. The simplest (and the most popular) use of this command
+ is to watch the value of a single variable:
+
+ (gdb) watch foo
+
+ If the command includes a `[thread THREADNUM]' clause, GDB breaks
+ only when the thread identified by THREADNUM changes the value of
+ EXPR. If any other threads change the value of EXPR, GDB will not
+ break. Note that watchpoints restricted to a single thread in
+ this way only work with Hardware Watchpoints.
+
+ Ordinarily a watchpoint respects the scope of variables in EXPR
+ (see below). The `-location' argument tells GDB to instead watch
+ the memory referred to by EXPR. In this case, GDB will evaluate
+ EXPR, take the address of the result, and watch the memory at that
+ address. The type of the result is used to determine the size of
+ the watched memory. If the expression's result does not have an
+ address, then GDB will print an error.
+
+`rwatch [-l|-location] EXPR [thread THREADNUM]'
+ Set a watchpoint that will break when the value of EXPR is read by
+ the program.
+
+`awatch [-l|-location] EXPR [thread THREADNUM]'
+ Set a watchpoint that will break when EXPR is either read from or
+ written into by the program.
+
+`info watchpoints [N...]'
+ This command prints a list of watchpoints, using the same format as
+ `info break' (*note Set Breaks::).
+
+ If you watch for a change in a numerically entered address you need
+to dereference it, as the address itself is just a constant number
+which will never change. GDB refuses to create a watchpoint that
+watches a never-changing value:
+
+ (gdb) watch 0x600850
+ Cannot watch constant value 0x600850.
+ (gdb) watch *(int *) 0x600850
+ Watchpoint 1: *(int *) 6293584
+
+ GDB sets a "hardware watchpoint" if possible. Hardware watchpoints
+execute very quickly, and the debugger reports a change in value at the
+exact instruction where the change occurs. If GDB cannot set a
+hardware watchpoint, it sets a software watchpoint, which executes more
+slowly and reports the change in value at the next _statement_, not the
+instruction, after the change occurs.
+
+ You can force GDB to use only software watchpoints with the `set
+can-use-hw-watchpoints 0' command. With this variable set to zero, GDB
+will never try to use hardware watchpoints, even if the underlying
+system supports them. (Note that hardware-assisted watchpoints that
+were set _before_ setting `can-use-hw-watchpoints' to zero will still
+use the hardware mechanism of watching expression values.)
+
+`set can-use-hw-watchpoints'
+ Set whether or not to use hardware watchpoints.
+
+`show can-use-hw-watchpoints'
+ Show the current mode of using hardware watchpoints.
+
+ For remote targets, you can restrict the number of hardware
+watchpoints GDB will use, see *note set remote
+hardware-breakpoint-limit::.
+
+ When you issue the `watch' command, GDB reports
+
+ Hardware watchpoint NUM: EXPR
+
+if it was able to set a hardware watchpoint.
+
+ Currently, the `awatch' and `rwatch' commands can only set hardware
+watchpoints, because accesses to data that don't change the value of
+the watched expression cannot be detected without examining every
+instruction as it is being executed, and GDB does not do that
+currently. If GDB finds that it is unable to set a hardware breakpoint
+with the `awatch' or `rwatch' command, it will print a message like
+this:
+
+ Expression cannot be implemented with read/access watchpoint.
+
+ Sometimes, GDB cannot set a hardware watchpoint because the data
+type of the watched expression is wider than what a hardware watchpoint
+on the target machine can handle. For example, some systems can only
+watch regions that are up to 4 bytes wide; on such systems you cannot
+set hardware watchpoints for an expression that yields a
+double-precision floating-point number (which is typically 8 bytes
+wide). As a work-around, it might be possible to break the large region
+into a series of smaller ones and watch them with separate watchpoints.
+
+ If you set too many hardware watchpoints, GDB might be unable to
+insert all of them when you resume the execution of your program.
+Since the precise number of active watchpoints is unknown until such
+time as the program is about to be resumed, GDB might not be able to
+warn you about this when you set the watchpoints, and the warning will
+be printed only when the program is resumed:
+
+ Hardware watchpoint NUM: Could not insert watchpoint
+
+If this happens, delete or disable some of the watchpoints.
+
+ Watching complex expressions that reference many variables can also
+exhaust the resources available for hardware-assisted watchpoints.
+That's because GDB needs to watch every variable in the expression with
+separately allocated resources.
+
+ If you call a function interactively using `print' or `call', any
+watchpoints you have set will be inactive until GDB reaches another
+kind of breakpoint or the call completes.
+
+ GDB automatically deletes watchpoints that watch local (automatic)
+variables, or expressions that involve such variables, when they go out
+of scope, that is, when the execution leaves the block in which these
+variables were defined. In particular, when the program being debugged
+terminates, _all_ local variables go out of scope, and so only
+watchpoints that watch global variables remain set. If you rerun the
+program, you will need to set all such watchpoints again. One way of
+doing that would be to set a code breakpoint at the entry to the `main'
+function and when it breaks, set all the watchpoints.
+
+ In multi-threaded programs, watchpoints will detect changes to the
+watched expression from every thread.
+
+ _Warning:_ In multi-threaded programs, software watchpoints have
+ only limited usefulness. If GDB creates a software watchpoint, it
+ can only watch the value of an expression _in a single thread_.
+ If you are confident that the expression can only change due to
+ the current thread's activity (and if you are also confident that
+ no other thread can become current), then you can use software
+ watchpoints as usual. However, GDB may not notice when a
+ non-current thread's activity changes the expression. (Hardware
+ watchpoints, in contrast, watch an expression in all threads.)
+
+ *Note set remote hardware-watchpoint-limit::.
+
+
+File: gdb.info, Node: Set Catchpoints, Next: Delete Breaks, Prev: Set Watchpoints, Up: Breakpoints
+
+5.1.3 Setting Catchpoints
+-------------------------
+
+You can use "catchpoints" to cause the debugger to stop for certain
+kinds of program events, such as C++ exceptions or the loading of a
+shared library. Use the `catch' command to set a catchpoint.
+
+`catch EVENT'
+ Stop when EVENT occurs. EVENT can be any of the following:
+ `throw'
+ The throwing of a C++ exception.
+
+ `catch'
+ The catching of a C++ exception.
+
+ `exception'
+ An Ada exception being raised. If an exception name is
+ specified at the end of the command (eg `catch exception
+ Program_Error'), the debugger will stop only when this
+ specific exception is raised. Otherwise, the debugger stops
+ execution when any Ada exception is raised.
+
+ When inserting an exception catchpoint on a user-defined
+ exception whose name is identical to one of the exceptions
+ defined by the language, the fully qualified name must be
+ used as the exception name. Otherwise, GDB will assume that
+ it should stop on the pre-defined exception rather than the
+ user-defined one. For instance, assuming an exception called
+ `Constraint_Error' is defined in package `Pck', then the
+ command to use to catch such exceptions is `catch exception
+ Pck.Constraint_Error'.
+
+ `exception unhandled'
+ An exception that was raised but is not handled by the
+ program.
+
+ `assert'
+ A failed Ada assertion.
+
+ `exec'
+ A call to `exec'. This is currently only available for HP-UX
+ and GNU/Linux.
+
+ `syscall'
+ `syscall [NAME | NUMBER] ...'
+ A call to or return from a system call, a.k.a. "syscall". A
+ syscall is a mechanism for application programs to request a
+ service from the operating system (OS) or one of the OS
+ system services. GDB can catch some or all of the syscalls
+ issued by the debuggee, and show the related information for
+ each syscall. If no argument is specified, calls to and
+ returns from all system calls will be caught.
+
+ NAME can be any system call name that is valid for the
+ underlying OS. Just what syscalls are valid depends on the
+ OS. On GNU and Unix systems, you can find the full list of
+ valid syscall names on `/usr/include/asm/unistd.h'.
+
+ Normally, GDB knows in advance which syscalls are valid for
+ each OS, so you can use the GDB command-line completion
+ facilities (*note command completion: Completion.) to list the
+ available choices.
+
+ You may also specify the system call numerically. A syscall's
+ number is the value passed to the OS's syscall dispatcher to
+ identify the requested service. When you specify the syscall
+ by its name, GDB uses its database of syscalls to convert the
+ name into the corresponding numeric code, but using the
+ number directly may be useful if GDB's database does not have
+ the complete list of syscalls on your system (e.g., because
+ GDB lags behind the OS upgrades).
+
+ The example below illustrates how this command works if you
+ don't provide arguments to it:
+
+ (gdb) catch syscall
+ Catchpoint 1 (syscall)
+ (gdb) r
+ Starting program: /tmp/catch-syscall
+
+ Catchpoint 1 (call to syscall 'close'), \
+ 0xffffe424 in __kernel_vsyscall ()
+ (gdb) c
+ Continuing.
+
+ Catchpoint 1 (returned from syscall 'close'), \
+ 0xffffe424 in __kernel_vsyscall ()
+ (gdb)
+
+ Here is an example of catching a system call by name:
+
+ (gdb) catch syscall chroot
+ Catchpoint 1 (syscall 'chroot' [61])
+ (gdb) r
+ Starting program: /tmp/catch-syscall
+
+ Catchpoint 1 (call to syscall 'chroot'), \
+ 0xffffe424 in __kernel_vsyscall ()
+ (gdb) c
+ Continuing.
+
+ Catchpoint 1 (returned from syscall 'chroot'), \
+ 0xffffe424 in __kernel_vsyscall ()
+ (gdb)
+
+ An example of specifying a system call numerically. In the
+ case below, the syscall number has a corresponding entry in
+ the XML file, so GDB finds its name and prints it:
+
+ (gdb) catch syscall 252
+ Catchpoint 1 (syscall(s) 'exit_group')
+ (gdb) r
+ Starting program: /tmp/catch-syscall
+
+ Catchpoint 1 (call to syscall 'exit_group'), \
+ 0xffffe424 in __kernel_vsyscall ()
+ (gdb) c
+ Continuing.
+
+ Program exited normally.
+ (gdb)
+
+ However, there can be situations when there is no
+ corresponding name in XML file for that syscall number. In
+ this case, GDB prints a warning message saying that it was
+ not able to find the syscall name, but the catchpoint will be
+ set anyway. See the example below:
+
+ (gdb) catch syscall 764
+ warning: The number '764' does not represent a known syscall.
+ Catchpoint 2 (syscall 764)
+ (gdb)
+
+ If you configure GDB using the `--without-expat' option, it
+ will not be able to display syscall names. Also, if your
+ architecture does not have an XML file describing its system
+ calls, you will not be able to see the syscall names. It is
+ important to notice that these two features are used for
+ accessing the syscall name database. In either case, you
+ will see a warning like this:
+
+ (gdb) catch syscall
+ warning: Could not open "syscalls/i386-linux.xml"
+ warning: Could not load the syscall XML file 'syscalls/i386-linux.xml'.
+ GDB will not be able to display syscall names.
+ Catchpoint 1 (syscall)
+ (gdb)
+
+ Of course, the file name will change depending on your
+ architecture and system.
+
+ Still using the example above, you can also try to catch a
+ syscall by its number. In this case, you would see something
+ like:
+
+ (gdb) catch syscall 252
+ Catchpoint 1 (syscall(s) 252)
+
+ Again, in this case GDB would not be able to display
+ syscall's names.
+
+ `fork'
+ A call to `fork'. This is currently only available for HP-UX
+ and GNU/Linux.
+
+ `vfork'
+ A call to `vfork'. This is currently only available for HP-UX
+ and GNU/Linux.
+
+
+`tcatch EVENT'
+ Set a catchpoint that is enabled only for one stop. The
+ catchpoint is automatically deleted after the first time the event
+ is caught.
+
+
+ Use the `info break' command to list the current catchpoints.
+
+ There are currently some limitations to C++ exception handling
+(`catch throw' and `catch catch') in GDB:
+
+ * If you call a function interactively, GDB normally returns control
+ to you when the function has finished executing. If the call
+ raises an exception, however, the call may bypass the mechanism
+ that returns control to you and cause your program either to abort
+ or to simply continue running until it hits a breakpoint, catches
+ a signal that GDB is listening for, or exits. This is the case
+ even if you set a catchpoint for the exception; catchpoints on
+ exceptions are disabled within interactive calls.
+
+ * You cannot raise an exception interactively.
+
+ * You cannot install an exception handler interactively.
+
+ Sometimes `catch' is not the best way to debug exception handling:
+if you need to know exactly where an exception is raised, it is better
+to stop _before_ the exception handler is called, since that way you
+can see the stack before any unwinding takes place. If you set a
+breakpoint in an exception handler instead, it may not be easy to find
+out where the exception was raised.
+
+ To stop just before an exception handler is called, you need some
+knowledge of the implementation. In the case of GNU C++, exceptions are
+raised by calling a library function named `__raise_exception' which
+has the following ANSI C interface:
+
+ /* ADDR is where the exception identifier is stored.
+ ID is the exception identifier. */
+ void __raise_exception (void **addr, void *id);
+
+To make the debugger catch all exceptions before any stack unwinding
+takes place, set a breakpoint on `__raise_exception' (*note
+Breakpoints; Watchpoints; and Exceptions: Breakpoints.).
+
+ With a conditional breakpoint (*note Break Conditions: Conditions.)
+that depends on the value of ID, you can stop your program when a
+specific exception is raised. You can use multiple conditional
+breakpoints to stop your program when any of a number of exceptions are
+raised.
+
+
+File: gdb.info, Node: Delete Breaks, Next: Disabling, Prev: Set Catchpoints, Up: Breakpoints
+
+5.1.4 Deleting Breakpoints
+--------------------------
+
+It is often necessary to eliminate a breakpoint, watchpoint, or
+catchpoint once it has done its job and you no longer want your program
+to stop there. This is called "deleting" the breakpoint. A breakpoint
+that has been deleted no longer exists; it is forgotten.
+
+ With the `clear' command you can delete breakpoints according to
+where they are in your program. With the `delete' command you can
+delete individual breakpoints, watchpoints, or catchpoints by specifying
+their breakpoint numbers.
+
+ It is not necessary to delete a breakpoint to proceed past it. GDB
+automatically ignores breakpoints on the first instruction to be
+executed when you continue execution without changing the execution
+address.
+
+`clear'
+ Delete any breakpoints at the next instruction to be executed in
+ the selected stack frame (*note Selecting a Frame: Selection.).
+ When the innermost frame is selected, this is a good way to delete
+ a breakpoint where your program just stopped.
+
+`clear LOCATION'
+ Delete any breakpoints set at the specified LOCATION. *Note
+ Specify Location::, for the various forms of LOCATION; the most
+ useful ones are listed below:
+
+ `clear FUNCTION'
+ `clear FILENAME:FUNCTION'
+ Delete any breakpoints set at entry to the named FUNCTION.
+
+ `clear LINENUM'
+ `clear FILENAME:LINENUM'
+ Delete any breakpoints set at or within the code of the
+ specified LINENUM of the specified FILENAME.
+
+`delete [breakpoints] [RANGE...]'
+ Delete the breakpoints, watchpoints, or catchpoints of the
+ breakpoint ranges specified as arguments. If no argument is
+ specified, delete all breakpoints (GDB asks confirmation, unless
+ you have `set confirm off'). You can abbreviate this command as
+ `d'.
+
+
+File: gdb.info, Node: Disabling, Next: Conditions, Prev: Delete Breaks, Up: Breakpoints
+
+5.1.5 Disabling Breakpoints
+---------------------------
+
+Rather than deleting a breakpoint, watchpoint, or catchpoint, you might
+prefer to "disable" it. This makes the breakpoint inoperative as if it
+had been deleted, but remembers the information on the breakpoint so
+that you can "enable" it again later.
+
+ You disable and enable breakpoints, watchpoints, and catchpoints with
+the `enable' and `disable' commands, optionally specifying one or more
+breakpoint numbers as arguments. Use `info break' to print a list of
+all breakpoints, watchpoints, and catchpoints if you do not know which
+numbers to use.
+
+ Disabling and enabling a breakpoint that has multiple locations
+affects all of its locations.
+
+ A breakpoint, watchpoint, or catchpoint can have any of four
+different states of enablement:
+
+ * Enabled. The breakpoint stops your program. A breakpoint set
+ with the `break' command starts out in this state.
+
+ * Disabled. The breakpoint has no effect on your program.
+
+ * Enabled once. The breakpoint stops your program, but then becomes
+ disabled.
+
+ * Enabled for deletion. The breakpoint stops your program, but
+ immediately after it does so it is deleted permanently. A
+ breakpoint set with the `tbreak' command starts out in this state.
+
+ You can use the following commands to enable or disable breakpoints,
+watchpoints, and catchpoints:
+
+`disable [breakpoints] [RANGE...]'
+ Disable the specified breakpoints--or all breakpoints, if none are
+ listed. A disabled breakpoint has no effect but is not forgotten.
+ All options such as ignore-counts, conditions and commands are
+ remembered in case the breakpoint is enabled again later. You may
+ abbreviate `disable' as `dis'.
+
+`enable [breakpoints] [RANGE...]'
+ Enable the specified breakpoints (or all defined breakpoints).
+ They become effective once again in stopping your program.
+
+`enable [breakpoints] once RANGE...'
+ Enable the specified breakpoints temporarily. GDB disables any of
+ these breakpoints immediately after stopping your program.
+
+`enable [breakpoints] delete RANGE...'
+ Enable the specified breakpoints to work once, then die. GDB
+ deletes any of these breakpoints as soon as your program stops
+ there. Breakpoints set by the `tbreak' command start out in this
+ state.
+
+ Except for a breakpoint set with `tbreak' (*note Setting
+Breakpoints: Set Breaks.), breakpoints that you set are initially
+enabled; subsequently, they become disabled or enabled only when you
+use one of the commands above. (The command `until' can set and delete
+a breakpoint of its own, but it does not change the state of your other
+breakpoints; see *note Continuing and Stepping: Continuing and
+Stepping.)
+
+
+File: gdb.info, Node: Conditions, Next: Break Commands, Prev: Disabling, Up: Breakpoints
+
+5.1.6 Break Conditions
+----------------------
+
+The simplest sort of breakpoint breaks every time your program reaches a
+specified place. You can also specify a "condition" for a breakpoint.
+A condition is just a Boolean expression in your programming language
+(*note Expressions: Expressions.). A breakpoint with a condition
+evaluates the expression each time your program reaches it, and your
+program stops only if the condition is _true_.
+
+ This is the converse of using assertions for program validation; in
+that situation, you want to stop when the assertion is violated--that
+is, when the condition is false. In C, if you want to test an
+assertion expressed by the condition ASSERT, you should set the
+condition `! ASSERT' on the appropriate breakpoint.
+
+ Conditions are also accepted for watchpoints; you may not need them,
+since a watchpoint is inspecting the value of an expression anyhow--but
+it might be simpler, say, to just set a watchpoint on a variable name,
+and specify a condition that tests whether the new value is an
+interesting one.
+
+ Break conditions can have side effects, and may even call functions
+in your program. This can be useful, for example, to activate functions
+that log program progress, or to use your own print functions to format
+special data structures. The effects are completely predictable unless
+there is another enabled breakpoint at the same address. (In that
+case, GDB might see the other breakpoint first and stop your program
+without checking the condition of this one.) Note that breakpoint
+commands are usually more convenient and flexible than break conditions
+for the purpose of performing side effects when a breakpoint is reached
+(*note Breakpoint Command Lists: Break Commands.).
+
+ Break conditions can be specified when a breakpoint is set, by using
+`if' in the arguments to the `break' command. *Note Setting
+Breakpoints: Set Breaks. They can also be changed at any time with the
+`condition' command.
+
+ You can also use the `if' keyword with the `watch' command. The
+`catch' command does not recognize the `if' keyword; `condition' is the
+only way to impose a further condition on a catchpoint.
+
+`condition BNUM EXPRESSION'
+ Specify EXPRESSION as the break condition for breakpoint,
+ watchpoint, or catchpoint number BNUM. After you set a condition,
+ breakpoint BNUM stops your program only if the value of EXPRESSION
+ is true (nonzero, in C). When you use `condition', GDB checks
+ EXPRESSION immediately for syntactic correctness, and to determine
+ whether symbols in it have referents in the context of your
+ breakpoint. If EXPRESSION uses symbols not referenced in the
+ context of the breakpoint, GDB prints an error message:
+
+ No symbol "foo" in current context.
+
+ GDB does not actually evaluate EXPRESSION at the time the
+ `condition' command (or a command that sets a breakpoint with a
+ condition, like `break if ...') is given, however. *Note
+ Expressions: Expressions.
+
+`condition BNUM'
+ Remove the condition from breakpoint number BNUM. It becomes an
+ ordinary unconditional breakpoint.
+
+ A special case of a breakpoint condition is to stop only when the
+breakpoint has been reached a certain number of times. This is so
+useful that there is a special way to do it, using the "ignore count"
+of the breakpoint. Every breakpoint has an ignore count, which is an
+integer. Most of the time, the ignore count is zero, and therefore has
+no effect. But if your program reaches a breakpoint whose ignore count
+is positive, then instead of stopping, it just decrements the ignore
+count by one and continues. As a result, if the ignore count value is
+N, the breakpoint does not stop the next N times your program reaches
+it.
+
+`ignore BNUM COUNT'
+ Set the ignore count of breakpoint number BNUM to COUNT. The next
+ COUNT times the breakpoint is reached, your program's execution
+ does not stop; other than to decrement the ignore count, GDB takes
+ no action.
+
+ To make the breakpoint stop the next time it is reached, specify a
+ count of zero.
+
+ When you use `continue' to resume execution of your program from a
+ breakpoint, you can specify an ignore count directly as an
+ argument to `continue', rather than using `ignore'. *Note
+ Continuing and Stepping: Continuing and Stepping.
+
+ If a breakpoint has a positive ignore count and a condition, the
+ condition is not checked. Once the ignore count reaches zero, GDB
+ resumes checking the condition.
+
+ You could achieve the effect of the ignore count with a condition
+ such as `$foo-- <= 0' using a debugger convenience variable that
+ is decremented each time. *Note Convenience Variables:
+ Convenience Vars.
+
+ Ignore counts apply to breakpoints, watchpoints, and catchpoints.
+
+
+File: gdb.info, Node: Break Commands, Next: Save Breakpoints, Prev: Conditions, Up: Breakpoints
+
+5.1.7 Breakpoint Command Lists
+------------------------------
+
+You can give any breakpoint (or watchpoint or catchpoint) a series of
+commands to execute when your program stops due to that breakpoint. For
+example, you might want to print the values of certain expressions, or
+enable other breakpoints.
+
+`commands [RANGE...]'
+`... COMMAND-LIST ...'
+`end'
+ Specify a list of commands for the given breakpoints. The commands
+ themselves appear on the following lines. Type a line containing
+ just `end' to terminate the commands.
+
+ To remove all commands from a breakpoint, type `commands' and
+ follow it immediately with `end'; that is, give no commands.
+
+ With no argument, `commands' refers to the last breakpoint,
+ watchpoint, or catchpoint set (not to the breakpoint most recently
+ encountered). If the most recent breakpoints were set with a
+ single command, then the `commands' will apply to all the
+ breakpoints set by that command. This applies to breakpoints set
+ by `rbreak', and also applies when a single `break' command
+ creates multiple breakpoints (*note Ambiguous Expressions:
+ Ambiguous Expressions.).
+
+ Pressing <RET> as a means of repeating the last GDB command is
+disabled within a COMMAND-LIST.
+
+ You can use breakpoint commands to start your program up again.
+Simply use the `continue' command, or `step', or any other command that
+resumes execution.
+
+ Any other commands in the command list, after a command that resumes
+execution, are ignored. This is because any time you resume execution
+(even with a simple `next' or `step'), you may encounter another
+breakpoint--which could have its own command list, leading to
+ambiguities about which list to execute.
+
+ If the first command you specify in a command list is `silent', the
+usual message about stopping at a breakpoint is not printed. This may
+be desirable for breakpoints that are to print a specific message and
+then continue. If none of the remaining commands print anything, you
+see no sign that the breakpoint was reached. `silent' is meaningful
+only at the beginning of a breakpoint command list.
+
+ The commands `echo', `output', and `printf' allow you to print
+precisely controlled output, and are often useful in silent
+breakpoints. *Note Commands for Controlled Output: Output.
+
+ For example, here is how you could use breakpoint commands to print
+the value of `x' at entry to `foo' whenever `x' is positive.
+
+ break foo if x>0
+ commands
+ silent
+ printf "x is %d\n",x
+ cont
+ end
+
+ One application for breakpoint commands is to compensate for one bug
+so you can test for another. Put a breakpoint just after the erroneous
+line of code, give it a condition to detect the case in which something
+erroneous has been done, and give it commands to assign correct values
+to any variables that need them. End with the `continue' command so
+that your program does not stop, and start with the `silent' command so
+that no output is produced. Here is an example:
+
+ break 403
+ commands
+ silent
+ set x = y + 4
+ cont
+ end
+
+
+File: gdb.info, Node: Save Breakpoints, Next: Error in Breakpoints, Prev: Break Commands, Up: Breakpoints
+
+5.1.8 How to save breakpoints to a file
+---------------------------------------
+
+To save breakpoint definitions to a file use the `save breakpoints'
+command.
+
+`save breakpoints [FILENAME]'
+ This command saves all current breakpoint definitions together with
+ their commands and ignore counts, into a file `FILENAME' suitable
+ for use in a later debugging session. This includes all types of
+ breakpoints (breakpoints, watchpoints, catchpoints, tracepoints).
+ To read the saved breakpoint definitions, use the `source' command
+ (*note Command Files::). Note that watchpoints with expressions
+ involving local variables may fail to be recreated because it may
+ not be possible to access the context where the watchpoint is
+ valid anymore. Because the saved breakpoint definitions are
+ simply a sequence of GDB commands that recreate the breakpoints,
+ you can edit the file in your favorite editing program, and remove
+ the breakpoint definitions you're not interested in, or that can
+ no longer be recreated.
+
+
+File: gdb.info, Node: Error in Breakpoints, Next: Breakpoint-related Warnings, Prev: Save Breakpoints, Up: Breakpoints
+
+5.1.9 "Cannot insert breakpoints"
+---------------------------------
+
+If you request too many active hardware-assisted breakpoints and
+watchpoints, you will see this error message:
+
+ Stopped; cannot insert breakpoints.
+ You may have requested too many hardware breakpoints and watchpoints.
+
+This message is printed when you attempt to resume the program, since
+only then GDB knows exactly how many hardware breakpoints and
+watchpoints it needs to insert.
+
+ When this message is printed, you need to disable or remove some of
+the hardware-assisted breakpoints and watchpoints, and then continue.
+
+
+File: gdb.info, Node: Breakpoint-related Warnings, Prev: Error in Breakpoints, Up: Breakpoints
+
+5.1.10 "Breakpoint address adjusted..."
+---------------------------------------
+
+Some processor architectures place constraints on the addresses at
+which breakpoints may be placed. For architectures thus constrained,
+GDB will attempt to adjust the breakpoint's address to comply with the
+constraints dictated by the architecture.
+
+ One example of such an architecture is the Fujitsu FR-V. The FR-V is
+a VLIW architecture in which a number of RISC-like instructions may be
+bundled together for parallel execution. The FR-V architecture
+constrains the location of a breakpoint instruction within such a
+bundle to the instruction with the lowest address. GDB honors this
+constraint by adjusting a breakpoint's address to the first in the
+bundle.
+
+ It is not uncommon for optimized code to have bundles which contain
+instructions from different source statements, thus it may happen that
+a breakpoint's address will be adjusted from one source statement to
+another. Since this adjustment may significantly alter GDB's
+breakpoint related behavior from what the user expects, a warning is
+printed when the breakpoint is first set and also when the breakpoint
+is hit.
+
+ A warning like the one below is printed when setting a breakpoint
+that's been subject to address adjustment:
+
+ warning: Breakpoint address adjusted from 0x00010414 to 0x00010410.
+
+ Such warnings are printed both for user settable and GDB's internal
+breakpoints. If you see one of these warnings, you should verify that
+a breakpoint set at the adjusted address will have the desired affect.
+If not, the breakpoint in question may be removed and other breakpoints
+may be set which will have the desired behavior. E.g., it may be
+sufficient to place the breakpoint at a later instruction. A
+conditional breakpoint may also be useful in some cases to prevent the
+breakpoint from triggering too often.
+
+ GDB will also issue a warning when stopping at one of these adjusted
+breakpoints:
+
+ warning: Breakpoint 1 address previously adjusted from 0x00010414
+ to 0x00010410.
+
+ When this warning is encountered, it may be too late to take remedial
+action except in cases where the breakpoint is hit earlier or more
+frequently than expected.
+
+
+File: gdb.info, Node: Continuing and Stepping, Next: Signals, Prev: Breakpoints, Up: Stopping
+
+5.2 Continuing and Stepping
+===========================
+
+"Continuing" means resuming program execution until your program
+completes normally. In contrast, "stepping" means executing just one
+more "step" of your program, where "step" may mean either one line of
+source code, or one machine instruction (depending on what particular
+command you use). Either when continuing or when stepping, your
+program may stop even sooner, due to a breakpoint or a signal. (If it
+stops due to a signal, you may want to use `handle', or use `signal 0'
+to resume execution. *Note Signals: Signals.)
+
+`continue [IGNORE-COUNT]'
+`c [IGNORE-COUNT]'
+`fg [IGNORE-COUNT]'
+ Resume program execution, at the address where your program last
+ stopped; any breakpoints set at that address are bypassed. The
+ optional argument IGNORE-COUNT allows you to specify a further
+ number of times to ignore a breakpoint at this location; its
+ effect is like that of `ignore' (*note Break Conditions:
+ Conditions.).
+
+ The argument IGNORE-COUNT is meaningful only when your program
+ stopped due to a breakpoint. At other times, the argument to
+ `continue' is ignored.
+
+ The synonyms `c' and `fg' (for "foreground", as the debugged
+ program is deemed to be the foreground program) are provided
+ purely for convenience, and have exactly the same behavior as
+ `continue'.
+
+ To resume execution at a different place, you can use `return'
+(*note Returning from a Function: Returning.) to go back to the calling
+function; or `jump' (*note Continuing at a Different Address: Jumping.)
+to go to an arbitrary location in your program.
+
+ A typical technique for using stepping is to set a breakpoint (*note
+Breakpoints; Watchpoints; and Catchpoints: Breakpoints.) at the
+beginning of the function or the section of your program where a problem
+is believed to lie, run your program until it stops at that breakpoint,
+and then step through the suspect area, examining the variables that are
+interesting, until you see the problem happen.
+
+`step'
+ Continue running your program until control reaches a different
+ source line, then stop it and return control to GDB. This command
+ is abbreviated `s'.
+
+ _Warning:_ If you use the `step' command while control is
+ within a function that was compiled without debugging
+ information, execution proceeds until control reaches a
+ function that does have debugging information. Likewise, it
+ will not step into a function which is compiled without
+ debugging information. To step through functions without
+ debugging information, use the `stepi' command, described
+ below.
+
+ The `step' command only stops at the first instruction of a source
+ line. This prevents the multiple stops that could otherwise occur
+ in `switch' statements, `for' loops, etc. `step' continues to
+ stop if a function that has debugging information is called within
+ the line. In other words, `step' _steps inside_ any functions
+ called within the line.
+
+ Also, the `step' command only enters a function if there is line
+ number information for the function. Otherwise it acts like the
+ `next' command. This avoids problems when using `cc -gl' on MIPS
+ machines. Previously, `step' entered subroutines if there was any
+ debugging information about the routine.
+
+`step COUNT'
+ Continue running as in `step', but do so COUNT times. If a
+ breakpoint is reached, or a signal not related to stepping occurs
+ before COUNT steps, stepping stops right away.
+
+`next [COUNT]'
+ Continue to the next source line in the current (innermost) stack
+ frame. This is similar to `step', but function calls that appear
+ within the line of code are executed without stopping. Execution
+ stops when control reaches a different line of code at the
+ original stack level that was executing when you gave the `next'
+ command. This command is abbreviated `n'.
+
+ An argument COUNT is a repeat count, as for `step'.
+
+ The `next' command only stops at the first instruction of a source
+ line. This prevents multiple stops that could otherwise occur in
+ `switch' statements, `for' loops, etc.
+
+`set step-mode'
+`set step-mode on'
+ The `set step-mode on' command causes the `step' command to stop
+ at the first instruction of a function which contains no debug line
+ information rather than stepping over it.
+
+ This is useful in cases where you may be interested in inspecting
+ the machine instructions of a function which has no symbolic info
+ and do not want GDB to automatically skip over this function.
+
+`set step-mode off'
+ Causes the `step' command to step over any functions which
+ contains no debug information. This is the default.
+
+`show step-mode'
+ Show whether GDB will stop in or step over functions without
+ source line debug information.
+
+`finish'
+ Continue running until just after function in the selected stack
+ frame returns. Print the returned value (if any). This command
+ can be abbreviated as `fin'.
+
+ Contrast this with the `return' command (*note Returning from a
+ Function: Returning.).
+
+`until'
+`u'
+ Continue running until a source line past the current line, in the
+ current stack frame, is reached. This command is used to avoid
+ single stepping through a loop more than once. It is like the
+ `next' command, except that when `until' encounters a jump, it
+ automatically continues execution until the program counter is
+ greater than the address of the jump.
+
+ This means that when you reach the end of a loop after single
+ stepping though it, `until' makes your program continue execution
+ until it exits the loop. In contrast, a `next' command at the end
+ of a loop simply steps back to the beginning of the loop, which
+ forces you to step through the next iteration.
+
+ `until' always stops your program if it attempts to exit the
+ current stack frame.
+
+ `until' may produce somewhat counterintuitive results if the order
+ of machine code does not match the order of the source lines. For
+ example, in the following excerpt from a debugging session, the `f'
+ (`frame') command shows that execution is stopped at line `206';
+ yet when we use `until', we get to line `195':
+
+ (gdb) f
+ #0 main (argc=4, argv=0xf7fffae8) at m4.c:206
+ 206 expand_input();
+ (gdb) until
+ 195 for ( ; argc > 0; NEXTARG) {
+
+ This happened because, for execution efficiency, the compiler had
+ generated code for the loop closure test at the end, rather than
+ the start, of the loop--even though the test in a C `for'-loop is
+ written before the body of the loop. The `until' command appeared
+ to step back to the beginning of the loop when it advanced to this
+ expression; however, it has not really gone to an earlier
+ statement--not in terms of the actual machine code.
+
+ `until' with no argument works by means of single instruction
+ stepping, and hence is slower than `until' with an argument.
+
+`until LOCATION'
+`u LOCATION'
+ Continue running your program until either the specified location
+ is reached, or the current stack frame returns. LOCATION is any of
+ the forms described in *note Specify Location::. This form of the
+ command uses temporary breakpoints, and hence is quicker than
+ `until' without an argument. The specified location is actually
+ reached only if it is in the current frame. This implies that
+ `until' can be used to skip over recursive function invocations.
+ For instance in the code below, if the current location is line
+ `96', issuing `until 99' will execute the program up to line `99'
+ in the same invocation of factorial, i.e., after the inner
+ invocations have returned.
+
+ 94 int factorial (int value)
+ 95 {
+ 96 if (value > 1) {
+ 97 value *= factorial (value - 1);
+ 98 }
+ 99 return (value);
+ 100 }
+
+`advance LOCATION'
+ Continue running the program up to the given LOCATION. An
+ argument is required, which should be of one of the forms
+ described in *note Specify Location::. Execution will also stop
+ upon exit from the current stack frame. This command is similar
+ to `until', but `advance' will not skip over recursive function
+ calls, and the target location doesn't have to be in the same
+ frame as the current one.
+
+`stepi'
+`stepi ARG'
+`si'
+ Execute one machine instruction, then stop and return to the
+ debugger.
+
+ It is often useful to do `display/i $pc' when stepping by machine
+ instructions. This makes GDB automatically display the next
+ instruction to be executed, each time your program stops. *Note
+ Automatic Display: Auto Display.
+
+ An argument is a repeat count, as in `step'.
+
+`nexti'
+`nexti ARG'
+`ni'
+ Execute one machine instruction, but if it is a function call,
+ proceed until the function returns.
+
+ An argument is a repeat count, as in `next'.
+
+
+File: gdb.info, Node: Signals, Next: Thread Stops, Prev: Continuing and Stepping, Up: Stopping
+
+5.3 Signals
+===========
+
+A signal is an asynchronous event that can happen in a program. The
+operating system defines the possible kinds of signals, and gives each
+kind a name and a number. For example, in Unix `SIGINT' is the signal
+a program gets when you type an interrupt character (often `Ctrl-c');
+`SIGSEGV' is the signal a program gets from referencing a place in
+memory far away from all the areas in use; `SIGALRM' occurs when the
+alarm clock timer goes off (which happens only if your program has
+requested an alarm).
+
+ Some signals, including `SIGALRM', are a normal part of the
+functioning of your program. Others, such as `SIGSEGV', indicate
+errors; these signals are "fatal" (they kill your program immediately)
+if the program has not specified in advance some other way to handle
+the signal. `SIGINT' does not indicate an error in your program, but
+it is normally fatal so it can carry out the purpose of the interrupt:
+to kill the program.
+
+ GDB has the ability to detect any occurrence of a signal in your
+program. You can tell GDB in advance what to do for each kind of
+signal.
+
+ Normally, GDB is set up to let the non-erroneous signals like
+`SIGALRM' be silently passed to your program (so as not to interfere
+with their role in the program's functioning) but to stop your program
+immediately whenever an error signal happens. You can change these
+settings with the `handle' command.
+
+`info signals'
+`info handle'
+ Print a table of all the kinds of signals and how GDB has been
+ told to handle each one. You can use this to see the signal
+ numbers of all the defined types of signals.
+
+`info signals SIG'
+ Similar, but print information only about the specified signal
+ number.
+
+ `info handle' is an alias for `info signals'.
+
+`handle SIGNAL [KEYWORDS...]'
+ Change the way GDB handles signal SIGNAL. SIGNAL can be the
+ number of a signal or its name (with or without the `SIG' at the
+ beginning); a list of signal numbers of the form `LOW-HIGH'; or
+ the word `all', meaning all the known signals. Optional arguments
+ KEYWORDS, described below, say what change to make.
+
+ The keywords allowed by the `handle' command can be abbreviated.
+Their full names are:
+
+`nostop'
+ GDB should not stop your program when this signal happens. It may
+ still print a message telling you that the signal has come in.
+
+`stop'
+ GDB should stop your program when this signal happens. This
+ implies the `print' keyword as well.
+
+`print'
+ GDB should print a message when this signal happens.
+
+`noprint'
+ GDB should not mention the occurrence of the signal at all. This
+ implies the `nostop' keyword as well.
+
+`pass'
+`noignore'
+ GDB should allow your program to see this signal; your program can
+ handle the signal, or else it may terminate if the signal is fatal
+ and not handled. `pass' and `noignore' are synonyms.
+
+`nopass'
+`ignore'
+ GDB should not allow your program to see this signal. `nopass'
+ and `ignore' are synonyms.
+
+ When a signal stops your program, the signal is not visible to the
+program until you continue. Your program sees the signal then, if
+`pass' is in effect for the signal in question _at that time_. In
+other words, after GDB reports a signal, you can use the `handle'
+command with `pass' or `nopass' to control whether your program sees
+that signal when you continue.
+
+ The default is set to `nostop', `noprint', `pass' for non-erroneous
+signals such as `SIGALRM', `SIGWINCH' and `SIGCHLD', and to `stop',
+`print', `pass' for the erroneous signals.
+
+ You can also use the `signal' command to prevent your program from
+seeing a signal, or cause it to see a signal it normally would not see,
+or to give it any signal at any time. For example, if your program
+stopped due to some sort of memory reference error, you might store
+correct values into the erroneous variables and continue, hoping to see
+more execution; but your program would probably terminate immediately as
+a result of the fatal signal once it saw the signal. To prevent this,
+you can continue with `signal 0'. *Note Giving your Program a Signal:
+Signaling.
+
+ On some targets, GDB can inspect extra signal information associated
+with the intercepted signal, before it is actually delivered to the
+program being debugged. This information is exported by the
+convenience variable `$_siginfo', and consists of data that is passed
+by the kernel to the signal handler at the time of the receipt of a
+signal. The data type of the information itself is target dependent.
+You can see the data type using the `ptype $_siginfo' command. On Unix
+systems, it typically corresponds to the standard `siginfo_t' type, as
+defined in the `signal.h' system header.
+
+ Here's an example, on a GNU/Linux system, printing the stray
+referenced address that raised a segmentation fault.
+
+ (gdb) continue
+ Program received signal SIGSEGV, Segmentation fault.
+ 0x0000000000400766 in main ()
+ 69 *(int *)p = 0;
+ (gdb) ptype $_siginfo
+ type = struct {
+ int si_signo;
+ int si_errno;
+ int si_code;
+ union {
+ int _pad[28];
+ struct {...} _kill;
+ struct {...} _timer;
+ struct {...} _rt;
+ struct {...} _sigchld;
+ struct {...} _sigfault;
+ struct {...} _sigpoll;
+ } _sifields;
+ }
+ (gdb) ptype $_siginfo._sifields._sigfault
+ type = struct {
+ void *si_addr;
+ }
+ (gdb) p $_siginfo._sifields._sigfault.si_addr
+ $1 = (void *) 0x7ffff7ff7000
+
+ Depending on target support, `$_siginfo' may also be writable.
+
+
+File: gdb.info, Node: Thread Stops, Prev: Signals, Up: Stopping
+
+5.4 Stopping and Starting Multi-thread Programs
+===============================================
+
+GDB supports debugging programs with multiple threads (*note Debugging
+Programs with Multiple Threads: Threads.). There are two modes of
+controlling execution of your program within the debugger. In the
+default mode, referred to as "all-stop mode", when any thread in your
+program stops (for example, at a breakpoint or while being stepped),
+all other threads in the program are also stopped by GDB. On some
+targets, GDB also supports "non-stop mode", in which other threads can
+continue to run freely while you examine the stopped thread in the
+debugger.
+
+* Menu:
+
+* All-Stop Mode:: All threads stop when GDB takes control
+* Non-Stop Mode:: Other threads continue to execute
+* Background Execution:: Running your program asynchronously
+* Thread-Specific Breakpoints:: Controlling breakpoints
+* Interrupted System Calls:: GDB may interfere with system calls
+* Observer Mode:: GDB does not alter program behavior
+
+
+File: gdb.info, Node: All-Stop Mode, Next: Non-Stop Mode, Up: Thread Stops
+
+5.4.1 All-Stop Mode
+-------------------
+
+In all-stop mode, whenever your program stops under GDB for any reason,
+_all_ threads of execution stop, not just the current thread. This
+allows you to examine the overall state of the program, including
+switching between threads, without worrying that things may change
+underfoot.
+
+ Conversely, whenever you restart the program, _all_ threads start
+executing. _This is true even when single-stepping_ with commands like
+`step' or `next'.
+
+ In particular, GDB cannot single-step all threads in lockstep.
+Since thread scheduling is up to your debugging target's operating
+system (not controlled by GDB), other threads may execute more than one
+statement while the current thread completes a single step. Moreover,
+in general other threads stop in the middle of a statement, rather than
+at a clean statement boundary, when the program stops.
+
+ You might even find your program stopped in another thread after
+continuing or even single-stepping. This happens whenever some other
+thread runs into a breakpoint, a signal, or an exception before the
+first thread completes whatever you requested.
+
+ Whenever GDB stops your program, due to a breakpoint or a signal, it
+automatically selects the thread where that breakpoint or signal
+happened. GDB alerts you to the context switch with a message such as
+`[Switching to Thread N]' to identify the thread.
+
+ On some OSes, you can modify GDB's default behavior by locking the
+OS scheduler to allow only a single thread to run.
+
+`set scheduler-locking MODE'
+ Set the scheduler locking mode. If it is `off', then there is no
+ locking and any thread may run at any time. If `on', then only the
+ current thread may run when the inferior is resumed. The `step'
+ mode optimizes for single-stepping; it prevents other threads from
+ preempting the current thread while you are stepping, so that the
+ focus of debugging does not change unexpectedly. Other threads
+ only rarely (or never) get a chance to run when you step. They
+ are more likely to run when you `next' over a function call, and
+ they are completely free to run when you use commands like
+ `continue', `until', or `finish'. However, unless another thread
+ hits a breakpoint during its timeslice, GDB does not change the
+ current thread away from the thread that you are debugging.
+
+`show scheduler-locking'
+ Display the current scheduler locking mode.
+
+ By default, when you issue one of the execution commands such as
+`continue', `next' or `step', GDB allows only threads of the current
+inferior to run. For example, if GDB is attached to two inferiors,
+each with two threads, the `continue' command resumes only the two
+threads of the current inferior. This is useful, for example, when you
+debug a program that forks and you want to hold the parent stopped (so
+that, for instance, it doesn't run to exit), while you debug the child.
+In other situations, you may not be interested in inspecting the
+current state of any of the processes GDB is attached to, and you may
+want to resume them all until some breakpoint is hit. In the latter
+case, you can instruct GDB to allow all threads of all the inferiors to
+run with the `set schedule-multiple' command.
+
+`set schedule-multiple'
+ Set the mode for allowing threads of multiple processes to be
+ resumed when an execution command is issued. When `on', all
+ threads of all processes are allowed to run. When `off', only the
+ threads of the current process are resumed. The default is `off'.
+ The `scheduler-locking' mode takes precedence when set to `on', or
+ while you are stepping and set to `step'.
+
+`show schedule-multiple'
+ Display the current mode for resuming the execution of threads of
+ multiple processes.
+
+
+File: gdb.info, Node: Non-Stop Mode, Next: Background Execution, Prev: All-Stop Mode, Up: Thread Stops
+
+5.4.2 Non-Stop Mode
+-------------------
+
+For some multi-threaded targets, GDB supports an optional mode of
+operation in which you can examine stopped program threads in the
+debugger while other threads continue to execute freely. This
+minimizes intrusion when debugging live systems, such as programs where
+some threads have real-time constraints or must continue to respond to
+external events. This is referred to as "non-stop" mode.
+
+ In non-stop mode, when a thread stops to report a debugging event,
+_only_ that thread is stopped; GDB does not stop other threads as well,
+in contrast to the all-stop mode behavior. Additionally, execution
+commands such as `continue' and `step' apply by default only to the
+current thread in non-stop mode, rather than all threads as in all-stop
+mode. This allows you to control threads explicitly in ways that are
+not possible in all-stop mode -- for example, stepping one thread while
+allowing others to run freely, stepping one thread while holding all
+others stopped, or stepping several threads independently and
+simultaneously.
+
+ To enter non-stop mode, use this sequence of commands before you run
+or attach to your program:
+
+ # Enable the async interface.
+ set target-async 1
+
+ # If using the CLI, pagination breaks non-stop.
+ set pagination off
+
+ # Finally, turn it on!
+ set non-stop on
+
+ You can use these commands to manipulate the non-stop mode setting:
+
+`set non-stop on'
+ Enable selection of non-stop mode.
+
+`set non-stop off'
+ Disable selection of non-stop mode.
+
+`show non-stop'
+ Show the current non-stop enablement setting.
+
+ Note these commands only reflect whether non-stop mode is enabled,
+not whether the currently-executing program is being run in non-stop
+mode. In particular, the `set non-stop' preference is only consulted
+when GDB starts or connects to the target program, and it is generally
+not possible to switch modes once debugging has started. Furthermore,
+since not all targets support non-stop mode, even when you have enabled
+non-stop mode, GDB may still fall back to all-stop operation by default.
+
+ In non-stop mode, all execution commands apply only to the current
+thread by default. That is, `continue' only continues one thread. To
+continue all threads, issue `continue -a' or `c -a'.
+
+ You can use GDB's background execution commands (*note Background
+Execution::) to run some threads in the background while you continue
+to examine or step others from GDB. The MI execution commands (*note
+GDB/MI Program Execution::) are always executed asynchronously in
+non-stop mode.
+
+ Suspending execution is done with the `interrupt' command when
+running in the background, or `Ctrl-c' during foreground execution. In
+all-stop mode, this stops the whole process; but in non-stop mode the
+interrupt applies only to the current thread. To stop the whole
+program, use `interrupt -a'.
+
+ Other execution commands do not currently support the `-a' option.
+
+ In non-stop mode, when a thread stops, GDB doesn't automatically make
+that thread current, as it does in all-stop mode. This is because the
+thread stop notifications are asynchronous with respect to GDB's
+command interpreter, and it would be confusing if GDB unexpectedly
+changed to a different thread just as you entered a command to operate
+on the previously current thread.
+
+
+File: gdb.info, Node: Background Execution, Next: Thread-Specific Breakpoints, Prev: Non-Stop Mode, Up: Thread Stops
+
+5.4.3 Background Execution
+--------------------------
+
+GDB's execution commands have two variants: the normal foreground
+(synchronous) behavior, and a background (asynchronous) behavior. In
+foreground execution, GDB waits for the program to report that some
+thread has stopped before prompting for another command. In background
+execution, GDB immediately gives a command prompt so that you can issue
+other commands while your program runs.
+
+ You need to explicitly enable asynchronous mode before you can use
+background execution commands. You can use these commands to
+manipulate the asynchronous mode setting:
+
+`set target-async on'
+ Enable asynchronous mode.
+
+`set target-async off'
+ Disable asynchronous mode.
+
+`show target-async'
+ Show the current target-async setting.
+
+ If the target doesn't support async mode, GDB issues an error
+message if you attempt to use the background execution commands.
+
+ To specify background execution, add a `&' to the command. For
+example, the background form of the `continue' command is `continue&',
+or just `c&'. The execution commands that accept background execution
+are:
+
+`run'
+ *Note Starting your Program: Starting.
+
+`attach'
+ *Note Debugging an Already-running Process: Attach.
+
+`step'
+ *Note step: Continuing and Stepping.
+
+`stepi'
+ *Note stepi: Continuing and Stepping.
+
+`next'
+ *Note next: Continuing and Stepping.
+
+`nexti'
+ *Note nexti: Continuing and Stepping.
+
+`continue'
+ *Note continue: Continuing and Stepping.
+
+`finish'
+ *Note finish: Continuing and Stepping.
+
+`until'
+ *Note until: Continuing and Stepping.
+
+
+ Background execution is especially useful in conjunction with
+non-stop mode for debugging programs with multiple threads; see *note
+Non-Stop Mode::. However, you can also use these commands in the
+normal all-stop mode with the restriction that you cannot issue another
+execution command until the previous one finishes. Examples of
+commands that are valid in all-stop mode while the program is running
+include `help' and `info break'.
+
+ You can interrupt your program while it is running in the background
+by using the `interrupt' command.
+
+`interrupt'
+`interrupt -a'
+ Suspend execution of the running program. In all-stop mode,
+ `interrupt' stops the whole process, but in non-stop mode, it stops
+ only the current thread. To stop the whole program in non-stop
+ mode, use `interrupt -a'.
+
+
+File: gdb.info, Node: Thread-Specific Breakpoints, Next: Interrupted System Calls, Prev: Background Execution, Up: Thread Stops
+
+5.4.4 Thread-Specific Breakpoints
+---------------------------------
+
+When your program has multiple threads (*note Debugging Programs with
+Multiple Threads: Threads.), you can choose whether to set breakpoints
+on all threads, or on a particular thread.
+
+`break LINESPEC thread THREADNO'
+`break LINESPEC thread THREADNO if ...'
+ LINESPEC specifies source lines; there are several ways of writing
+ them (*note Specify Location::), but the effect is always to
+ specify some source line.
+
+ Use the qualifier `thread THREADNO' with a breakpoint command to
+ specify that you only want GDB to stop the program when a
+ particular thread reaches this breakpoint. THREADNO is one of the
+ numeric thread identifiers assigned by GDB, shown in the first
+ column of the `info threads' display.
+
+ If you do not specify `thread THREADNO' when you set a breakpoint,
+ the breakpoint applies to _all_ threads of your program.
+
+ You can use the `thread' qualifier on conditional breakpoints as
+ well; in this case, place `thread THREADNO' before or after the
+ breakpoint condition, like this:
+
+ (gdb) break frik.c:13 thread 28 if bartab > lim
+
+
+
+File: gdb.info, Node: Interrupted System Calls, Next: Observer Mode, Prev: Thread-Specific Breakpoints, Up: Thread Stops
+
+5.4.5 Interrupted System Calls
+------------------------------
+
+There is an unfortunate side effect when using GDB to debug
+multi-threaded programs. If one thread stops for a breakpoint, or for
+some other reason, and another thread is blocked in a system call, then
+the system call may return prematurely. This is a consequence of the
+interaction between multiple threads and the signals that GDB uses to
+implement breakpoints and other events that stop execution.
+
+ To handle this problem, your program should check the return value of
+each system call and react appropriately. This is good programming
+style anyways.
+
+ For example, do not write code like this:
+
+ sleep (10);
+
+ The call to `sleep' will return early if a different thread stops at
+a breakpoint or for some other reason.
+
+ Instead, write this:
+
+ int unslept = 10;
+ while (unslept > 0)
+ unslept = sleep (unslept);
+
+ A system call is allowed to return early, so the system is still
+conforming to its specification. But GDB does cause your
+multi-threaded program to behave differently than it would without GDB.
+
+ Also, GDB uses internal breakpoints in the thread library to monitor
+certain events such as thread creation and thread destruction. When
+such an event happens, a system call in another thread may return
+prematurely, even though your program does not appear to stop.
+
+
+File: gdb.info, Node: Observer Mode, Prev: Interrupted System Calls, Up: Thread Stops
+
+5.4.6 Observer Mode
+-------------------
+
+If you want to build on non-stop mode and observe program behavior
+without any chance of disruption by GDB, you can set variables to
+disable all of the debugger's attempts to modify state, whether by
+writing memory, inserting breakpoints, etc. These operate at a low
+level, intercepting operations from all commands.
+
+ When all of these are set to `off', then GDB is said to be "observer
+mode". As a convenience, the variable `observer' can be set to disable
+these, plus enable non-stop mode.
+
+ Note that GDB will not prevent you from making nonsensical
+combinations of these settings. For instance, if you have enabled
+`may-insert-breakpoints' but disabled `may-write-memory', then
+breakpoints that work by writing trap instructions into the code stream
+will still not be able to be placed.
+
+`set observer on'
+`set observer off'
+ When set to `on', this disables all the permission variables below
+ (except for `insert-fast-tracepoints'), plus enables non-stop
+ debugging. Setting this to `off' switches back to normal
+ debugging, though remaining in non-stop mode.
+
+`show observer'
+ Show whether observer mode is on or off.
+
+`set may-write-registers on'
+`set may-write-registers off'
+ This controls whether GDB will attempt to alter the values of
+ registers, such as with assignment expressions in `print', or the
+ `jump' command. It defaults to `on'.
+
+`show may-write-registers'
+ Show the current permission to write registers.
+
+`set may-write-memory on'
+`set may-write-memory off'
+ This controls whether GDB will attempt to alter the contents of
+ memory, such as with assignment expressions in `print'. It
+ defaults to `on'.
+
+`show may-write-memory'
+ Show the current permission to write memory.
+
+`set may-insert-breakpoints on'
+`set may-insert-breakpoints off'
+ This controls whether GDB will attempt to insert breakpoints.
+ This affects all breakpoints, including internal breakpoints
+ defined by GDB. It defaults to `on'.
+
+`show may-insert-breakpoints'
+ Show the current permission to insert breakpoints.
+
+`set may-insert-tracepoints on'
+`set may-insert-tracepoints off'
+ This controls whether GDB will attempt to insert (regular)
+ tracepoints at the beginning of a tracing experiment. It affects
+ only non-fast tracepoints, fast tracepoints being under the
+ control of `may-insert-fast-tracepoints'. It defaults to `on'.
+
+`show may-insert-tracepoints'
+ Show the current permission to insert tracepoints.
+
+`set may-insert-fast-tracepoints on'
+`set may-insert-fast-tracepoints off'
+ This controls whether GDB will attempt to insert fast tracepoints
+ at the beginning of a tracing experiment. It affects only fast
+ tracepoints, regular (non-fast) tracepoints being under the
+ control of `may-insert-tracepoints'. It defaults to `on'.
+
+`show may-insert-fast-tracepoints'
+ Show the current permission to insert fast tracepoints.
+
+`set may-interrupt on'
+`set may-interrupt off'
+ This controls whether GDB will attempt to interrupt or stop
+ program execution. When this variable is `off', the `interrupt'
+ command will have no effect, nor will `Ctrl-c'. It defaults to
+ `on'.
+
+`show may-interrupt'
+ Show the current permission to interrupt or stop the program.
+
+
+
+File: gdb.info, Node: Reverse Execution, Next: Process Record and Replay, Prev: Stopping, Up: Top
+
+6 Running programs backward
+***************************
+
+When you are debugging a program, it is not unusual to realize that you
+have gone too far, and some event of interest has already happened. If
+the target environment supports it, GDB can allow you to "rewind" the
+program by running it backward.
+
+ A target environment that supports reverse execution should be able
+to "undo" the changes in machine state that have taken place as the
+program was executing normally. Variables, registers etc. should
+revert to their previous values. Obviously this requires a great deal
+of sophistication on the part of the target environment; not all target
+environments can support reverse execution.
+
+ When a program is executed in reverse, the instructions that have
+most recently been executed are "un-executed", in reverse order. The
+program counter runs backward, following the previous thread of
+execution in reverse. As each instruction is "un-executed", the values
+of memory and/or registers that were changed by that instruction are
+reverted to their previous states. After executing a piece of source
+code in reverse, all side effects of that code should be "undone", and
+all variables should be returned to their prior values(1).
+
+ If you are debugging in a target environment that supports reverse
+execution, GDB provides the following commands.
+
+`reverse-continue [IGNORE-COUNT]'
+`rc [IGNORE-COUNT]'
+ Beginning at the point where your program last stopped, start
+ executing in reverse. Reverse execution will stop for breakpoints
+ and synchronous exceptions (signals), just like normal execution.
+ Behavior of asynchronous signals depends on the target environment.
+
+`reverse-step [COUNT]'
+ Run the program backward until control reaches the start of a
+ different source line; then stop it, and return control to GDB.
+
+ Like the `step' command, `reverse-step' will only stop at the
+ beginning of a source line. It "un-executes" the previously
+ executed source line. If the previous source line included calls
+ to debuggable functions, `reverse-step' will step (backward) into
+ the called function, stopping at the beginning of the _last_
+ statement in the called function (typically a return statement).
+
+ Also, as with the `step' command, if non-debuggable functions are
+ called, `reverse-step' will run thru them backward without
+ stopping.
+
+`reverse-stepi [COUNT]'
+ Reverse-execute one machine instruction. Note that the instruction
+ to be reverse-executed is _not_ the one pointed to by the program
+ counter, but the instruction executed prior to that one. For
+ instance, if the last instruction was a jump, `reverse-stepi' will
+ take you back from the destination of the jump to the jump
+ instruction itself.
+
+`reverse-next [COUNT]'
+ Run backward to the beginning of the previous line executed in the
+ current (innermost) stack frame. If the line contains function
+ calls, they will be "un-executed" without stopping. Starting from
+ the first line of a function, `reverse-next' will take you back to
+ the caller of that function, _before_ the function was called,
+ just as the normal `next' command would take you from the last
+ line of a function back to its return to its caller (2).
+
+`reverse-nexti [COUNT]'
+ Like `nexti', `reverse-nexti' executes a single instruction in
+ reverse, except that called functions are "un-executed" atomically.
+ That is, if the previously executed instruction was a return from
+ another function, `reverse-nexti' will continue to execute in
+ reverse until the call to that function (from the current stack
+ frame) is reached.
+
+`reverse-finish'
+ Just as the `finish' command takes you to the point where the
+ current function returns, `reverse-finish' takes you to the point
+ where it was called. Instead of ending up at the end of the
+ current function invocation, you end up at the beginning.
+
+`set exec-direction'
+ Set the direction of target execution.
+
+`set exec-direction reverse'
+ GDB will perform all execution commands in reverse, until the
+ exec-direction mode is changed to "forward". Affected commands
+ include `step, stepi, next, nexti, continue, and finish'. The
+ `return' command cannot be used in reverse mode.
+
+`set exec-direction forward'
+ GDB will perform all execution commands in the normal fashion.
+ This is the default.
+
+ ---------- Footnotes ----------
+
+ (1) Note that some side effects are easier to undo than others. For
+instance, memory and registers are relatively easy, but device I/O is
+hard. Some targets may be able undo things like device I/O, and some
+may not.
+
+ The contract between GDB and the reverse executing target requires
+only that the target do something reasonable when GDB tells it to
+execute backwards, and then report the results back to GDB. Whatever
+the target reports back to GDB, GDB will report back to the user. GDB
+assumes that the memory and registers that the target reports are in a
+consistant state, but GDB accepts whatever it is given.
+
+ (2) Unless the code is too heavily optimized.
+
+
+File: gdb.info, Node: Process Record and Replay, Next: Stack, Prev: Reverse Execution, Up: Top
+
+7 Recording Inferior's Execution and Replaying It
+*************************************************
+
+On some platforms, GDB provides a special "process record and replay"
+target that can record a log of the process execution, and replay it
+later with both forward and reverse execution commands.
+
+ When this target is in use, if the execution log includes the record
+for the next instruction, GDB will debug in "replay mode". In the
+replay mode, the inferior does not really execute code instructions.
+Instead, all the events that normally happen during code execution are
+taken from the execution log. While code is not really executed in
+replay mode, the values of registers (including the program counter
+register) and the memory of the inferior are still changed as they
+normally would. Their contents are taken from the execution log.
+
+ If the record for the next instruction is not in the execution log,
+GDB will debug in "record mode". In this mode, the inferior executes
+normally, and GDB records the execution log for future replay.
+
+ The process record and replay target supports reverse execution
+(*note Reverse Execution::), even if the platform on which the inferior
+runs does not. However, the reverse execution is limited in this case
+by the range of the instructions recorded in the execution log. In
+other words, reverse execution on platforms that don't support it
+directly can only be done in the replay mode.
+
+ When debugging in the reverse direction, GDB will work in replay
+mode as long as the execution log includes the record for the previous
+instruction; otherwise, it will work in record mode, if the platform
+supports reverse execution, or stop if not.
+
+ For architecture environments that support process record and replay,
+GDB provides the following commands:
+
+`target record'
+ This command starts the process record and replay target. The
+ process record and replay target can only debug a process that is
+ already running. Therefore, you need first to start the process
+ with the `run' or `start' commands, and then start the recording
+ with the `target record' command.
+
+ Both `record' and `rec' are aliases of `target record'.
+
+ Displaced stepping (*note displaced stepping: Maintenance
+ Commands.) will be automatically disabled when process record and
+ replay target is started. That's because the process record and
+ replay target doesn't support displaced stepping.
+
+ If the inferior is in the non-stop mode (*note Non-Stop Mode::) or
+ in the asynchronous execution mode (*note Background Execution::),
+ the process record and replay target cannot be started because it
+ doesn't support these two modes.
+
+`record stop'
+ Stop the process record and replay target. When process record and
+ replay target stops, the entire execution log will be deleted and
+ the inferior will either be terminated, or will remain in its
+ final state.
+
+ When you stop the process record and replay target in record mode
+ (at the end of the execution log), the inferior will be stopped at
+ the next instruction that would have been recorded. In other
+ words, if you record for a while and then stop recording, the
+ inferior process will be left in the same state as if the
+ recording never happened.
+
+ On the other hand, if the process record and replay target is
+ stopped while in replay mode (that is, not at the end of the
+ execution log, but at some earlier point), the inferior process
+ will become "live" at that earlier state, and it will then be
+ possible to continue the usual "live" debugging of the process
+ from that state.
+
+ When the inferior process exits, or GDB detaches from it, process
+ record and replay target will automatically stop itself.
+
+`record save FILENAME'
+ Save the execution log to a file `FILENAME'. Default filename is
+ `gdb_record.PROCESS_ID', where PROCESS_ID is the process ID of the
+ inferior.
+
+`record restore FILENAME'
+ Restore the execution log from a file `FILENAME'. File must have
+ been created with `record save'.
+
+`set record insn-number-max LIMIT'
+ Set the limit of instructions to be recorded. Default value is
+ 200000.
+
+ If LIMIT is a positive number, then GDB will start deleting
+ instructions from the log once the number of the record
+ instructions becomes greater than LIMIT. For every new recorded
+ instruction, GDB will delete the earliest recorded instruction to
+ keep the number of recorded instructions at the limit. (Since
+ deleting recorded instructions loses information, GDB lets you
+ control what happens when the limit is reached, by means of the
+ `stop-at-limit' option, described below.)
+
+ If LIMIT is zero, GDB will never delete recorded instructions from
+ the execution log. The number of recorded instructions is
+ unlimited in this case.
+
+`show record insn-number-max'
+ Show the limit of instructions to be recorded.
+
+`set record stop-at-limit'
+ Control the behavior when the number of recorded instructions
+ reaches the limit. If ON (the default), GDB will stop when the
+ limit is reached for the first time and ask you whether you want
+ to stop the inferior or continue running it and recording the
+ execution log. If you decide to continue recording, each new
+ recorded instruction will cause the oldest one to be deleted.
+
+ If this option is OFF, GDB will automatically delete the oldest
+ record to make room for each new one, without asking.
+
+`show record stop-at-limit'
+ Show the current setting of `stop-at-limit'.
+
+`set record memory-query'
+ Control the behavior when GDB is unable to record memory changes
+ caused by an instruction. If ON, GDB will query whether to stop
+ the inferior in that case.
+
+ If this option is OFF (the default), GDB will automatically ignore
+ the effect of such instructions on memory. Later, when GDB
+ replays this execution log, it will mark the log of this
+ instruction as not accessible, and it will not affect the replay
+ results.
+
+`show record memory-query'
+ Show the current setting of `memory-query'.
+
+`info record'
+ Show various statistics about the state of process record and its
+ in-memory execution log buffer, including:
+
+ * Whether in record mode or replay mode.
+
+ * Lowest recorded instruction number (counting from when the
+ current execution log started recording instructions).
+
+ * Highest recorded instruction number.
+
+ * Current instruction about to be replayed (if in replay mode).
+
+ * Number of instructions contained in the execution log.
+
+ * Maximum number of instructions that may be contained in the
+ execution log.
+
+`record delete'
+ When record target runs in replay mode ("in the past"), delete the
+ subsequent execution log and begin to record a new execution log
+ starting from the current address. This means you will abandon
+ the previously recorded "future" and begin recording a new
+ "future".
+
+
+File: gdb.info, Node: Stack, Next: Source, Prev: Process Record and Replay, Up: Top
+
+8 Examining the Stack
+*********************
+
+When your program has stopped, the first thing you need to know is
+where it stopped and how it got there.
+
+ Each time your program performs a function call, information about
+the call is generated. That information includes the location of the
+call in your program, the arguments of the call, and the local
+variables of the function being called. The information is saved in a
+block of data called a "stack frame". The stack frames are allocated
+in a region of memory called the "call stack".
+
+ When your program stops, the GDB commands for examining the stack
+allow you to see all of this information.
+
+ One of the stack frames is "selected" by GDB and many GDB commands
+refer implicitly to the selected frame. In particular, whenever you
+ask GDB for the value of a variable in your program, the value is found
+in the selected frame. There are special GDB commands to select
+whichever frame you are interested in. *Note Selecting a Frame:
+Selection.
+
+ When your program stops, GDB automatically selects the currently
+executing frame and describes it briefly, similar to the `frame'
+command (*note Information about a Frame: Frame Info.).
+
+* Menu:
+
+* Frames:: Stack frames
+* Backtrace:: Backtraces
+* Selection:: Selecting a frame
+* Frame Info:: Information on a frame
+
+
+File: gdb.info, Node: Frames, Next: Backtrace, Up: Stack
+
+8.1 Stack Frames
+================
+
+The call stack is divided up into contiguous pieces called "stack
+frames", or "frames" for short; each frame is the data associated with
+one call to one function. The frame contains the arguments given to
+the function, the function's local variables, and the address at which
+the function is executing.
+
+ When your program is started, the stack has only one frame, that of
+the function `main'. This is called the "initial" frame or the
+"outermost" frame. Each time a function is called, a new frame is
+made. Each time a function returns, the frame for that function
+invocation is eliminated. If a function is recursive, there can be
+many frames for the same function. The frame for the function in which
+execution is actually occurring is called the "innermost" frame. This
+is the most recently created of all the stack frames that still exist.
+
+ Inside your program, stack frames are identified by their addresses.
+A stack frame consists of many bytes, each of which has its own
+address; each kind of computer has a convention for choosing one byte
+whose address serves as the address of the frame. Usually this address
+is kept in a register called the "frame pointer register" (*note $fp:
+Registers.) while execution is going on in that frame.
+
+ GDB assigns numbers to all existing stack frames, starting with zero
+for the innermost frame, one for the frame that called it, and so on
+upward. These numbers do not really exist in your program; they are
+assigned by GDB to give you a way of designating stack frames in GDB
+commands.
+
+ Some compilers provide a way to compile functions so that they
+operate without stack frames. (For example, the GCC option
+ `-fomit-frame-pointer'
+ generates functions without a frame.) This is occasionally done
+with heavily used library functions to save the frame setup time. GDB
+has limited facilities for dealing with these function invocations. If
+the innermost function invocation has no stack frame, GDB nevertheless
+regards it as though it had a separate frame, which is numbered zero as
+usual, allowing correct tracing of the function call chain. However,
+GDB has no provision for frameless functions elsewhere in the stack.
+
+`frame ARGS'
+ The `frame' command allows you to move from one stack frame to
+ another, and to print the stack frame you select. ARGS may be
+ either the address of the frame or the stack frame number.
+ Without an argument, `frame' prints the current stack frame.
+
+`select-frame'
+ The `select-frame' command allows you to move from one stack frame
+ to another without printing the frame. This is the silent version
+ of `frame'.
+
+
+File: gdb.info, Node: Backtrace, Next: Selection, Prev: Frames, Up: Stack
+
+8.2 Backtraces
+==============
+
+A backtrace is a summary of how your program got where it is. It shows
+one line per frame, for many frames, starting with the currently
+executing frame (frame zero), followed by its caller (frame one), and
+on up the stack.
+
+`backtrace'
+`bt'
+ Print a backtrace of the entire stack: one line per frame for all
+ frames in the stack.
+
+ You can stop the backtrace at any time by typing the system
+ interrupt character, normally `Ctrl-c'.
+
+`backtrace N'
+`bt N'
+ Similar, but print only the innermost N frames.
+
+`backtrace -N'
+`bt -N'
+ Similar, but print only the outermost N frames.
+
+`backtrace full'
+`bt full'
+`bt full N'
+`bt full -N'
+ Print the values of the local variables also. N specifies the
+ number of frames to print, as described above.
+
+ The names `where' and `info stack' (abbreviated `info s') are
+additional aliases for `backtrace'.
+
+ In a multi-threaded program, GDB by default shows the backtrace only
+for the current thread. To display the backtrace for several or all of
+the threads, use the command `thread apply' (*note thread apply:
+Threads.). For example, if you type `thread apply all backtrace', GDB
+will display the backtrace for all the threads; this is handy when you
+debug a core dump of a multi-threaded program.
+
+ Each line in the backtrace shows the frame number and the function
+name. The program counter value is also shown--unless you use `set
+print address off'. The backtrace also shows the source file name and
+line number, as well as the arguments to the function. The program
+counter value is omitted if it is at the beginning of the code for that
+line number.
+
+ Here is an example of a backtrace. It was made with the command `bt
+3', so it shows the innermost three frames.
+
+ #0 m4_traceon (obs=0x24eb0, argc=1, argv=0x2b8c8)
+ at builtin.c:993
+ #1 0x6e38 in expand_macro (sym=0x2b600, data=...) at macro.c:242
+ #2 0x6840 in expand_token (obs=0x0, t=177664, td=0xf7fffb08)
+ at macro.c:71
+ (More stack frames follow...)
+
+The display for frame zero does not begin with a program counter value,
+indicating that your program has stopped at the beginning of the code
+for line `993' of `builtin.c'.
+
+The value of parameter `data' in frame 1 has been replaced by `...'.
+By default, GDB prints the value of a parameter only if it is a scalar
+(integer, pointer, enumeration, etc). See command `set print
+frame-arguments' in *note Print Settings:: for more details on how to
+configure the way function parameter values are printed.
+
+ If your program was compiled with optimizations, some compilers will
+optimize away arguments passed to functions if those arguments are
+never used after the call. Such optimizations generate code that
+passes arguments through registers, but doesn't store those arguments
+in the stack frame. GDB has no way of displaying such arguments in
+stack frames other than the innermost one. Here's what such a
+backtrace might look like:
+
+ #0 m4_traceon (obs=0x24eb0, argc=1, argv=0x2b8c8)
+ at builtin.c:993
+ #1 0x6e38 in expand_macro (sym=<optimized out>) at macro.c:242
+ #2 0x6840 in expand_token (obs=0x0, t=<optimized out>, td=0xf7fffb08)
+ at macro.c:71
+ (More stack frames follow...)
+
+The values of arguments that were not saved in their stack frames are
+shown as `<optimized out>'.
+
+ If you need to display the values of such optimized-out arguments,
+either deduce that from other variables whose values depend on the one
+you are interested in, or recompile without optimizations.
+
+ Most programs have a standard user entry point--a place where system
+libraries and startup code transition into user code. For C this is
+`main'(1). When GDB finds the entry function in a backtrace it will
+terminate the backtrace, to avoid tracing into highly system-specific
+(and generally uninteresting) code.
+
+ If you need to examine the startup code, or limit the number of
+levels in a backtrace, you can change this behavior:
+
+`set backtrace past-main'
+`set backtrace past-main on'
+ Backtraces will continue past the user entry point.
+
+`set backtrace past-main off'
+ Backtraces will stop when they encounter the user entry point.
+ This is the default.
+
+`show backtrace past-main'
+ Display the current user entry point backtrace policy.
+
+`set backtrace past-entry'
+`set backtrace past-entry on'
+ Backtraces will continue past the internal entry point of an
+ application. This entry point is encoded by the linker when the
+ application is built, and is likely before the user entry point
+ `main' (or equivalent) is called.
+
+`set backtrace past-entry off'
+ Backtraces will stop when they encounter the internal entry point
+ of an application. This is the default.
+
+`show backtrace past-entry'
+ Display the current internal entry point backtrace policy.
+
+`set backtrace limit N'
+`set backtrace limit 0'
+ Limit the backtrace to N levels. A value of zero means unlimited.
+
+`show backtrace limit'
+ Display the current limit on backtrace levels.
+
+ ---------- Footnotes ----------
+
+ (1) Note that embedded programs (the so-called "free-standing"
+environment) are not required to have a `main' function as the entry
+point. They could even have multiple entry points.
+
+
+File: gdb.info, Node: Selection, Next: Frame Info, Prev: Backtrace, Up: Stack
+
+8.3 Selecting a Frame
+=====================
+
+Most commands for examining the stack and other data in your program
+work on whichever stack frame is selected at the moment. Here are the
+commands for selecting a stack frame; all of them finish by printing a
+brief description of the stack frame just selected.
+
+`frame N'
+`f N'
+ Select frame number N. Recall that frame zero is the innermost
+ (currently executing) frame, frame one is the frame that called the
+ innermost one, and so on. The highest-numbered frame is the one
+ for `main'.
+
+`frame ADDR'
+`f ADDR'
+ Select the frame at address ADDR. This is useful mainly if the
+ chaining of stack frames has been damaged by a bug, making it
+ impossible for GDB to assign numbers properly to all frames. In
+ addition, this can be useful when your program has multiple stacks
+ and switches between them.
+
+ On the SPARC architecture, `frame' needs two addresses to select
+ an arbitrary frame: a frame pointer and a stack pointer.
+
+ On the MIPS and Alpha architecture, it needs two addresses: a stack
+ pointer and a program counter.
+
+ On the 29k architecture, it needs three addresses: a register stack
+ pointer, a program counter, and a memory stack pointer.
+
+`up N'
+ Move N frames up the stack. For positive numbers N, this advances
+ toward the outermost frame, to higher frame numbers, to frames
+ that have existed longer. N defaults to one.
+
+`down N'
+ Move N frames down the stack. For positive numbers N, this
+ advances toward the innermost frame, to lower frame numbers, to
+ frames that were created more recently. N defaults to one. You
+ may abbreviate `down' as `do'.
+
+ All of these commands end by printing two lines of output describing
+the frame. The first line shows the frame number, the function name,
+the arguments, and the source file and line number of execution in that
+frame. The second line shows the text of that source line.
+
+ For example:
+
+ (gdb) up
+ #1 0x22f0 in main (argc=1, argv=0xf7fffbf4, env=0xf7fffbfc)
+ at env.c:10
+ 10 read_input_file (argv[i]);
+
+ After such a printout, the `list' command with no arguments prints
+ten lines centered on the point of execution in the frame. You can
+also edit the program at the point of execution with your favorite
+editing program by typing `edit'. *Note Printing Source Lines: List,
+for details.
+
+`up-silently N'
+`down-silently N'
+ These two commands are variants of `up' and `down', respectively;
+ they differ in that they do their work silently, without causing
+ display of the new frame. They are intended primarily for use in
+ GDB command scripts, where the output might be unnecessary and
+ distracting.
+
+
+File: gdb.info, Node: Frame Info, Prev: Selection, Up: Stack
+
+8.4 Information About a Frame
+=============================
+
+There are several other commands to print information about the selected
+stack frame.
+
+`frame'
+`f'
+ When used without any argument, this command does not change which
+ frame is selected, but prints a brief description of the currently
+ selected stack frame. It can be abbreviated `f'. With an
+ argument, this command is used to select a stack frame. *Note
+ Selecting a Frame: Selection.
+
+`info frame'
+`info f'
+ This command prints a verbose description of the selected stack
+ frame, including:
+
+ * the address of the frame
+
+ * the address of the next frame down (called by this frame)
+
+ * the address of the next frame up (caller of this frame)
+
+ * the language in which the source code corresponding to this
+ frame is written
+
+ * the address of the frame's arguments
+
+ * the address of the frame's local variables
+
+ * the program counter saved in it (the address of execution in
+ the caller frame)
+
+ * which registers were saved in the frame
+
+ The verbose description is useful when something has gone wrong
+ that has made the stack format fail to fit the usual conventions.
+
+`info frame ADDR'
+`info f ADDR'
+ Print a verbose description of the frame at address ADDR, without
+ selecting that frame. The selected frame remains unchanged by this
+ command. This requires the same kind of address (more than one
+ for some architectures) that you specify in the `frame' command.
+ *Note Selecting a Frame: Selection.
+
+`info args'
+ Print the arguments of the selected frame, each on a separate line.
+
+`info locals'
+ Print the local variables of the selected frame, each on a separate
+ line. These are all variables (declared either static or
+ automatic) accessible at the point of execution of the selected
+ frame.
+
+`info catch'
+ Print a list of all the exception handlers that are active in the
+ current stack frame at the current point of execution. To see
+ other exception handlers, visit the associated frame (using the
+ `up', `down', or `frame' commands); then type `info catch'. *Note
+ Setting Catchpoints: Set Catchpoints.
+
+
+
+File: gdb.info, Node: Source, Next: Data, Prev: Stack, Up: Top
+
+9 Examining Source Files
+************************
+
+GDB can print parts of your program's source, since the debugging
+information recorded in the program tells GDB what source files were
+used to build it. When your program stops, GDB spontaneously prints
+the line where it stopped. Likewise, when you select a stack frame
+(*note Selecting a Frame: Selection.), GDB prints the line where
+execution in that frame has stopped. You can print other portions of
+source files by explicit command.
+
+ If you use GDB through its GNU Emacs interface, you may prefer to
+use Emacs facilities to view source; see *note Using GDB under GNU
+Emacs: Emacs.
+
+* Menu:
+
+* List:: Printing source lines
+* Specify Location:: How to specify code locations
+* Edit:: Editing source files
+* Search:: Searching source files
+* Source Path:: Specifying source directories
+* Machine Code:: Source and machine code
+
+
+File: gdb.info, Node: List, Next: Specify Location, Up: Source
+
+9.1 Printing Source Lines
+=========================
+
+To print lines from a source file, use the `list' command (abbreviated
+`l'). By default, ten lines are printed. There are several ways to
+specify what part of the file you want to print; see *note Specify
+Location::, for the full list.
+
+ Here are the forms of the `list' command most commonly used:
+
+`list LINENUM'
+ Print lines centered around line number LINENUM in the current
+ source file.
+
+`list FUNCTION'
+ Print lines centered around the beginning of function FUNCTION.
+
+`list'
+ Print more lines. If the last lines printed were printed with a
+ `list' command, this prints lines following the last lines
+ printed; however, if the last line printed was a solitary line
+ printed as part of displaying a stack frame (*note Examining the
+ Stack: Stack.), this prints lines centered around that line.
+
+`list -'
+ Print lines just before the lines last printed.
+
+ By default, GDB prints ten source lines with any of these forms of
+the `list' command. You can change this using `set listsize':
+
+`set listsize COUNT'
+ Make the `list' command display COUNT source lines (unless the
+ `list' argument explicitly specifies some other number).
+
+`show listsize'
+ Display the number of lines that `list' prints.
+
+ Repeating a `list' command with <RET> discards the argument, so it
+is equivalent to typing just `list'. This is more useful than listing
+the same lines again. An exception is made for an argument of `-';
+that argument is preserved in repetition so that each repetition moves
+up in the source file.
+
+ In general, the `list' command expects you to supply zero, one or two
+"linespecs". Linespecs specify source lines; there are several ways of
+writing them (*note Specify Location::), but the effect is always to
+specify some source line.
+
+ Here is a complete description of the possible arguments for `list':
+
+`list LINESPEC'
+ Print lines centered around the line specified by LINESPEC.
+
+`list FIRST,LAST'
+ Print lines from FIRST to LAST. Both arguments are linespecs.
+ When a `list' command has two linespecs, and the source file of
+ the second linespec is omitted, this refers to the same source
+ file as the first linespec.
+
+`list ,LAST'
+ Print lines ending with LAST.
+
+`list FIRST,'
+ Print lines starting with FIRST.
+
+`list +'
+ Print lines just after the lines last printed.
+
+`list -'
+ Print lines just before the lines last printed.
+
+`list'
+ As described in the preceding table.
+
+
+File: gdb.info, Node: Specify Location, Next: Edit, Prev: List, Up: Source
+
+9.2 Specifying a Location
+=========================
+
+Several GDB commands accept arguments that specify a location of your
+program's code. Since GDB is a source-level debugger, a location
+usually specifies some line in the source code; for that reason,
+locations are also known as "linespecs".
+
+ Here are all the different ways of specifying a code location that
+GDB understands:
+
+`LINENUM'
+ Specifies the line number LINENUM of the current source file.
+
+`-OFFSET'
+`+OFFSET'
+ Specifies the line OFFSET lines before or after the "current
+ line". For the `list' command, the current line is the last one
+ printed; for the breakpoint commands, this is the line at which
+ execution stopped in the currently selected "stack frame" (*note
+ Frames: Frames, for a description of stack frames.) When used as
+ the second of the two linespecs in a `list' command, this
+ specifies the line OFFSET lines up or down from the first linespec.
+
+`FILENAME:LINENUM'
+ Specifies the line LINENUM in the source file FILENAME.
+
+`FUNCTION'
+ Specifies the line that begins the body of the function FUNCTION.
+ For example, in C, this is the line with the open brace.
+
+`FUNCTION:LABEL'
+ Specifies the line where LABEL appears in FUNCTION.
+
+`FILENAME:FUNCTION'
+ Specifies the line that begins the body of the function FUNCTION
+ in the file FILENAME. You only need the file name with a function
+ name to avoid ambiguity when there are identically named functions
+ in different source files.
+
+`LABEL'
+ Specifies the line at which the label named LABEL appears. GDB
+ searches for the label in the function corresponding to the
+ currently selected stack frame. If there is no current selected
+ stack frame (for instance, if the inferior is not running), then
+ GDB will not search for a label.
+
+`*ADDRESS'
+ Specifies the program address ADDRESS. For line-oriented
+ commands, such as `list' and `edit', this specifies a source line
+ that contains ADDRESS. For `break' and other breakpoint oriented
+ commands, this can be used to set breakpoints in parts of your
+ program which do not have debugging information or source files.
+
+ Here ADDRESS may be any expression valid in the current working
+ language (*note working language: Languages.) that specifies a code
+ address. In addition, as a convenience, GDB extends the semantics
+ of expressions used in locations to cover the situations that
+ frequently happen during debugging. Here are the various forms of
+ ADDRESS:
+
+ `EXPRESSION'
+ Any expression valid in the current working language.
+
+ `FUNCADDR'
+ An address of a function or procedure derived from its name.
+ In C, C++, Java, Objective-C, Fortran, minimal, and assembly,
+ this is simply the function's name FUNCTION (and actually a
+ special case of a valid expression). In Pascal and Modula-2,
+ this is `&FUNCTION'. In Ada, this is `FUNCTION'Address'
+ (although the Pascal form also works).
+
+ This form specifies the address of the function's first
+ instruction, before the stack frame and arguments have been
+ set up.
+
+ `'FILENAME'::FUNCADDR'
+ Like FUNCADDR above, but also specifies the name of the source
+ file explicitly. This is useful if the name of the function
+ does not specify the function unambiguously, e.g., if there
+ are several functions with identical names in different
+ source files.
+
+
+
+File: gdb.info, Node: Edit, Next: Search, Prev: Specify Location, Up: Source
+
+9.3 Editing Source Files
+========================
+
+To edit the lines in a source file, use the `edit' command. The
+editing program of your choice is invoked with the current line set to
+the active line in the program. Alternatively, there are several ways
+to specify what part of the file you want to print if you want to see
+other parts of the program:
+
+`edit LOCATION'
+ Edit the source file specified by `location'. Editing starts at
+ that LOCATION, e.g., at the specified source line of the specified
+ file. *Note Specify Location::, for all the possible forms of the
+ LOCATION argument; here are the forms of the `edit' command most
+ commonly used:
+
+ `edit NUMBER'
+ Edit the current source file with NUMBER as the active line
+ number.
+
+ `edit FUNCTION'
+ Edit the file containing FUNCTION at the beginning of its
+ definition.
+
+
+9.3.1 Choosing your Editor
+--------------------------
+
+You can customize GDB to use any editor you want (1). By default, it
+is `/bin/ex', but you can change this by setting the environment
+variable `EDITOR' before using GDB. For example, to configure GDB to
+use the `vi' editor, you could use these commands with the `sh' shell:
+ EDITOR=/usr/bin/vi
+ export EDITOR
+ gdb ...
+ or in the `csh' shell,
+ setenv EDITOR /usr/bin/vi
+ gdb ...
+
+ ---------- Footnotes ----------
+
+ (1) The only restriction is that your editor (say `ex'), recognizes
+the following command-line syntax:
+ ex +NUMBER file
+ The optional numeric value +NUMBER specifies the number of the line
+in the file where to start editing.
+
+
+File: gdb.info, Node: Search, Next: Source Path, Prev: Edit, Up: Source
+
+9.4 Searching Source Files
+==========================
+
+There are two commands for searching through the current source file
+for a regular expression.
+
+`forward-search REGEXP'
+`search REGEXP'
+ The command `forward-search REGEXP' checks each line, starting
+ with the one following the last line listed, for a match for
+ REGEXP. It lists the line that is found. You can use the synonym
+ `search REGEXP' or abbreviate the command name as `fo'.
+
+`reverse-search REGEXP'
+ The command `reverse-search REGEXP' checks each line, starting
+ with the one before the last line listed and going backward, for a
+ match for REGEXP. It lists the line that is found. You can
+ abbreviate this command as `rev'.
+
+
+File: gdb.info, Node: Source Path, Next: Machine Code, Prev: Search, Up: Source
+
+9.5 Specifying Source Directories
+=================================
+
+Executable programs sometimes do not record the directories of the
+source files from which they were compiled, just the names. Even when
+they do, the directories could be moved between the compilation and
+your debugging session. GDB has a list of directories to search for
+source files; this is called the "source path". Each time GDB wants a
+source file, it tries all the directories in the list, in the order
+they are present in the list, until it finds a file with the desired
+name.
+
+ For example, suppose an executable references the file
+`/usr/src/foo-1.0/lib/foo.c', and our source path is `/mnt/cross'. The
+file is first looked up literally; if this fails,
+`/mnt/cross/usr/src/foo-1.0/lib/foo.c' is tried; if this fails,
+`/mnt/cross/foo.c' is opened; if this fails, an error message is
+printed. GDB does not look up the parts of the source file name, such
+as `/mnt/cross/src/foo-1.0/lib/foo.c'. Likewise, the subdirectories of
+the source path are not searched: if the source path is `/mnt/cross',
+and the binary refers to `foo.c', GDB would not find it under
+`/mnt/cross/usr/src/foo-1.0/lib'.
+
+ Plain file names, relative file names with leading directories, file
+names containing dots, etc. are all treated as described above; for
+instance, if the source path is `/mnt/cross', and the source file is
+recorded as `../lib/foo.c', GDB would first try `../lib/foo.c', then
+`/mnt/cross/../lib/foo.c', and after that--`/mnt/cross/foo.c'.
+
+ Note that the executable search path is _not_ used to locate the
+source files.
+
+ Whenever you reset or rearrange the source path, GDB clears out any
+information it has cached about where source files are found and where
+each line is in the file.
+
+ When you start GDB, its source path includes only `cdir' and `cwd',
+in that order. To add other directories, use the `directory' command.
+
+ The search path is used to find both program source files and GDB
+script files (read using the `-command' option and `source' command).
+
+ In addition to the source path, GDB provides a set of commands that
+manage a list of source path substitution rules. A "substitution rule"
+specifies how to rewrite source directories stored in the program's
+debug information in case the sources were moved to a different
+directory between compilation and debugging. A rule is made of two
+strings, the first specifying what needs to be rewritten in the path,
+and the second specifying how it should be rewritten. In *note set
+substitute-path::, we name these two parts FROM and TO respectively.
+GDB does a simple string replacement of FROM with TO at the start of
+the directory part of the source file name, and uses that result
+instead of the original file name to look up the sources.
+
+ Using the previous example, suppose the `foo-1.0' tree has been
+moved from `/usr/src' to `/mnt/cross', then you can tell GDB to replace
+`/usr/src' in all source path names with `/mnt/cross'. The first
+lookup will then be `/mnt/cross/foo-1.0/lib/foo.c' in place of the
+original location of `/usr/src/foo-1.0/lib/foo.c'. To define a source
+path substitution rule, use the `set substitute-path' command (*note
+set substitute-path::).
+
+ To avoid unexpected substitution results, a rule is applied only if
+the FROM part of the directory name ends at a directory separator. For
+instance, a rule substituting `/usr/source' into `/mnt/cross' will be
+applied to `/usr/source/foo-1.0' but not to `/usr/sourceware/foo-2.0'.
+And because the substitution is applied only at the beginning of the
+directory name, this rule will not be applied to
+`/root/usr/source/baz.c' either.
+
+ In many cases, you can achieve the same result using the `directory'
+command. However, `set substitute-path' can be more efficient in the
+case where the sources are organized in a complex tree with multiple
+subdirectories. With the `directory' command, you need to add each
+subdirectory of your project. If you moved the entire tree while
+preserving its internal organization, then `set substitute-path' allows
+you to direct the debugger to all the sources with one single command.
+
+ `set substitute-path' is also more than just a shortcut command.
+The source path is only used if the file at the original location no
+longer exists. On the other hand, `set substitute-path' modifies the
+debugger behavior to look at the rewritten location instead. So, if
+for any reason a source file that is not relevant to your executable is
+located at the original location, a substitution rule is the only
+method available to point GDB at the new location.
+
+ You can configure a default source path substitution rule by
+configuring GDB with the `--with-relocated-sources=DIR' option. The DIR
+should be the name of a directory under GDB's configured prefix (set
+with `--prefix' or `--exec-prefix'), and directory names in debug
+information under DIR will be adjusted automatically if the installed
+GDB is moved to a new location. This is useful if GDB, libraries or
+executables with debug information and corresponding source code are
+being moved together.
+
+`directory DIRNAME ...'
+
+`dir DIRNAME ...'
+ Add directory DIRNAME to the front of the source path. Several
+ directory names may be given to this command, separated by `:'
+ (`;' on MS-DOS and MS-Windows, where `:' usually appears as part
+ of absolute file names) or whitespace. You may specify a
+ directory that is already in the source path; this moves it
+ forward, so GDB searches it sooner.
+
+ You can use the string `$cdir' to refer to the compilation
+ directory (if one is recorded), and `$cwd' to refer to the current
+ working directory. `$cwd' is not the same as `.'--the former
+ tracks the current working directory as it changes during your GDB
+ session, while the latter is immediately expanded to the current
+ directory at the time you add an entry to the source path.
+
+`directory'
+ Reset the source path to its default value (`$cdir:$cwd' on Unix
+ systems). This requires confirmation.
+
+`set directories PATH-LIST'
+ Set the source path to PATH-LIST. `$cdir:$cwd' are added if
+ missing.
+
+`show directories'
+ Print the source path: show which directories it contains.
+
+`set substitute-path FROM TO'
+ Define a source path substitution rule, and add it at the end of
+ the current list of existing substitution rules. If a rule with
+ the same FROM was already defined, then the old rule is also
+ deleted.
+
+ For example, if the file `/foo/bar/baz.c' was moved to
+ `/mnt/cross/baz.c', then the command
+
+ (gdb) set substitute-path /usr/src /mnt/cross
+
+ will tell GDB to replace `/usr/src' with `/mnt/cross', which will
+ allow GDB to find the file `baz.c' even though it was moved.
+
+ In the case when more than one substitution rule have been defined,
+ the rules are evaluated one by one in the order where they have
+ been defined. The first one matching, if any, is selected to
+ perform the substitution.
+
+ For instance, if we had entered the following commands:
+
+ (gdb) set substitute-path /usr/src/include /mnt/include
+ (gdb) set substitute-path /usr/src /mnt/src
+
+ GDB would then rewrite `/usr/src/include/defs.h' into
+ `/mnt/include/defs.h' by using the first rule. However, it would
+ use the second rule to rewrite `/usr/src/lib/foo.c' into
+ `/mnt/src/lib/foo.c'.
+
+`unset substitute-path [path]'
+ If a path is specified, search the current list of substitution
+ rules for a rule that would rewrite that path. Delete that rule
+ if found. A warning is emitted by the debugger if no rule could
+ be found.
+
+ If no path is specified, then all substitution rules are deleted.
+
+`show substitute-path [path]'
+ If a path is specified, then print the source path substitution
+ rule which would rewrite that path, if any.
+
+ If no path is specified, then print all existing source path
+ substitution rules.
+
+
+ If your source path is cluttered with directories that are no longer
+of interest, GDB may sometimes cause confusion by finding the wrong
+versions of source. You can correct the situation as follows:
+
+ 1. Use `directory' with no argument to reset the source path to its
+ default value.
+
+ 2. Use `directory' with suitable arguments to reinstall the
+ directories you want in the source path. You can add all the
+ directories in one command.
+
+
+File: gdb.info, Node: Machine Code, Prev: Source Path, Up: Source
+
+9.6 Source and Machine Code
+===========================
+
+You can use the command `info line' to map source lines to program
+addresses (and vice versa), and the command `disassemble' to display a
+range of addresses as machine instructions. You can use the command
+`set disassemble-next-line' to set whether to disassemble next source
+line when execution stops. When run under GNU Emacs mode, the `info
+line' command causes the arrow to point to the line specified. Also,
+`info line' prints addresses in symbolic form as well as hex.
+
+`info line LINESPEC'
+ Print the starting and ending addresses of the compiled code for
+ source line LINESPEC. You can specify source lines in any of the
+ ways documented in *note Specify Location::.
+
+ For example, we can use `info line' to discover the location of the
+object code for the first line of function `m4_changequote':
+
+ (gdb) info line m4_changequote
+ Line 895 of "builtin.c" starts at pc 0x634c and ends at 0x6350.
+
+We can also inquire (using `*ADDR' as the form for LINESPEC) what
+source line covers a particular address:
+ (gdb) info line *0x63ff
+ Line 926 of "builtin.c" starts at pc 0x63e4 and ends at 0x6404.
+
+ After `info line', the default address for the `x' command is
+changed to the starting address of the line, so that `x/i' is
+sufficient to begin examining the machine code (*note Examining Memory:
+Memory.). Also, this address is saved as the value of the convenience
+variable `$_' (*note Convenience Variables: Convenience Vars.).
+
+`disassemble'
+`disassemble /m'
+`disassemble /r'
+ This specialized command dumps a range of memory as machine
+ instructions. It can also print mixed source+disassembly by
+ specifying the `/m' modifier and print the raw instructions in hex
+ as well as in symbolic form by specifying the `/r'. The default
+ memory range is the function surrounding the program counter of
+ the selected frame. A single argument to this command is a
+ program counter value; GDB dumps the function surrounding this
+ value. When two arguments are given, they should be separated by
+ a comma, possibly surrounded by whitespace. The arguments specify
+ a range of addresses to dump, in one of two forms:
+
+ `START,END'
+ the addresses from START (inclusive) to END (exclusive)
+
+ `START,+LENGTH'
+ the addresses from START (inclusive) to `START+LENGTH'
+ (exclusive).
+
+ When 2 arguments are specified, the name of the function is also
+ printed (since there could be several functions in the given
+ range).
+
+ The argument(s) can be any expression yielding a numeric value,
+ such as `0x32c4', `&main+10' or `$pc - 8'.
+
+ If the range of memory being disassembled contains current program
+ counter, the instruction at that location is shown with a `=>'
+ marker.
+
+ The following example shows the disassembly of a range of addresses
+of HP PA-RISC 2.0 code:
+
+ (gdb) disas 0x32c4, 0x32e4
+ Dump of assembler code from 0x32c4 to 0x32e4:
+ 0x32c4 <main+204>: addil 0,dp
+ 0x32c8 <main+208>: ldw 0x22c(sr0,r1),r26
+ 0x32cc <main+212>: ldil 0x3000,r31
+ 0x32d0 <main+216>: ble 0x3f8(sr4,r31)
+ 0x32d4 <main+220>: ldo 0(r31),rp
+ 0x32d8 <main+224>: addil -0x800,dp
+ 0x32dc <main+228>: ldo 0x588(r1),r26
+ 0x32e0 <main+232>: ldil 0x3000,r31
+ End of assembler dump.
+
+ Here is an example showing mixed source+assembly for Intel x86, when
+the program is stopped just after function prologue:
+
+ (gdb) disas /m main
+ Dump of assembler code for function main:
+ 5 {
+ 0x08048330 <+0>: push %ebp
+ 0x08048331 <+1>: mov %esp,%ebp
+ 0x08048333 <+3>: sub $0x8,%esp
+ 0x08048336 <+6>: and $0xfffffff0,%esp
+ 0x08048339 <+9>: sub $0x10,%esp
+
+ 6 printf ("Hello.\n");
+ => 0x0804833c <+12>: movl $0x8048440,(%esp)
+ 0x08048343 <+19>: call 0x8048284 <puts@plt>
+
+ 7 return 0;
+ 8 }
+ 0x08048348 <+24>: mov $0x0,%eax
+ 0x0804834d <+29>: leave
+ 0x0804834e <+30>: ret
+
+ End of assembler dump.
+
+ Here is another example showing raw instructions in hex for AMD
+x86-64,
+
+ (gdb) disas /r 0x400281,+10
+ Dump of assembler code from 0x400281 to 0x40028b:
+ 0x0000000000400281: 38 36 cmp %dh,(%rsi)
+ 0x0000000000400283: 2d 36 34 2e 73 sub $0x732e3436,%eax
+ 0x0000000000400288: 6f outsl %ds:(%rsi),(%dx)
+ 0x0000000000400289: 2e 32 00 xor %cs:(%rax),%al
+ End of assembler dump.
+
+ Some architectures have more than one commonly-used set of
+instruction mnemonics or other syntax.
+
+ For programs that were dynamically linked and use shared libraries,
+instructions that call functions or branch to locations in the shared
+libraries might show a seemingly bogus location--it's actually a
+location of the relocation table. On some architectures, GDB might be
+able to resolve these to actual function names.
+
+`set disassembly-flavor INSTRUCTION-SET'
+ Select the instruction set to use when disassembling the program
+ via the `disassemble' or `x/i' commands.
+
+ Currently this command is only defined for the Intel x86 family.
+ You can set INSTRUCTION-SET to either `intel' or `att'. The
+ default is `att', the AT&T flavor used by default by Unix
+ assemblers for x86-based targets.
+
+`show disassembly-flavor'
+ Show the current setting of the disassembly flavor.
+
+`set disassemble-next-line'
+`show disassemble-next-line'
+ Control whether or not GDB will disassemble the next source line
+ or instruction when execution stops. If ON, GDB will display
+ disassembly of the next source line when execution of the program
+ being debugged stops. This is _in addition_ to displaying the
+ source line itself, which GDB always does if possible. If the
+ next source line cannot be displayed for some reason (e.g., if GDB
+ cannot find the source file, or there's no line info in the debug
+ info), GDB will display disassembly of the next _instruction_
+ instead of showing the next source line. If AUTO, GDB will
+ display disassembly of next instruction only if the source line
+ cannot be displayed. This setting causes GDB to display some
+ feedback when you step through a function with no line info or
+ whose source file is unavailable. The default is OFF, which means
+ never display the disassembly of the next line or instruction.
+
+
+File: gdb.info, Node: Data, Next: Optimized Code, Prev: Source, Up: Top
+
+10 Examining Data
+*****************
+
+The usual way to examine data in your program is with the `print'
+command (abbreviated `p'), or its synonym `inspect'. It evaluates and
+prints the value of an expression of the language your program is
+written in (*note Using GDB with Different Languages: Languages.). It
+may also print the expression using a Python-based pretty-printer
+(*note Pretty Printing::).
+
+`print EXPR'
+`print /F EXPR'
+ EXPR is an expression (in the source language). By default the
+ value of EXPR is printed in a format appropriate to its data type;
+ you can choose a different format by specifying `/F', where F is a
+ letter specifying the format; see *note Output Formats: Output
+ Formats.
+
+`print'
+`print /F'
+ If you omit EXPR, GDB displays the last value again (from the
+ "value history"; *note Value History: Value History.). This
+ allows you to conveniently inspect the same value in an
+ alternative format.
+
+ A more low-level way of examining data is with the `x' command. It
+examines data in memory at a specified address and prints it in a
+specified format. *Note Examining Memory: Memory.
+
+ If you are interested in information about types, or about how the
+fields of a struct or a class are declared, use the `ptype EXP' command
+rather than `print'. *Note Examining the Symbol Table: Symbols.
+
+* Menu:
+
+* Expressions:: Expressions
+* Ambiguous Expressions:: Ambiguous Expressions
+* Variables:: Program variables
+* Arrays:: Artificial arrays
+* Output Formats:: Output formats
+* Memory:: Examining memory
+* Auto Display:: Automatic display
+* Print Settings:: Print settings
+* Pretty Printing:: Python pretty printing
+* Value History:: Value history
+* Convenience Vars:: Convenience variables
+* Registers:: Registers
+* Floating Point Hardware:: Floating point hardware
+* Vector Unit:: Vector Unit
+* OS Information:: Auxiliary data provided by operating system
+* Memory Region Attributes:: Memory region attributes
+* Dump/Restore Files:: Copy between memory and a file
+* Core File Generation:: Cause a program dump its core
+* Character Sets:: Debugging programs that use a different
+ character set than GDB does
+* Caching Remote Data:: Data caching for remote targets
+* Searching Memory:: Searching memory for a sequence of bytes
+
+
+File: gdb.info, Node: Expressions, Next: Ambiguous Expressions, Up: Data
+
+10.1 Expressions
+================
+
+`print' and many other GDB commands accept an expression and compute
+its value. Any kind of constant, variable or operator defined by the
+programming language you are using is valid in an expression in GDB.
+This includes conditional expressions, function calls, casts, and
+string constants. It also includes preprocessor macros, if you
+compiled your program to include this information; see *note
+Compilation::.
+
+ GDB supports array constants in expressions input by the user. The
+syntax is {ELEMENT, ELEMENT...}. For example, you can use the command
+`print {1, 2, 3}' to create an array of three integers. If you pass an
+array to a function or assign it to a program variable, GDB copies the
+array to memory that is `malloc'ed in the target program.
+
+ Because C is so widespread, most of the expressions shown in
+examples in this manual are in C. *Note Using GDB with Different
+Languages: Languages, for information on how to use expressions in other
+languages.
+
+ In this section, we discuss operators that you can use in GDB
+expressions regardless of your programming language.
+
+ Casts are supported in all languages, not just in C, because it is so
+useful to cast a number into a pointer in order to examine a structure
+at that address in memory.
+
+ GDB supports these operators, in addition to those common to
+programming languages:
+
+`@'
+ `@' is a binary operator for treating parts of memory as arrays.
+ *Note Artificial Arrays: Arrays, for more information.
+
+`::'
+ `::' allows you to specify a variable in terms of the file or
+ function where it is defined. *Note Program Variables: Variables.
+
+`{TYPE} ADDR'
+ Refers to an object of type TYPE stored at address ADDR in memory.
+ ADDR may be any expression whose value is an integer or pointer
+ (but parentheses are required around binary operators, just as in
+ a cast). This construct is allowed regardless of what kind of
+ data is normally supposed to reside at ADDR.
+
+
+File: gdb.info, Node: Ambiguous Expressions, Next: Variables, Prev: Expressions, Up: Data
+
+10.2 Ambiguous Expressions
+==========================
+
+Expressions can sometimes contain some ambiguous elements. For
+instance, some programming languages (notably Ada, C++ and Objective-C)
+permit a single function name to be defined several times, for
+application in different contexts. This is called "overloading".
+Another example involving Ada is generics. A "generic package" is
+similar to C++ templates and is typically instantiated several times,
+resulting in the same function name being defined in different contexts.
+
+ In some cases and depending on the language, it is possible to adjust
+the expression to remove the ambiguity. For instance in C++, you can
+specify the signature of the function you want to break on, as in
+`break FUNCTION(TYPES)'. In Ada, using the fully qualified name of
+your function often makes the expression unambiguous as well.
+
+ When an ambiguity that needs to be resolved is detected, the debugger
+has the capability to display a menu of numbered choices for each
+possibility, and then waits for the selection with the prompt `>'. The
+first option is always `[0] cancel', and typing `0 <RET>' aborts the
+current command. If the command in which the expression was used
+allows more than one choice to be selected, the next option in the menu
+is `[1] all', and typing `1 <RET>' selects all possible choices.
+
+ For example, the following session excerpt shows an attempt to set a
+breakpoint at the overloaded symbol `String::after'. We choose three
+particular definitions of that function name:
+
+ (gdb) b String::after
+ [0] cancel
+ [1] all
+ [2] file:String.cc; line number:867
+ [3] file:String.cc; line number:860
+ [4] file:String.cc; line number:875
+ [5] file:String.cc; line number:853
+ [6] file:String.cc; line number:846
+ [7] file:String.cc; line number:735
+ > 2 4 6
+ Breakpoint 1 at 0xb26c: file String.cc, line 867.
+ Breakpoint 2 at 0xb344: file String.cc, line 875.
+ Breakpoint 3 at 0xafcc: file String.cc, line 846.
+ Multiple breakpoints were set.
+ Use the "delete" command to delete unwanted
+ breakpoints.
+ (gdb)
+
+`set multiple-symbols MODE'
+ This option allows you to adjust the debugger behavior when an
+ expression is ambiguous.
+
+ By default, MODE is set to `all'. If the command with which the
+ expression is used allows more than one choice, then GDB
+ automatically selects all possible choices. For instance,
+ inserting a breakpoint on a function using an ambiguous name
+ results in a breakpoint inserted on each possible match. However,
+ if a unique choice must be made, then GDB uses the menu to help
+ you disambiguate the expression. For instance, printing the
+ address of an overloaded function will result in the use of the
+ menu.
+
+ When MODE is set to `ask', the debugger always uses the menu when
+ an ambiguity is detected.
+
+ Finally, when MODE is set to `cancel', the debugger reports an
+ error due to the ambiguity and the command is aborted.
+
+`show multiple-symbols'
+ Show the current value of the `multiple-symbols' setting.
+
+
+File: gdb.info, Node: Variables, Next: Arrays, Prev: Ambiguous Expressions, Up: Data
+
+10.3 Program Variables
+======================
+
+The most common kind of expression to use is the name of a variable in
+your program.
+
+ Variables in expressions are understood in the selected stack frame
+(*note Selecting a Frame: Selection.); they must be either:
+
+ * global (or file-static)
+
+or
+
+ * visible according to the scope rules of the programming language
+ from the point of execution in that frame
+
+This means that in the function
+
+ foo (a)
+ int a;
+ {
+ bar (a);
+ {
+ int b = test ();
+ bar (b);
+ }
+ }
+
+you can examine and use the variable `a' whenever your program is
+executing within the function `foo', but you can only use or examine
+the variable `b' while your program is executing inside the block where
+`b' is declared.
+
+ There is an exception: you can refer to a variable or function whose
+scope is a single source file even if the current execution point is not
+in this file. But it is possible to have more than one such variable or
+function with the same name (in different source files). If that
+happens, referring to that name has unpredictable effects. If you wish,
+you can specify a static variable in a particular function or file,
+using the colon-colon (`::') notation:
+
+ FILE::VARIABLE
+ FUNCTION::VARIABLE
+
+Here FILE or FUNCTION is the name of the context for the static
+VARIABLE. In the case of file names, you can use quotes to make sure
+GDB parses the file name as a single word--for example, to print a
+global value of `x' defined in `f2.c':
+
+ (gdb) p 'f2.c'::x
+
+ This use of `::' is very rarely in conflict with the very similar
+use of the same notation in C++. GDB also supports use of the C++
+scope resolution operator in GDB expressions.
+
+ _Warning:_ Occasionally, a local variable may appear to have the
+ wrong value at certain points in a function--just after entry to a
+ new scope, and just before exit.
+ You may see this problem when you are stepping by machine
+instructions. This is because, on most machines, it takes more than
+one instruction to set up a stack frame (including local variable
+definitions); if you are stepping by machine instructions, variables
+may appear to have the wrong values until the stack frame is completely
+built. On exit, it usually also takes more than one machine
+instruction to destroy a stack frame; after you begin stepping through
+that group of instructions, local variable definitions may be gone.
+
+ This may also happen when the compiler does significant
+optimizations. To be sure of always seeing accurate values, turn off
+all optimization when compiling.
+
+ Another possible effect of compiler optimizations is to optimize
+unused variables out of existence, or assign variables to registers (as
+opposed to memory addresses). Depending on the support for such cases
+offered by the debug info format used by the compiler, GDB might not be
+able to display values for such local variables. If that happens, GDB
+will print a message like this:
+
+ No symbol "foo" in current context.
+
+ To solve such problems, either recompile without optimizations, or
+use a different debug info format, if the compiler supports several such
+formats. For example, GCC, the GNU C/C++ compiler, usually supports
+the `-gstabs+' option. `-gstabs+' produces debug info in a format that
+is superior to formats such as COFF. You may be able to use DWARF 2
+(`-gdwarf-2'), which is also an effective form for debug info. *Note
+Options for Debugging Your Program or GCC: (gcc.info)Debugging Options.
+*Note C and C++: C, for more information about debug info formats that
+are best suited to C++ programs.
+
+ If you ask to print an object whose contents are unknown to GDB,
+e.g., because its data type is not completely specified by the debug
+information, GDB will say `<incomplete type>'. *Note incomplete type:
+Symbols, for more about this.
+
+ Strings are identified as arrays of `char' values without specified
+signedness. Arrays of either `signed char' or `unsigned char' get
+printed as arrays of 1 byte sized integers. `-fsigned-char' or
+`-funsigned-char' GCC options have no effect as GDB defines literal
+string type `"char"' as `char' without a sign. For program code
+
+ char var0[] = "A";
+ signed char var1[] = "A";
+
+ You get during debugging
+ (gdb) print var0
+ $1 = "A"
+ (gdb) print var1
+ $2 = {65 'A', 0 '\0'}
+
+
+File: gdb.info, Node: Arrays, Next: Output Formats, Prev: Variables, Up: Data
+
+10.4 Artificial Arrays
+======================
+
+It is often useful to print out several successive objects of the same
+type in memory; a section of an array, or an array of dynamically
+determined size for which only a pointer exists in the program.
+
+ You can do this by referring to a contiguous span of memory as an
+"artificial array", using the binary operator `@'. The left operand of
+`@' should be the first element of the desired array and be an
+individual object. The right operand should be the desired length of
+the array. The result is an array value whose elements are all of the
+type of the left argument. The first element is actually the left
+argument; the second element comes from bytes of memory immediately
+following those that hold the first element, and so on. Here is an
+example. If a program says
+
+ int *array = (int *) malloc (len * sizeof (int));
+
+you can print the contents of `array' with
+
+ p *array@len
+
+ The left operand of `@' must reside in memory. Array values made
+with `@' in this way behave just like other arrays in terms of
+subscripting, and are coerced to pointers when used in expressions.
+Artificial arrays most often appear in expressions via the value history
+(*note Value History: Value History.), after printing one out.
+
+ Another way to create an artificial array is to use a cast. This
+re-interprets a value as if it were an array. The value need not be in
+memory:
+ (gdb) p/x (short[2])0x12345678
+ $1 = {0x1234, 0x5678}
+
+ As a convenience, if you leave the array length out (as in
+`(TYPE[])VALUE') GDB calculates the size to fill the value (as
+`sizeof(VALUE)/sizeof(TYPE)':
+ (gdb) p/x (short[])0x12345678
+ $2 = {0x1234, 0x5678}
+
+ Sometimes the artificial array mechanism is not quite enough; in
+moderately complex data structures, the elements of interest may not
+actually be adjacent--for example, if you are interested in the values
+of pointers in an array. One useful work-around in this situation is
+to use a convenience variable (*note Convenience Variables: Convenience
+Vars.) as a counter in an expression that prints the first interesting
+value, and then repeat that expression via <RET>. For instance,
+suppose you have an array `dtab' of pointers to structures, and you are
+interested in the values of a field `fv' in each structure. Here is an
+example of what you might type:
+
+ set $i = 0
+ p dtab[$i++]->fv
+ <RET>
+ <RET>
+ ...
+
+
+File: gdb.info, Node: Output Formats, Next: Memory, Prev: Arrays, Up: Data
+
+10.5 Output Formats
+===================
+
+By default, GDB prints a value according to its data type. Sometimes
+this is not what you want. For example, you might want to print a
+number in hex, or a pointer in decimal. Or you might want to view data
+in memory at a certain address as a character string or as an
+instruction. To do these things, specify an "output format" when you
+print a value.
+
+ The simplest use of output formats is to say how to print a value
+already computed. This is done by starting the arguments of the
+`print' command with a slash and a format letter. The format letters
+supported are:
+
+`x'
+ Regard the bits of the value as an integer, and print the integer
+ in hexadecimal.
+
+`d'
+ Print as integer in signed decimal.
+
+`u'
+ Print as integer in unsigned decimal.
+
+`o'
+ Print as integer in octal.
+
+`t'
+ Print as integer in binary. The letter `t' stands for "two". (1)
+
+`a'
+ Print as an address, both absolute in hexadecimal and as an offset
+ from the nearest preceding symbol. You can use this format used
+ to discover where (in what function) an unknown address is located:
+
+ (gdb) p/a 0x54320
+ $3 = 0x54320 <_initialize_vx+396>
+
+ The command `info symbol 0x54320' yields similar results. *Note
+ info symbol: Symbols.
+
+`c'
+ Regard as an integer and print it as a character constant. This
+ prints both the numerical value and its character representation.
+ The character representation is replaced with the octal escape
+ `\nnn' for characters outside the 7-bit ASCII range.
+
+ Without this format, GDB displays `char', `unsigned char', and
+ `signed char' data as character constants. Single-byte members of
+ vectors are displayed as integer data.
+
+`f'
+ Regard the bits of the value as a floating point number and print
+ using typical floating point syntax.
+
+`s'
+ Regard as a string, if possible. With this format, pointers to
+ single-byte data are displayed as null-terminated strings and
+ arrays of single-byte data are displayed as fixed-length strings.
+ Other values are displayed in their natural types.
+
+ Without this format, GDB displays pointers to and arrays of
+ `char', `unsigned char', and `signed char' as strings.
+ Single-byte members of a vector are displayed as an integer array.
+
+`r'
+ Print using the `raw' formatting. By default, GDB will use a
+ Python-based pretty-printer, if one is available (*note Pretty
+ Printing::). This typically results in a higher-level display of
+ the value's contents. The `r' format bypasses any Python
+ pretty-printer which might exist.
+
+ For example, to print the program counter in hex (*note
+Registers::), type
+
+ p/x $pc
+
+Note that no space is required before the slash; this is because command
+names in GDB cannot contain a slash.
+
+ To reprint the last value in the value history with a different
+format, you can use the `print' command with just a format and no
+expression. For example, `p/x' reprints the last value in hex.
+
+ ---------- Footnotes ----------
+
+ (1) `b' cannot be used because these format letters are also used
+with the `x' command, where `b' stands for "byte"; see *note Examining
+Memory: Memory.
+
+
+File: gdb.info, Node: Memory, Next: Auto Display, Prev: Output Formats, Up: Data
+
+10.6 Examining Memory
+=====================
+
+You can use the command `x' (for "examine") to examine memory in any of
+several formats, independently of your program's data types.
+
+`x/NFU ADDR'
+`x ADDR'
+`x'
+ Use the `x' command to examine memory.
+
+ N, F, and U are all optional parameters that specify how much memory
+to display and how to format it; ADDR is an expression giving the
+address where you want to start displaying memory. If you use defaults
+for NFU, you need not type the slash `/'. Several commands set
+convenient defaults for ADDR.
+
+N, the repeat count
+ The repeat count is a decimal integer; the default is 1. It
+ specifies how much memory (counting by units U) to display.
+
+F, the display format
+ The display format is one of the formats used by `print' (`x',
+ `d', `u', `o', `t', `a', `c', `f', `s'), and in addition `i' (for
+ machine instructions). The default is `x' (hexadecimal)
+ initially. The default changes each time you use either `x' or
+ `print'.
+
+U, the unit size
+ The unit size is any of
+
+ `b'
+ Bytes.
+
+ `h'
+ Halfwords (two bytes).
+
+ `w'
+ Words (four bytes). This is the initial default.
+
+ `g'
+ Giant words (eight bytes).
+
+ Each time you specify a unit size with `x', that size becomes the
+ default unit the next time you use `x'. For the `i' format, the
+ unit size is ignored and is normally not written. For the `s'
+ format, the unit size defaults to `b', unless it is explicitly
+ given. Use `x /hs' to display 16-bit char strings and `x /ws' to
+ display 32-bit strings. The next use of `x /s' will again display
+ 8-bit strings. Note that the results depend on the programming
+ language of the current compilation unit. If the language is C,
+ the `s' modifier will use the UTF-16 encoding while `w' will use
+ UTF-32. The encoding is set by the programming language and cannot
+ be altered.
+
+ADDR, starting display address
+ ADDR is the address where you want GDB to begin displaying memory.
+ The expression need not have a pointer value (though it may); it
+ is always interpreted as an integer address of a byte of memory.
+ *Note Expressions: Expressions, for more information on
+ expressions. The default for ADDR is usually just after the last
+ address examined--but several other commands also set the default
+ address: `info breakpoints' (to the address of the last breakpoint
+ listed), `info line' (to the starting address of a line), and
+ `print' (if you use it to display a value from memory).
+
+ For example, `x/3uh 0x54320' is a request to display three halfwords
+(`h') of memory, formatted as unsigned decimal integers (`u'), starting
+at address `0x54320'. `x/4xw $sp' prints the four words (`w') of
+memory above the stack pointer (here, `$sp'; *note Registers:
+Registers.) in hexadecimal (`x').
+
+ Since the letters indicating unit sizes are all distinct from the
+letters specifying output formats, you do not have to remember whether
+unit size or format comes first; either order works. The output
+specifications `4xw' and `4wx' mean exactly the same thing. (However,
+the count N must come first; `wx4' does not work.)
+
+ Even though the unit size U is ignored for the formats `s' and `i',
+you might still want to use a count N; for example, `3i' specifies that
+you want to see three machine instructions, including any operands.
+For convenience, especially when used with the `display' command, the
+`i' format also prints branch delay slot instructions, if any, beyond
+the count specified, which immediately follow the last instruction that
+is within the count. The command `disassemble' gives an alternative
+way of inspecting machine instructions; see *note Source and Machine
+Code: Machine Code.
+
+ All the defaults for the arguments to `x' are designed to make it
+easy to continue scanning memory with minimal specifications each time
+you use `x'. For example, after you have inspected three machine
+instructions with `x/3i ADDR', you can inspect the next seven with just
+`x/7'. If you use <RET> to repeat the `x' command, the repeat count N
+is used again; the other arguments default as for successive uses of
+`x'.
+
+ When examining machine instructions, the instruction at current
+program counter is shown with a `=>' marker. For example:
+
+ (gdb) x/5i $pc-6
+ 0x804837f <main+11>: mov %esp,%ebp
+ 0x8048381 <main+13>: push %ecx
+ 0x8048382 <main+14>: sub $0x4,%esp
+ => 0x8048385 <main+17>: movl $0x8048460,(%esp)
+ 0x804838c <main+24>: call 0x80482d4 <puts@plt>
+
+ The addresses and contents printed by the `x' command are not saved
+in the value history because there is often too much of them and they
+would get in the way. Instead, GDB makes these values available for
+subsequent use in expressions as values of the convenience variables
+`$_' and `$__'. After an `x' command, the last address examined is
+available for use in expressions in the convenience variable `$_'. The
+contents of that address, as examined, are available in the convenience
+variable `$__'.
+
+ If the `x' command has a repeat count, the address and contents saved
+are from the last memory unit printed; this is not the same as the last
+address printed if several units were printed on the last line of
+output.
+
+ When you are debugging a program running on a remote target machine
+(*note Remote Debugging::), you may wish to verify the program's image
+in the remote machine's memory against the executable file you
+downloaded to the target. The `compare-sections' command is provided
+for such situations.
+
+`compare-sections [SECTION-NAME]'
+ Compare the data of a loadable section SECTION-NAME in the
+ executable file of the program being debugged with the same
+ section in the remote machine's memory, and report any mismatches.
+ With no arguments, compares all loadable sections. This command's
+ availability depends on the target's support for the `"qCRC"'
+ remote request.
+
+
+File: gdb.info, Node: Auto Display, Next: Print Settings, Prev: Memory, Up: Data
+
+10.7 Automatic Display
+======================
+
+If you find that you want to print the value of an expression frequently
+(to see how it changes), you might want to add it to the "automatic
+display list" so that GDB prints its value each time your program stops.
+Each expression added to the list is given a number to identify it; to
+remove an expression from the list, you specify that number. The
+automatic display looks like this:
+
+ 2: foo = 38
+ 3: bar[5] = (struct hack *) 0x3804
+
+This display shows item numbers, expressions and their current values.
+As with displays you request manually using `x' or `print', you can
+specify the output format you prefer; in fact, `display' decides
+whether to use `print' or `x' depending your format specification--it
+uses `x' if you specify either the `i' or `s' format, or a unit size;
+otherwise it uses `print'.
+
+`display EXPR'
+ Add the expression EXPR to the list of expressions to display each
+ time your program stops. *Note Expressions: Expressions.
+
+ `display' does not repeat if you press <RET> again after using it.
+
+`display/FMT EXPR'
+ For FMT specifying only a display format and not a size or count,
+ add the expression EXPR to the auto-display list but arrange to
+ display it each time in the specified format FMT. *Note Output
+ Formats: Output Formats.
+
+`display/FMT ADDR'
+ For FMT `i' or `s', or including a unit-size or a number of units,
+ add the expression ADDR as a memory address to be examined each
+ time your program stops. Examining means in effect doing `x/FMT
+ ADDR'. *Note Examining Memory: Memory.
+
+ For example, `display/i $pc' can be helpful, to see the machine
+instruction about to be executed each time execution stops (`$pc' is a
+common name for the program counter; *note Registers: Registers.).
+
+`undisplay DNUMS...'
+`delete display DNUMS...'
+ Remove items from the list of expressions to display. Specify the
+ numbers of the displays that you want affected with the command
+ argument DNUMS. It can be a single display number, one of the
+ numbers shown in the first field of the `info display' display; or
+ it could be a range of display numbers, as in `2-4'.
+
+ `undisplay' does not repeat if you press <RET> after using it.
+ (Otherwise you would just get the error `No display number ...'.)
+
+`disable display DNUMS...'
+ Disable the display of item numbers DNUMS. A disabled display
+ item is not printed automatically, but is not forgotten. It may be
+ enabled again later. Specify the numbers of the displays that you
+ want affected with the command argument DNUMS. It can be a single
+ display number, one of the numbers shown in the first field of the
+ `info display' display; or it could be a range of display numbers,
+ as in `2-4'.
+
+`enable display DNUMS...'
+ Enable display of item numbers DNUMS. It becomes effective once
+ again in auto display of its expression, until you specify
+ otherwise. Specify the numbers of the displays that you want
+ affected with the command argument DNUMS. It can be a single
+ display number, one of the numbers shown in the first field of the
+ `info display' display; or it could be a range of display numbers,
+ as in `2-4'.
+
+`display'
+ Display the current values of the expressions on the list, just as
+ is done when your program stops.
+
+`info display'
+ Print the list of expressions previously set up to display
+ automatically, each one with its item number, but without showing
+ the values. This includes disabled expressions, which are marked
+ as such. It also includes expressions which would not be
+ displayed right now because they refer to automatic variables not
+ currently available.
+
+ If a display expression refers to local variables, then it does not
+make sense outside the lexical context for which it was set up. Such an
+expression is disabled when execution enters a context where one of its
+variables is not defined. For example, if you give the command
+`display last_char' while inside a function with an argument
+`last_char', GDB displays this argument while your program continues to
+stop inside that function. When it stops elsewhere--where there is no
+variable `last_char'--the display is disabled automatically. The next
+time your program stops where `last_char' is meaningful, you can enable
+the display expression once again.
+
+
+File: gdb.info, Node: Print Settings, Next: Pretty Printing, Prev: Auto Display, Up: Data
+
+10.8 Print Settings
+===================
+
+GDB provides the following ways to control how arrays, structures, and
+symbols are printed.
+
+These settings are useful for debugging programs in any language:
+
+`set print address'
+`set print address on'
+ GDB prints memory addresses showing the location of stack traces,
+ structure values, pointer values, breakpoints, and so forth, even
+ when it also displays the contents of those addresses. The default
+ is `on'. For example, this is what a stack frame display looks
+ like with `set print address on':
+
+ (gdb) f
+ #0 set_quotes (lq=0x34c78 "<<", rq=0x34c88 ">>")
+ at input.c:530
+ 530 if (lquote != def_lquote)
+
+`set print address off'
+ Do not print addresses when displaying their contents. For
+ example, this is the same stack frame displayed with `set print
+ address off':
+
+ (gdb) set print addr off
+ (gdb) f
+ #0 set_quotes (lq="<<", rq=">>") at input.c:530
+ 530 if (lquote != def_lquote)
+
+ You can use `set print address off' to eliminate all machine
+ dependent displays from the GDB interface. For example, with
+ `print address off', you should get the same text for backtraces on
+ all machines--whether or not they involve pointer arguments.
+
+`show print address'
+ Show whether or not addresses are to be printed.
+
+ When GDB prints a symbolic address, it normally prints the closest
+earlier symbol plus an offset. If that symbol does not uniquely
+identify the address (for example, it is a name whose scope is a single
+source file), you may need to clarify. One way to do this is with
+`info line', for example `info line *0x4537'. Alternately, you can set
+GDB to print the source file and line number when it prints a symbolic
+address:
+
+`set print symbol-filename on'
+ Tell GDB to print the source file name and line number of a symbol
+ in the symbolic form of an address.
+
+`set print symbol-filename off'
+ Do not print source file name and line number of a symbol. This
+ is the default.
+
+`show print symbol-filename'
+ Show whether or not GDB will print the source file name and line
+ number of a symbol in the symbolic form of an address.
+
+ Another situation where it is helpful to show symbol filenames and
+line numbers is when disassembling code; GDB shows you the line number
+and source file that corresponds to each instruction.
+
+ Also, you may wish to see the symbolic form only if the address being
+printed is reasonably close to the closest earlier symbol:
+
+`set print max-symbolic-offset MAX-OFFSET'
+ Tell GDB to only display the symbolic form of an address if the
+ offset between the closest earlier symbol and the address is less
+ than MAX-OFFSET. The default is 0, which tells GDB to always
+ print the symbolic form of an address if any symbol precedes it.
+
+`show print max-symbolic-offset'
+ Ask how large the maximum offset is that GDB prints in a symbolic
+ address.
+
+ If you have a pointer and you are not sure where it points, try `set
+print symbol-filename on'. Then you can determine the name and source
+file location of the variable where it points, using `p/a POINTER'.
+This interprets the address in symbolic form. For example, here GDB
+shows that a variable `ptt' points at another variable `t', defined in
+`hi2.c':
+
+ (gdb) set print symbol-filename on
+ (gdb) p/a ptt
+ $4 = 0xe008 <t in hi2.c>
+
+ _Warning:_ For pointers that point to a local variable, `p/a' does
+ not show the symbol name and filename of the referent, even with
+ the appropriate `set print' options turned on.
+
+ Other settings control how different kinds of objects are printed:
+
+`set print array'
+`set print array on'
+ Pretty print arrays. This format is more convenient to read, but
+ uses more space. The default is off.
+
+`set print array off'
+ Return to compressed format for arrays.
+
+`show print array'
+ Show whether compressed or pretty format is selected for displaying
+ arrays.
+
+`set print array-indexes'
+`set print array-indexes on'
+ Print the index of each element when displaying arrays. May be
+ more convenient to locate a given element in the array or quickly
+ find the index of a given element in that printed array. The
+ default is off.
+
+`set print array-indexes off'
+ Stop printing element indexes when displaying arrays.
+
+`show print array-indexes'
+ Show whether the index of each element is printed when displaying
+ arrays.
+
+`set print elements NUMBER-OF-ELEMENTS'
+ Set a limit on how many elements of an array GDB will print. If
+ GDB is printing a large array, it stops printing after it has
+ printed the number of elements set by the `set print elements'
+ command. This limit also applies to the display of strings. When
+ GDB starts, this limit is set to 200. Setting NUMBER-OF-ELEMENTS
+ to zero means that the printing is unlimited.
+
+`show print elements'
+ Display the number of elements of a large array that GDB will
+ print. If the number is 0, then the printing is unlimited.
+
+`set print frame-arguments VALUE'
+ This command allows to control how the values of arguments are
+ printed when the debugger prints a frame (*note Frames::). The
+ possible values are:
+
+ `all'
+ The values of all arguments are printed.
+
+ `scalars'
+ Print the value of an argument only if it is a scalar. The
+ value of more complex arguments such as arrays, structures,
+ unions, etc, is replaced by `...'. This is the default.
+ Here is an example where only scalar arguments are shown:
+
+ #1 0x08048361 in call_me (i=3, s=..., ss=0xbf8d508c, u=..., e=green)
+ at frame-args.c:23
+
+ `none'
+ None of the argument values are printed. Instead, the value
+ of each argument is replaced by `...'. In this case, the
+ example above now becomes:
+
+ #1 0x08048361 in call_me (i=..., s=..., ss=..., u=..., e=...)
+ at frame-args.c:23
+
+ By default, only scalar arguments are printed. This command can
+ be used to configure the debugger to print the value of all
+ arguments, regardless of their type. However, it is often
+ advantageous to not print the value of more complex parameters.
+ For instance, it reduces the amount of information printed in each
+ frame, making the backtrace more readable. Also, it improves
+ performance when displaying Ada frames, because the computation of
+ large arguments can sometimes be CPU-intensive, especially in
+ large applications. Setting `print frame-arguments' to `scalars'
+ (the default) or `none' avoids this computation, thus speeding up
+ the display of each Ada frame.
+
+`show print frame-arguments'
+ Show how the value of arguments should be displayed when printing
+ a frame.
+
+`set print repeats'
+ Set the threshold for suppressing display of repeated array
+ elements. When the number of consecutive identical elements of an
+ array exceeds the threshold, GDB prints the string `"<repeats N
+ times>"', where N is the number of identical repetitions, instead
+ of displaying the identical elements themselves. Setting the
+ threshold to zero will cause all elements to be individually
+ printed. The default threshold is 10.
+
+`show print repeats'
+ Display the current threshold for printing repeated identical
+ elements.
+
+`set print null-stop'
+ Cause GDB to stop printing the characters of an array when the
+ first NULL is encountered. This is useful when large arrays
+ actually contain only short strings. The default is off.
+
+`show print null-stop'
+ Show whether GDB stops printing an array on the first NULL
+ character.
+
+`set print pretty on'
+ Cause GDB to print structures in an indented format with one member
+ per line, like this:
+
+ $1 = {
+ next = 0x0,
+ flags = {
+ sweet = 1,
+ sour = 1
+ },
+ meat = 0x54 "Pork"
+ }
+
+`set print pretty off'
+ Cause GDB to print structures in a compact format, like this:
+
+ $1 = {next = 0x0, flags = {sweet = 1, sour = 1}, \
+ meat = 0x54 "Pork"}
+
+ This is the default format.
+
+`show print pretty'
+ Show which format GDB is using to print structures.
+
+`set print sevenbit-strings on'
+ Print using only seven-bit characters; if this option is set, GDB
+ displays any eight-bit characters (in strings or character values)
+ using the notation `\'NNN. This setting is best if you are
+ working in English (ASCII) and you use the high-order bit of
+ characters as a marker or "meta" bit.
+
+`set print sevenbit-strings off'
+ Print full eight-bit characters. This allows the use of more
+ international character sets, and is the default.
+
+`show print sevenbit-strings'
+ Show whether or not GDB is printing only seven-bit characters.
+
+`set print union on'
+ Tell GDB to print unions which are contained in structures and
+ other unions. This is the default setting.
+
+`set print union off'
+ Tell GDB not to print unions which are contained in structures and
+ other unions. GDB will print `"{...}"' instead.
+
+`show print union'
+ Ask GDB whether or not it will print unions which are contained in
+ structures and other unions.
+
+ For example, given the declarations
+
+ typedef enum {Tree, Bug} Species;
+ typedef enum {Big_tree, Acorn, Seedling} Tree_forms;
+ typedef enum {Caterpillar, Cocoon, Butterfly}
+ Bug_forms;
+
+ struct thing {
+ Species it;
+ union {
+ Tree_forms tree;
+ Bug_forms bug;
+ } form;
+ };
+
+ struct thing foo = {Tree, {Acorn}};
+
+ with `set print union on' in effect `p foo' would print
+
+ $1 = {it = Tree, form = {tree = Acorn, bug = Cocoon}}
+
+ and with `set print union off' in effect it would print
+
+ $1 = {it = Tree, form = {...}}
+
+ `set print union' affects programs written in C-like languages and
+ in Pascal.
+
+These settings are of interest when debugging C++ programs:
+
+`set print demangle'
+`set print demangle on'
+ Print C++ names in their source form rather than in the encoded
+ ("mangled") form passed to the assembler and linker for type-safe
+ linkage. The default is on.
+
+`show print demangle'
+ Show whether C++ names are printed in mangled or demangled form.
+
+`set print asm-demangle'
+`set print asm-demangle on'
+ Print C++ names in their source form rather than their mangled
+ form, even in assembler code printouts such as instruction
+ disassemblies. The default is off.
+
+`show print asm-demangle'
+ Show whether C++ names in assembly listings are printed in mangled
+ or demangled form.
+
+`set demangle-style STYLE'
+ Choose among several encoding schemes used by different compilers
+ to represent C++ names. The choices for STYLE are currently:
+
+ `auto'
+ Allow GDB to choose a decoding style by inspecting your
+ program.
+
+ `gnu'
+ Decode based on the GNU C++ compiler (`g++') encoding
+ algorithm. This is the default.
+
+ `hp'
+ Decode based on the HP ANSI C++ (`aCC') encoding algorithm.
+
+ `lucid'
+ Decode based on the Lucid C++ compiler (`lcc') encoding
+ algorithm.
+
+ `arm'
+ Decode using the algorithm in the `C++ Annotated Reference
+ Manual'. *Warning:* this setting alone is not sufficient to
+ allow debugging `cfront'-generated executables. GDB would
+ require further enhancement to permit that.
+
+ If you omit STYLE, you will see a list of possible formats.
+
+`show demangle-style'
+ Display the encoding style currently in use for decoding C++
+ symbols.
+
+`set print object'
+`set print object on'
+ When displaying a pointer to an object, identify the _actual_
+ (derived) type of the object rather than the _declared_ type, using
+ the virtual function table.
+
+`set print object off'
+ Display only the declared type of objects, without reference to the
+ virtual function table. This is the default setting.
+
+`show print object'
+ Show whether actual, or declared, object types are displayed.
+
+`set print static-members'
+`set print static-members on'
+ Print static members when displaying a C++ object. The default is
+ on.
+
+`set print static-members off'
+ Do not print static members when displaying a C++ object.
+
+`show print static-members'
+ Show whether C++ static members are printed or not.
+
+`set print pascal_static-members'
+`set print pascal_static-members on'
+ Print static members when displaying a Pascal object. The default
+ is on.
+
+`set print pascal_static-members off'
+ Do not print static members when displaying a Pascal object.
+
+`show print pascal_static-members'
+ Show whether Pascal static members are printed or not.
+
+`set print vtbl'
+`set print vtbl on'
+ Pretty print C++ virtual function tables. The default is off.
+ (The `vtbl' commands do not work on programs compiled with the HP
+ ANSI C++ compiler (`aCC').)
+
+`set print vtbl off'
+ Do not pretty print C++ virtual function tables.
+
+`show print vtbl'
+ Show whether C++ virtual function tables are pretty printed, or
+ not.
+
+
+File: gdb.info, Node: Pretty Printing, Next: Value History, Prev: Print Settings, Up: Data
+
+10.9 Pretty Printing
+====================
+
+GDB provides a mechanism to allow pretty-printing of values using
+Python code. It greatly simplifies the display of complex objects.
+This mechanism works for both MI and the CLI.
+
+* Menu:
+
+* Pretty-Printer Introduction:: Introduction to pretty-printers
+* Pretty-Printer Example:: An example pretty-printer
+* Pretty-Printer Commands:: Pretty-printer commands
+
+
+File: gdb.info, Node: Pretty-Printer Introduction, Next: Pretty-Printer Example, Up: Pretty Printing
+
+10.9.1 Pretty-Printer Introduction
+----------------------------------
+
+When GDB prints a value, it first sees if there is a pretty-printer
+registered for the value. If there is then GDB invokes the
+pretty-printer to print the value. Otherwise the value is printed
+normally.
+
+ Pretty-printers are normally named. This makes them easy to manage.
+The `info pretty-printer' command will list all the installed
+pretty-printers with their names. If a pretty-printer can handle
+multiple data types, then its "subprinters" are the printers for the
+individual data types. Each such subprinter has its own name. The
+format of the name is PRINTER-NAME;SUBPRINTER-NAME.
+
+ Pretty-printers are installed by "registering" them with GDB.
+Typically they are automatically loaded and registered when the
+corresponding debug information is loaded, thus making them available
+without having to do anything special.
+
+ There are three places where a pretty-printer can be registered.
+
+ * Pretty-printers registered globally are available when debugging
+ all inferiors.
+
+ * Pretty-printers registered with a program space are available only
+ when debugging that program. *Note Progspaces In Python::, for
+ more details on program spaces in Python.
+
+ * Pretty-printers registered with an objfile are loaded and unloaded
+ with the corresponding objfile (e.g., shared library). *Note
+ Objfiles In Python::, for more details on objfiles in Python.
+
+ *Note Selecting Pretty-Printers::, for further information on how
+pretty-printers are selected,
+
+ *Note Writing a Pretty-Printer::, for implementing pretty printers
+for new types.
+
+
+File: gdb.info, Node: Pretty-Printer Example, Next: Pretty-Printer Commands, Prev: Pretty-Printer Introduction, Up: Pretty Printing
+
+10.9.2 Pretty-Printer Example
+-----------------------------
+
+Here is how a C++ `std::string' looks without a pretty-printer:
+
+ (gdb) print s
+ $1 = {
+ static npos = 4294967295,
+ _M_dataplus = {
+ <std::allocator<char>> = {
+ <__gnu_cxx::new_allocator<char>> = {
+ <No data fields>}, <No data fields>
+ },
+ members of std::basic_string<char, std::char_traits<char>,
+ std::allocator<char> >::_Alloc_hider:
+ _M_p = 0x804a014 "abcd"
+ }
+ }
+
+ With a pretty-printer for `std::string' only the contents are
+printed:
+
+ (gdb) print s
+ $2 = "abcd"
+
+
+File: gdb.info, Node: Pretty-Printer Commands, Prev: Pretty-Printer Example, Up: Pretty Printing
+
+10.9.3 Pretty-Printer Commands
+------------------------------
+
+`info pretty-printer [OBJECT-REGEXP [NAME-REGEXP]]'
+ Print the list of installed pretty-printers. This includes
+ disabled pretty-printers, which are marked as such.
+
+ OBJECT-REGEXP is a regular expression matching the objects whose
+ pretty-printers to list. Objects can be `global', the program
+ space's file (*note Progspaces In Python::), and the object files
+ within that program space (*note Objfiles In Python::). *Note
+ Selecting Pretty-Printers::, for details on how GDB looks up a
+ printer from these three objects.
+
+ NAME-REGEXP is a regular expression matching the name of the
+ printers to list.
+
+`disable pretty-printer [OBJECT-REGEXP [NAME-REGEXP]]'
+ Disable pretty-printers matching OBJECT-REGEXP and NAME-REGEXP. A
+ disabled pretty-printer is not forgotten, it may be enabled again
+ later.
+
+`enable pretty-printer [OBJECT-REGEXP [NAME-REGEXP]]'
+ Enable pretty-printers matching OBJECT-REGEXP and NAME-REGEXP.
+
+ Example:
+
+ Suppose we have three pretty-printers installed: one from library1.so
+named `foo' that prints objects of type `foo', and another from
+library2.so named `bar' that prints two types of objects, `bar1' and
+`bar2'.
+
+ (gdb) info pretty-printer
+ library1.so:
+ foo
+ library2.so:
+ bar
+ bar1
+ bar2
+ (gdb) info pretty-printer library2
+ library2.so:
+ bar
+ bar1
+ bar2
+ (gdb) disable pretty-printer library1
+ 1 printer disabled
+ 2 of 3 printers enabled
+ (gdb) info pretty-printer
+ library1.so:
+ foo [disabled]
+ library2.so:
+ bar
+ bar1
+ bar2
+ (gdb) disable pretty-printer library2 bar:bar1
+ 1 printer disabled
+ 1 of 3 printers enabled
+ (gdb) info pretty-printer library2
+ library1.so:
+ foo [disabled]
+ library2.so:
+ bar
+ bar1 [disabled]
+ bar2
+ (gdb) disable pretty-printer library2 bar
+ 1 printer disabled
+ 0 of 3 printers enabled
+ (gdb) info pretty-printer library2
+ library1.so:
+ foo [disabled]
+ library2.so:
+ bar [disabled]
+ bar1 [disabled]
+ bar2
+
+ Note that for `bar' the entire printer can be disabled, as can each
+individual subprinter.
+
+
+File: gdb.info, Node: Value History, Next: Convenience Vars, Prev: Pretty Printing, Up: Data
+
+10.10 Value History
+===================
+
+Values printed by the `print' command are saved in the GDB "value
+history". This allows you to refer to them in other expressions.
+Values are kept until the symbol table is re-read or discarded (for
+example with the `file' or `symbol-file' commands). When the symbol
+table changes, the value history is discarded, since the values may
+contain pointers back to the types defined in the symbol table.
+
+ The values printed are given "history numbers" by which you can
+refer to them. These are successive integers starting with one.
+`print' shows you the history number assigned to a value by printing
+`$NUM = ' before the value; here NUM is the history number.
+
+ To refer to any previous value, use `$' followed by the value's
+history number. The way `print' labels its output is designed to
+remind you of this. Just `$' refers to the most recent value in the
+history, and `$$' refers to the value before that. `$$N' refers to the
+Nth value from the end; `$$2' is the value just prior to `$$', `$$1' is
+equivalent to `$$', and `$$0' is equivalent to `$'.
+
+ For example, suppose you have just printed a pointer to a structure
+and want to see the contents of the structure. It suffices to type
+
+ p *$
+
+ If you have a chain of structures where the component `next' points
+to the next one, you can print the contents of the next one with this:
+
+ p *$.next
+
+You can print successive links in the chain by repeating this
+command--which you can do by just typing <RET>.
+
+ Note that the history records values, not expressions. If the value
+of `x' is 4 and you type these commands:
+
+ print x
+ set x=5
+
+then the value recorded in the value history by the `print' command
+remains 4 even though the value of `x' has changed.
+
+`show values'
+ Print the last ten values in the value history, with their item
+ numbers. This is like `p $$9' repeated ten times, except that
+ `show values' does not change the history.
+
+`show values N'
+ Print ten history values centered on history item number N.
+
+`show values +'
+ Print ten history values just after the values last printed. If
+ no more values are available, `show values +' produces no display.
+
+ Pressing <RET> to repeat `show values N' has exactly the same effect
+as `show values +'.
+
+
+File: gdb.info, Node: Convenience Vars, Next: Registers, Prev: Value History, Up: Data
+
+10.11 Convenience Variables
+===========================
+
+GDB provides "convenience variables" that you can use within GDB to
+hold on to a value and refer to it later. These variables exist
+entirely within GDB; they are not part of your program, and setting a
+convenience variable has no direct effect on further execution of your
+program. That is why you can use them freely.
+
+ Convenience variables are prefixed with `$'. Any name preceded by
+`$' can be used for a convenience variable, unless it is one of the
+predefined machine-specific register names (*note Registers:
+Registers.). (Value history references, in contrast, are _numbers_
+preceded by `$'. *Note Value History: Value History.)
+
+ You can save a value in a convenience variable with an assignment
+expression, just as you would set a variable in your program. For
+example:
+
+ set $foo = *object_ptr
+
+would save in `$foo' the value contained in the object pointed to by
+`object_ptr'.
+
+ Using a convenience variable for the first time creates it, but its
+value is `void' until you assign a new value. You can alter the value
+with another assignment at any time.
+
+ Convenience variables have no fixed types. You can assign a
+convenience variable any type of value, including structures and
+arrays, even if that variable already has a value of a different type.
+The convenience variable, when used as an expression, has the type of
+its current value.
+
+`show convenience'
+ Print a list of convenience variables used so far, and their
+ values. Abbreviated `show conv'.
+
+`init-if-undefined $VARIABLE = EXPRESSION'
+ Set a convenience variable if it has not already been set. This
+ is useful for user-defined commands that keep some state. It is
+ similar, in concept, to using local static variables with
+ initializers in C (except that convenience variables are global).
+ It can also be used to allow users to override default values used
+ in a command script.
+
+ If the variable is already defined then the expression is not
+ evaluated so any side-effects do not occur.
+
+ One of the ways to use a convenience variable is as a counter to be
+incremented or a pointer to be advanced. For example, to print a field
+from successive elements of an array of structures:
+
+ set $i = 0
+ print bar[$i++]->contents
+
+Repeat that command by typing <RET>.
+
+ Some convenience variables are created automatically by GDB and given
+values likely to be useful.
+
+`$_'
+ The variable `$_' is automatically set by the `x' command to the
+ last address examined (*note Examining Memory: Memory.). Other
+ commands which provide a default address for `x' to examine also
+ set `$_' to that address; these commands include `info line' and
+ `info breakpoint'. The type of `$_' is `void *' except when set
+ by the `x' command, in which case it is a pointer to the type of
+ `$__'.
+
+`$__'
+ The variable `$__' is automatically set by the `x' command to the
+ value found in the last address examined. Its type is chosen to
+ match the format in which the data was printed.
+
+`$_exitcode'
+ The variable `$_exitcode' is automatically set to the exit code
+ when the program being debugged terminates.
+
+`$_sdata'
+ The variable `$_sdata' contains extra collected static tracepoint
+ data. *Note Tracepoint Action Lists: Tracepoint Actions. Note
+ that `$_sdata' could be empty, if not inspecting a trace buffer, or
+ if extra static tracepoint data has not been collected.
+
+`$_siginfo'
+ The variable `$_siginfo' contains extra signal information (*note
+ extra signal information::). Note that `$_siginfo' could be
+ empty, if the application has not yet received any signals. For
+ example, it will be empty before you execute the `run' command.
+
+`$_tlb'
+ The variable `$_tlb' is automatically set when debugging
+ applications running on MS-Windows in native mode or connected to
+ gdbserver that supports the `qGetTIBAddr' request. *Note General
+ Query Packets::. This variable contains the address of the thread
+ information block.
+
+
+ On HP-UX systems, if you refer to a function or variable name that
+begins with a dollar sign, GDB searches for a user or system name
+first, before it searches for a convenience variable.
+
+ GDB also supplies some "convenience functions". These have a syntax
+similar to convenience variables. A convenience function can be used
+in an expression just like an ordinary function; however, a convenience
+function is implemented internally to GDB.
+
+`help function'
+ Print a list of all convenience functions.
+
+
+File: gdb.info, Node: Registers, Next: Floating Point Hardware, Prev: Convenience Vars, Up: Data
+
+10.12 Registers
+===============
+
+You can refer to machine register contents, in expressions, as variables
+with names starting with `$'. The names of registers are different for
+each machine; use `info registers' to see the names used on your
+machine.
+
+`info registers'
+ Print the names and values of all registers except floating-point
+ and vector registers (in the selected stack frame).
+
+`info all-registers'
+ Print the names and values of all registers, including
+ floating-point and vector registers (in the selected stack frame).
+
+`info registers REGNAME ...'
+ Print the "relativized" value of each specified register REGNAME.
+ As discussed in detail below, register values are normally
+ relative to the selected stack frame. REGNAME may be any register
+ name valid on the machine you are using, with or without the
+ initial `$'.
+
+ GDB has four "standard" register names that are available (in
+expressions) on most machines--whenever they do not conflict with an
+architecture's canonical mnemonics for registers. The register names
+`$pc' and `$sp' are used for the program counter register and the stack
+pointer. `$fp' is used for a register that contains a pointer to the
+current stack frame, and `$ps' is used for a register that contains the
+processor status. For example, you could print the program counter in
+hex with
+
+ p/x $pc
+
+or print the instruction to be executed next with
+
+ x/i $pc
+
+or add four to the stack pointer(1) with
+
+ set $sp += 4
+
+ Whenever possible, these four standard register names are available
+on your machine even though the machine has different canonical
+mnemonics, so long as there is no conflict. The `info registers'
+command shows the canonical names. For example, on the SPARC, `info
+registers' displays the processor status register as `$psr' but you can
+also refer to it as `$ps'; and on x86-based machines `$ps' is an alias
+for the EFLAGS register.
+
+ GDB always considers the contents of an ordinary register as an
+integer when the register is examined in this way. Some machines have
+special registers which can hold nothing but floating point; these
+registers are considered to have floating point values. There is no way
+to refer to the contents of an ordinary register as floating point value
+(although you can _print_ it as a floating point value with `print/f
+$REGNAME').
+
+ Some registers have distinct "raw" and "virtual" data formats. This
+means that the data format in which the register contents are saved by
+the operating system is not the same one that your program normally
+sees. For example, the registers of the 68881 floating point
+coprocessor are always saved in "extended" (raw) format, but all C
+programs expect to work with "double" (virtual) format. In such cases,
+GDB normally works with the virtual format only (the format that makes
+sense for your program), but the `info registers' command prints the
+data in both formats.
+
+ Some machines have special registers whose contents can be
+interpreted in several different ways. For example, modern x86-based
+machines have SSE and MMX registers that can hold several values packed
+together in several different formats. GDB refers to such registers in
+`struct' notation:
+
+ (gdb) print $xmm1
+ $1 = {
+ v4_float = {0, 3.43859137e-038, 1.54142831e-044, 1.821688e-044},
+ v2_double = {9.92129282474342e-303, 2.7585945287983262e-313},
+ v16_int8 = "\000\000\000\000\3706;\001\v\000\000\000\r\000\000",
+ v8_int16 = {0, 0, 14072, 315, 11, 0, 13, 0},
+ v4_int32 = {0, 20657912, 11, 13},
+ v2_int64 = {88725056443645952, 55834574859},
+ uint128 = 0x0000000d0000000b013b36f800000000
+ }
+
+To set values of such registers, you need to tell GDB which view of the
+register you wish to change, as if you were assigning value to a
+`struct' member:
+
+ (gdb) set $xmm1.uint128 = 0x000000000000000000000000FFFFFFFF
+
+ Normally, register values are relative to the selected stack frame
+(*note Selecting a Frame: Selection.). This means that you get the
+value that the register would contain if all stack frames farther in
+were exited and their saved registers restored. In order to see the
+true contents of hardware registers, you must select the innermost
+frame (with `frame 0').
+
+ However, GDB must deduce where registers are saved, from the machine
+code generated by your compiler. If some registers are not saved, or if
+GDB is unable to locate the saved registers, the selected stack frame
+makes no difference.
+
+ ---------- Footnotes ----------
+
+ (1) This is a way of removing one word from the stack, on machines
+where stacks grow downward in memory (most machines, nowadays). This
+assumes that the innermost stack frame is selected; setting `$sp' is
+not allowed when other stack frames are selected. To pop entire frames
+off the stack, regardless of machine architecture, use `return'; see
+*note Returning from a Function: Returning.
+
+
+File: gdb.info, Node: Floating Point Hardware, Next: Vector Unit, Prev: Registers, Up: Data
+
+10.13 Floating Point Hardware
+=============================
+
+Depending on the configuration, GDB may be able to give you more
+information about the status of the floating point hardware.
+
+`info float'
+ Display hardware-dependent information about the floating point
+ unit. The exact contents and layout vary depending on the
+ floating point chip. Currently, `info float' is supported on the
+ ARM and x86 machines.
+
+
+File: gdb.info, Node: Vector Unit, Next: OS Information, Prev: Floating Point Hardware, Up: Data
+
+10.14 Vector Unit
+=================
+
+Depending on the configuration, GDB may be able to give you more
+information about the status of the vector unit.
+
+`info vector'
+ Display information about the vector unit. The exact contents and
+ layout vary depending on the hardware.
+
+
+File: gdb.info, Node: OS Information, Next: Memory Region Attributes, Prev: Vector Unit, Up: Data
+
+10.15 Operating System Auxiliary Information
+============================================
+
+GDB provides interfaces to useful OS facilities that can help you debug
+your program.
+
+ When GDB runs on a "Posix system" (such as GNU or Unix machines), it
+interfaces with the inferior via the `ptrace' system call. The
+operating system creates a special sata structure, called `struct
+user', for this interface. You can use the command `info udot' to
+display the contents of this data structure.
+
+`info udot'
+ Display the contents of the `struct user' maintained by the OS
+ kernel for the program being debugged. GDB displays the contents
+ of `struct user' as a list of hex numbers, similar to the
+ `examine' command.
+
+ Some operating systems supply an "auxiliary vector" to programs at
+startup. This is akin to the arguments and environment that you
+specify for a program, but contains a system-dependent variety of
+binary values that tell system libraries important details about the
+hardware, operating system, and process. Each value's purpose is
+identified by an integer tag; the meanings are well-known but
+system-specific. Depending on the configuration and operating system
+facilities, GDB may be able to show you this information. For remote
+targets, this functionality may further depend on the remote stub's
+support of the `qXfer:auxv:read' packet, see *note qXfer auxiliary
+vector read::.
+
+`info auxv'
+ Display the auxiliary vector of the inferior, which can be either a
+ live process or a core dump file. GDB prints each tag value
+ numerically, and also shows names and text descriptions for
+ recognized tags. Some values in the vector are numbers, some bit
+ masks, and some pointers to strings or other data. GDB displays
+ each value in the most appropriate form for a recognized tag, and
+ in hexadecimal for an unrecognized tag.
+
+ On some targets, GDB can access operating-system-specific information
+and display it to user, without interpretation. For remote targets,
+this functionality depends on the remote stub's support of the
+`qXfer:osdata:read' packet, see *note qXfer osdata read::.
+
+`info os'
+ List the types of OS information available for the target. If the
+ target does not return a list of possible types, this command will
+ report an error.
+
+`info os processes'
+ Display the list of processes on the target. For each process,
+ GDB prints the process identifier, the name of the user, and the
+ command corresponding to the process.
+
+
+File: gdb.info, Node: Memory Region Attributes, Next: Dump/Restore Files, Prev: OS Information, Up: Data
+
+10.16 Memory Region Attributes
+==============================
+
+"Memory region attributes" allow you to describe special handling
+required by regions of your target's memory. GDB uses attributes to
+determine whether to allow certain types of memory accesses; whether to
+use specific width accesses; and whether to cache target memory. By
+default the description of memory regions is fetched from the target
+(if the current target supports this), but the user can override the
+fetched regions.
+
+ Defined memory regions can be individually enabled and disabled.
+When a memory region is disabled, GDB uses the default attributes when
+accessing memory in that region. Similarly, if no memory regions have
+been defined, GDB uses the default attributes when accessing all memory.
+
+ When a memory region is defined, it is given a number to identify it;
+to enable, disable, or remove a memory region, you specify that number.
+
+`mem LOWER UPPER ATTRIBUTES...'
+ Define a memory region bounded by LOWER and UPPER with attributes
+ ATTRIBUTES..., and add it to the list of regions monitored by GDB.
+ Note that UPPER == 0 is a special case: it is treated as the
+ target's maximum memory address. (0xffff on 16 bit targets,
+ 0xffffffff on 32 bit targets, etc.)
+
+`mem auto'
+ Discard any user changes to the memory regions and use
+ target-supplied regions, if available, or no regions if the target
+ does not support.
+
+`delete mem NUMS...'
+ Remove memory regions NUMS... from the list of regions monitored
+ by GDB.
+
+`disable mem NUMS...'
+ Disable monitoring of memory regions NUMS.... A disabled memory
+ region is not forgotten. It may be enabled again later.
+
+`enable mem NUMS...'
+ Enable monitoring of memory regions NUMS....
+
+`info mem'
+ Print a table of all defined memory regions, with the following
+ columns for each region:
+
+ _Memory Region Number_
+
+ _Enabled or Disabled._
+ Enabled memory regions are marked with `y'. Disabled memory
+ regions are marked with `n'.
+
+ _Lo Address_
+ The address defining the inclusive lower bound of the memory
+ region.
+
+ _Hi Address_
+ The address defining the exclusive upper bound of the memory
+ region.
+
+ _Attributes_
+ The list of attributes set for this memory region.
+
+10.16.1 Attributes
+------------------
+
+10.16.1.1 Memory Access Mode
+............................
+
+The access mode attributes set whether GDB may make read or write
+accesses to a memory region.
+
+ While these attributes prevent GDB from performing invalid memory
+accesses, they do nothing to prevent the target system, I/O DMA, etc.
+from accessing memory.
+
+`ro'
+ Memory is read only.
+
+`wo'
+ Memory is write only.
+
+`rw'
+ Memory is read/write. This is the default.
+
+10.16.1.2 Memory Access Size
+............................
+
+The access size attribute tells GDB to use specific sized accesses in
+the memory region. Often memory mapped device registers require
+specific sized accesses. If no access size attribute is specified, GDB
+may use accesses of any size.
+
+`8'
+ Use 8 bit memory accesses.
+
+`16'
+ Use 16 bit memory accesses.
+
+`32'
+ Use 32 bit memory accesses.
+
+`64'
+ Use 64 bit memory accesses.
+
+10.16.1.3 Data Cache
+....................
+
+The data cache attributes set whether GDB will cache target memory.
+While this generally improves performance by reducing debug protocol
+overhead, it can lead to incorrect results because GDB does not know
+about volatile variables or memory mapped device registers.
+
+`cache'
+ Enable GDB to cache target memory.
+
+`nocache'
+ Disable GDB from caching target memory. This is the default.
+
+10.16.2 Memory Access Checking
+------------------------------
+
+GDB can be instructed to refuse accesses to memory that is not
+explicitly described. This can be useful if accessing such regions has
+undesired effects for a specific target, or to provide better error
+checking. The following commands control this behaviour.
+
+`set mem inaccessible-by-default [on|off]'
+ If `on' is specified, make GDB treat memory not explicitly
+ described by the memory ranges as non-existent and refuse accesses
+ to such memory. The checks are only performed if there's at least
+ one memory range defined. If `off' is specified, make GDB treat
+ the memory not explicitly described by the memory ranges as RAM.
+ The default value is `on'.
+
+`show mem inaccessible-by-default'
+ Show the current handling of accesses to unknown memory.
+
+
+File: gdb.info, Node: Dump/Restore Files, Next: Core File Generation, Prev: Memory Region Attributes, Up: Data
+
+10.17 Copy Between Memory and a File
+====================================
+
+You can use the commands `dump', `append', and `restore' to copy data
+between target memory and a file. The `dump' and `append' commands
+write data to a file, and the `restore' command reads data from a file
+back into the inferior's memory. Files may be in binary, Motorola
+S-record, Intel hex, or Tektronix Hex format; however, GDB can only
+append to binary files.
+
+`dump [FORMAT] memory FILENAME START_ADDR END_ADDR'
+`dump [FORMAT] value FILENAME EXPR'
+ Dump the contents of memory from START_ADDR to END_ADDR, or the
+ value of EXPR, to FILENAME in the given format.
+
+ The FORMAT parameter may be any one of:
+ `binary'
+ Raw binary form.
+
+ `ihex'
+ Intel hex format.
+
+ `srec'
+ Motorola S-record format.
+
+ `tekhex'
+ Tektronix Hex format.
+
+ GDB uses the same definitions of these formats as the GNU binary
+ utilities, like `objdump' and `objcopy'. If FORMAT is omitted,
+ GDB dumps the data in raw binary form.
+
+`append [binary] memory FILENAME START_ADDR END_ADDR'
+`append [binary] value FILENAME EXPR'
+ Append the contents of memory from START_ADDR to END_ADDR, or the
+ value of EXPR, to the file FILENAME, in raw binary form. (GDB can
+ only append data to files in raw binary form.)
+
+`restore FILENAME [binary] BIAS START END'
+ Restore the contents of file FILENAME into memory. The `restore'
+ command can automatically recognize any known BFD file format,
+ except for raw binary. To restore a raw binary file you must
+ specify the optional keyword `binary' after the filename.
+
+ If BIAS is non-zero, its value will be added to the addresses
+ contained in the file. Binary files always start at address zero,
+ so they will be restored at address BIAS. Other bfd files have a
+ built-in location; they will be restored at offset BIAS from that
+ location.
+
+ If START and/or END are non-zero, then only data between file
+ offset START and file offset END will be restored. These offsets
+ are relative to the addresses in the file, before the BIAS
+ argument is applied.
+
+
+
+File: gdb.info, Node: Core File Generation, Next: Character Sets, Prev: Dump/Restore Files, Up: Data
+
+10.18 How to Produce a Core File from Your Program
+==================================================
+
+A "core file" or "core dump" is a file that records the memory image of
+a running process and its process status (register values etc.). Its
+primary use is post-mortem debugging of a program that crashed while it
+ran outside a debugger. A program that crashes automatically produces
+a core file, unless this feature is disabled by the user. *Note
+Files::, for information on invoking GDB in the post-mortem debugging
+mode.
+
+ Occasionally, you may wish to produce a core file of the program you
+are debugging in order to preserve a snapshot of its state. GDB has a
+special command for that.
+
+`generate-core-file [FILE]'
+`gcore [FILE]'
+ Produce a core dump of the inferior process. The optional argument
+ FILE specifies the file name where to put the core dump. If not
+ specified, the file name defaults to `core.PID', where PID is the
+ inferior process ID.
+
+ Note that this command is implemented only for some systems (as of
+ this writing, GNU/Linux, FreeBSD, Solaris, Unixware, and S390).
+
+
+File: gdb.info, Node: Character Sets, Next: Caching Remote Data, Prev: Core File Generation, Up: Data
+
+10.19 Character Sets
+====================
+
+If the program you are debugging uses a different character set to
+represent characters and strings than the one GDB uses itself, GDB can
+automatically translate between the character sets for you. The
+character set GDB uses we call the "host character set"; the one the
+inferior program uses we call the "target character set".
+
+ For example, if you are running GDB on a GNU/Linux system, which
+uses the ISO Latin 1 character set, but you are using GDB's remote
+protocol (*note Remote Debugging::) to debug a program running on an
+IBM mainframe, which uses the EBCDIC character set, then the host
+character set is Latin-1, and the target character set is EBCDIC. If
+you give GDB the command `set target-charset EBCDIC-US', then GDB
+translates between EBCDIC and Latin 1 as you print character or string
+values, or use character and string literals in expressions.
+
+ GDB has no way to automatically recognize which character set the
+inferior program uses; you must tell it, using the `set target-charset'
+command, described below.
+
+ Here are the commands for controlling GDB's character set support:
+
+`set target-charset CHARSET'
+ Set the current target character set to CHARSET. To display the
+ list of supported target character sets, type
+ `set target-charset <TAB><TAB>'.
+
+`set host-charset CHARSET'
+ Set the current host character set to CHARSET.
+
+ By default, GDB uses a host character set appropriate to the
+ system it is running on; you can override that default using the
+ `set host-charset' command. On some systems, GDB cannot
+ automatically determine the appropriate host character set. In
+ this case, GDB uses `UTF-8'.
+
+ GDB can only use certain character sets as its host character set.
+ If you type `set host-charset <TAB><TAB>', GDB will list the host
+ character sets it supports.
+
+`set charset CHARSET'
+ Set the current host and target character sets to CHARSET. As
+ above, if you type `set charset <TAB><TAB>', GDB will list the
+ names of the character sets that can be used for both host and
+ target.
+
+`show charset'
+ Show the names of the current host and target character sets.
+
+`show host-charset'
+ Show the name of the current host character set.
+
+`show target-charset'
+ Show the name of the current target character set.
+
+`set target-wide-charset CHARSET'
+ Set the current target's wide character set to CHARSET. This is
+ the character set used by the target's `wchar_t' type. To display
+ the list of supported wide character sets, type
+ `set target-wide-charset <TAB><TAB>'.
+
+`show target-wide-charset'
+ Show the name of the current target's wide character set.
+
+ Here is an example of GDB's character set support in action. Assume
+that the following source code has been placed in the file
+`charset-test.c':
+
+ #include <stdio.h>
+
+ char ascii_hello[]
+ = {72, 101, 108, 108, 111, 44, 32, 119,
+ 111, 114, 108, 100, 33, 10, 0};
+ char ibm1047_hello[]
+ = {200, 133, 147, 147, 150, 107, 64, 166,
+ 150, 153, 147, 132, 90, 37, 0};
+
+ main ()
+ {
+ printf ("Hello, world!\n");
+ }
+
+ In this program, `ascii_hello' and `ibm1047_hello' are arrays
+containing the string `Hello, world!' followed by a newline, encoded in
+the ASCII and IBM1047 character sets.
+
+ We compile the program, and invoke the debugger on it:
+
+ $ gcc -g charset-test.c -o charset-test
+ $ gdb -nw charset-test
+ GNU gdb 2001-12-19-cvs
+ Copyright 2001 Free Software Foundation, Inc.
+ ...
+ (gdb)
+
+ We can use the `show charset' command to see what character sets GDB
+is currently using to interpret and display characters and strings:
+
+ (gdb) show charset
+ The current host and target character set is `ISO-8859-1'.
+ (gdb)
+
+ For the sake of printing this manual, let's use ASCII as our initial
+character set:
+ (gdb) set charset ASCII
+ (gdb) show charset
+ The current host and target character set is `ASCII'.
+ (gdb)
+
+ Let's assume that ASCII is indeed the correct character set for our
+host system -- in other words, let's assume that if GDB prints
+characters using the ASCII character set, our terminal will display
+them properly. Since our current target character set is also ASCII,
+the contents of `ascii_hello' print legibly:
+
+ (gdb) print ascii_hello
+ $1 = 0x401698 "Hello, world!\n"
+ (gdb) print ascii_hello[0]
+ $2 = 72 'H'
+ (gdb)
+
+ GDB uses the target character set for character and string literals
+you use in expressions:
+
+ (gdb) print '+'
+ $3 = 43 '+'
+ (gdb)
+
+ The ASCII character set uses the number 43 to encode the `+'
+character.
+
+ GDB relies on the user to tell it which character set the target
+program uses. If we print `ibm1047_hello' while our target character
+set is still ASCII, we get jibberish:
+
+ (gdb) print ibm1047_hello
+ $4 = 0x4016a8 "\310\205\223\223\226k@\246\226\231\223\204Z%"
+ (gdb) print ibm1047_hello[0]
+ $5 = 200 '\310'
+ (gdb)
+
+ If we invoke the `set target-charset' followed by <TAB><TAB>, GDB
+tells us the character sets it supports:
+
+ (gdb) set target-charset
+ ASCII EBCDIC-US IBM1047 ISO-8859-1
+ (gdb) set target-charset
+
+ We can select IBM1047 as our target character set, and examine the
+program's strings again. Now the ASCII string is wrong, but GDB
+translates the contents of `ibm1047_hello' from the target character
+set, IBM1047, to the host character set, ASCII, and they display
+correctly:
+
+ (gdb) set target-charset IBM1047
+ (gdb) show charset
+ The current host character set is `ASCII'.
+ The current target character set is `IBM1047'.
+ (gdb) print ascii_hello
+ $6 = 0x401698 "\110\145%%?\054\040\167?\162%\144\041\012"
+ (gdb) print ascii_hello[0]
+ $7 = 72 '\110'
+ (gdb) print ibm1047_hello
+ $8 = 0x4016a8 "Hello, world!\n"
+ (gdb) print ibm1047_hello[0]
+ $9 = 200 'H'
+ (gdb)
+
+ As above, GDB uses the target character set for character and string
+literals you use in expressions:
+
+ (gdb) print '+'
+ $10 = 78 '+'
+ (gdb)
+
+ The IBM1047 character set uses the number 78 to encode the `+'
+character.
+
+
+File: gdb.info, Node: Caching Remote Data, Next: Searching Memory, Prev: Character Sets, Up: Data
+
+10.20 Caching Data of Remote Targets
+====================================
+
+GDB caches data exchanged between the debugger and a remote target
+(*note Remote Debugging::). Such caching generally improves
+performance, because it reduces the overhead of the remote protocol by
+bundling memory reads and writes into large chunks. Unfortunately,
+simply caching everything would lead to incorrect results, since GDB
+does not necessarily know anything about volatile values, memory-mapped
+I/O addresses, etc. Furthermore, in non-stop mode (*note Non-Stop
+Mode::) memory can be changed _while_ a gdb command is executing.
+Therefore, by default, GDB only caches data known to be on the stack(1).
+Other regions of memory can be explicitly marked as cacheable; see
+*note Memory Region Attributes::.
+
+`set remotecache on'
+`set remotecache off'
+ This option no longer does anything; it exists for compatibility
+ with old scripts.
+
+`show remotecache'
+ Show the current state of the obsolete remotecache flag.
+
+`set stack-cache on'
+`set stack-cache off'
+ Enable or disable caching of stack accesses. When `ON', use
+ caching. By default, this option is `ON'.
+
+`show stack-cache'
+ Show the current state of data caching for memory accesses.
+
+`info dcache [line]'
+ Print the information about the data cache performance. The
+ information displayed includes the dcache width and depth, and for
+ each cache line, its number, address, and how many times it was
+ referenced. This command is useful for debugging the data cache
+ operation.
+
+ If a line number is specified, the contents of that line will be
+ printed in hex.
+
+`set dcache size SIZE'
+ Set maximum number of entries in dcache (dcache depth above).
+
+`set dcache line-size LINE-SIZE'
+ Set number of bytes each dcache entry caches (dcache width above).
+ Must be a power of 2.
+
+`show dcache size'
+ Show maximum number of dcache entries. See also *note info
+ dcache: Caching Remote Data.
+
+`show dcache line-size'
+ Show default size of dcache lines. See also *note info dcache:
+ Caching Remote Data.
+
+
+ ---------- Footnotes ----------
+
+ (1) In non-stop mode, it is moderately rare for a running thread to
+modify the stack of a stopped thread in a way that would interfere with
+a backtrace, and caching of stack reads provides a significant speed up
+of remote backtraces.
+
+
+File: gdb.info, Node: Searching Memory, Prev: Caching Remote Data, Up: Data
+
+10.21 Search Memory
+===================
+
+Memory can be searched for a particular sequence of bytes with the
+`find' command.
+
+`find [/SN] START_ADDR, +LEN, VAL1 [, VAL2, ...]'
+`find [/SN] START_ADDR, END_ADDR, VAL1 [, VAL2, ...]'
+ Search memory for the sequence of bytes specified by VAL1, VAL2,
+ etc. The search begins at address START_ADDR and continues for
+ either LEN bytes or through to END_ADDR inclusive.
+
+ S and N are optional parameters. They may be specified in either
+order, apart or together.
+
+S, search query size
+ The size of each search query value.
+
+ `b'
+ bytes
+
+ `h'
+ halfwords (two bytes)
+
+ `w'
+ words (four bytes)
+
+ `g'
+ giant words (eight bytes)
+
+ All values are interpreted in the current language. This means,
+ for example, that if the current source language is C/C++ then
+ searching for the string "hello" includes the trailing '\0'.
+
+ If the value size is not specified, it is taken from the value's
+ type in the current language. This is useful when one wants to
+ specify the search pattern as a mixture of types. Note that this
+ means, for example, that in the case of C-like languages a search
+ for an untyped 0x42 will search for `(int) 0x42' which is
+ typically four bytes.
+
+N, maximum number of finds
+ The maximum number of matches to print. The default is to print
+ all finds.
+
+ You can use strings as search values. Quote them with double-quotes
+(`"'). The string value is copied into the search pattern byte by byte,
+regardless of the endianness of the target and the size specification.
+
+ The address of each match found is printed as well as a count of the
+number of matches found.
+
+ The address of the last value found is stored in convenience variable
+`$_'. A count of the number of matches is stored in `$numfound'.
+
+ For example, if stopped at the `printf' in this function:
+
+ void
+ hello ()
+ {
+ static char hello[] = "hello-hello";
+ static struct { char c; short s; int i; }
+ __attribute__ ((packed)) mixed
+ = { 'c', 0x1234, 0x87654321 };
+ printf ("%s\n", hello);
+ }
+
+you get during debugging:
+
+ (gdb) find &hello[0], +sizeof(hello), "hello"
+ 0x804956d <hello.1620+6>
+ 1 pattern found
+ (gdb) find &hello[0], +sizeof(hello), 'h', 'e', 'l', 'l', 'o'
+ 0x8049567 <hello.1620>
+ 0x804956d <hello.1620+6>
+ 2 patterns found
+ (gdb) find /b1 &hello[0], +sizeof(hello), 'h', 0x65, 'l'
+ 0x8049567 <hello.1620>
+ 1 pattern found
+ (gdb) find &mixed, +sizeof(mixed), (char) 'c', (short) 0x1234, (int) 0x87654321
+ 0x8049560 <mixed.1625>
+ 1 pattern found
+ (gdb) print $numfound
+ $1 = 1
+ (gdb) print $_
+ $2 = (void *) 0x8049560
+
+
+File: gdb.info, Node: Optimized Code, Next: Macros, Prev: Data, Up: Top
+
+11 Debugging Optimized Code
+***************************
+
+Almost all compilers support optimization. With optimization disabled,
+the compiler generates assembly code that corresponds directly to your
+source code, in a simplistic way. As the compiler applies more
+powerful optimizations, the generated assembly code diverges from your
+original source code. With help from debugging information generated
+by the compiler, GDB can map from the running program back to
+constructs from your original source.
+
+ GDB is more accurate with optimization disabled. If you can
+recompile without optimization, it is easier to follow the progress of
+your program during debugging. But, there are many cases where you may
+need to debug an optimized version.
+
+ When you debug a program compiled with `-g -O', remember that the
+optimizer has rearranged your code; the debugger shows you what is
+really there. Do not be too surprised when the execution path does not
+exactly match your source file! An extreme example: if you define a
+variable, but never use it, GDB never sees that variable--because the
+compiler optimizes it out of existence.
+
+ Some things do not work as well with `-g -O' as with just `-g',
+particularly on machines with instruction scheduling. If in doubt,
+recompile with `-g' alone, and if this fixes the problem, please report
+it to us as a bug (including a test case!). *Note Variables::, for
+more information about debugging optimized code.
+
+* Menu:
+
+* Inline Functions:: How GDB presents inlining
+
+
+File: gdb.info, Node: Inline Functions, Up: Optimized Code
+
+11.1 Inline Functions
+=====================
+
+"Inlining" is an optimization that inserts a copy of the function body
+directly at each call site, instead of jumping to a shared routine.
+GDB displays inlined functions just like non-inlined functions. They
+appear in backtraces. You can view their arguments and local
+variables, step into them with `step', skip them with `next', and
+escape from them with `finish'. You can check whether a function was
+inlined by using the `info frame' command.
+
+ For GDB to support inlined functions, the compiler must record
+information about inlining in the debug information -- GCC using the
+DWARF 2 format does this, and several other compilers do also. GDB
+only supports inlined functions when using DWARF 2. Versions of GCC
+before 4.1 do not emit two required attributes (`DW_AT_call_file' and
+`DW_AT_call_line'); GDB does not display inlined function calls with
+earlier versions of GCC. It instead displays the arguments and local
+variables of inlined functions as local variables in the caller.
+
+ The body of an inlined function is directly included at its call
+site; unlike a non-inlined function, there are no instructions devoted
+to the call. GDB still pretends that the call site and the start of
+the inlined function are different instructions. Stepping to the call
+site shows the call site, and then stepping again shows the first line
+of the inlined function, even though no additional instructions are
+executed.
+
+ This makes source-level debugging much clearer; you can see both the
+context of the call and then the effect of the call. Only stepping by
+a single instruction using `stepi' or `nexti' does not do this; single
+instruction steps always show the inlined body.
+
+ There are some ways that GDB does not pretend that inlined function
+calls are the same as normal calls:
+
+ * You cannot set breakpoints on inlined functions. GDB either
+ reports that there is no symbol with that name, or else sets the
+ breakpoint only on non-inlined copies of the function. This
+ limitation will be removed in a future version of GDB; until then,
+ set a breakpoint by line number on the first line of the inlined
+ function instead.
+
+ * Setting breakpoints at the call site of an inlined function may not
+ work, because the call site does not contain any code. GDB may
+ incorrectly move the breakpoint to the next line of the enclosing
+ function, after the call. This limitation will be removed in a
+ future version of GDB; until then, set a breakpoint on an earlier
+ line or inside the inlined function instead.
+
+ * GDB cannot locate the return value of inlined calls after using
+ the `finish' command. This is a limitation of compiler-generated
+ debugging information; after `finish', you can step to the next
+ line and print a variable where your program stored the return
+ value.
+
+
+
+File: gdb.info, Node: Macros, Next: Tracepoints, Prev: Optimized Code, Up: Top
+
+12 C Preprocessor Macros
+************************
+
+Some languages, such as C and C++, provide a way to define and invoke
+"preprocessor macros" which expand into strings of tokens. GDB can
+evaluate expressions containing macro invocations, show the result of
+macro expansion, and show a macro's definition, including where it was
+defined.
+
+ You may need to compile your program specially to provide GDB with
+information about preprocessor macros. Most compilers do not include
+macros in their debugging information, even when you compile with the
+`-g' flag. *Note Compilation::.
+
+ A program may define a macro at one point, remove that definition
+later, and then provide a different definition after that. Thus, at
+different points in the program, a macro may have different
+definitions, or have no definition at all. If there is a current stack
+frame, GDB uses the macros in scope at that frame's source code line.
+Otherwise, GDB uses the macros in scope at the current listing location;
+see *note List::.
+
+ Whenever GDB evaluates an expression, it always expands any macro
+invocations present in the expression. GDB also provides the following
+commands for working with macros explicitly.
+
+`macro expand EXPRESSION'
+`macro exp EXPRESSION'
+ Show the results of expanding all preprocessor macro invocations in
+ EXPRESSION. Since GDB simply expands macros, but does not parse
+ the result, EXPRESSION need not be a valid expression; it can be
+ any string of tokens.
+
+`macro expand-once EXPRESSION'
+`macro exp1 EXPRESSION'
+ (This command is not yet implemented.) Show the results of
+ expanding those preprocessor macro invocations that appear
+ explicitly in EXPRESSION. Macro invocations appearing in that
+ expansion are left unchanged. This command allows you to see the
+ effect of a particular macro more clearly, without being confused
+ by further expansions. Since GDB simply expands macros, but does
+ not parse the result, EXPRESSION need not be a valid expression; it
+ can be any string of tokens.
+
+`info macro MACRO'
+ Show the definition of the macro named MACRO, and describe the
+ source location or compiler command-line where that definition was
+ established.
+
+`macro define MACRO REPLACEMENT-LIST'
+`macro define MACRO(ARGLIST) REPLACEMENT-LIST'
+ Introduce a definition for a preprocessor macro named MACRO,
+ invocations of which are replaced by the tokens given in
+ REPLACEMENT-LIST. The first form of this command defines an
+ "object-like" macro, which takes no arguments; the second form
+ defines a "function-like" macro, which takes the arguments given in
+ ARGLIST.
+
+ A definition introduced by this command is in scope in every
+ expression evaluated in GDB, until it is removed with the `macro
+ undef' command, described below. The definition overrides all
+ definitions for MACRO present in the program being debugged, as
+ well as any previous user-supplied definition.
+
+`macro undef MACRO'
+ Remove any user-supplied definition for the macro named MACRO.
+ This command only affects definitions provided with the `macro
+ define' command, described above; it cannot remove definitions
+ present in the program being debugged.
+
+`macro list'
+ List all the macros defined using the `macro define' command.
+
+ Here is a transcript showing the above commands in action. First, we
+show our source files:
+
+ $ cat sample.c
+ #include <stdio.h>
+ #include "sample.h"
+
+ #define M 42
+ #define ADD(x) (M + x)
+
+ main ()
+ {
+ #define N 28
+ printf ("Hello, world!\n");
+ #undef N
+ printf ("We're so creative.\n");
+ #define N 1729
+ printf ("Goodbye, world!\n");
+ }
+ $ cat sample.h
+ #define Q <
+ $
+
+ Now, we compile the program using the GNU C compiler, GCC. We pass
+the `-gdwarf-2' and `-g3' flags to ensure the compiler includes
+information about preprocessor macros in the debugging information.
+
+ $ gcc -gdwarf-2 -g3 sample.c -o sample
+ $
+
+ Now, we start GDB on our sample program:
+
+ $ gdb -nw sample
+ GNU gdb 2002-05-06-cvs
+ Copyright 2002 Free Software Foundation, Inc.
+ GDB is free software, ...
+ (gdb)
+
+ We can expand macros and examine their definitions, even when the
+program is not running. GDB uses the current listing position to
+decide which macro definitions are in scope:
+
+ (gdb) list main
+ 3
+ 4 #define M 42
+ 5 #define ADD(x) (M + x)
+ 6
+ 7 main ()
+ 8 {
+ 9 #define N 28
+ 10 printf ("Hello, world!\n");
+ 11 #undef N
+ 12 printf ("We're so creative.\n");
+ (gdb) info macro ADD
+ Defined at /home/jimb/gdb/macros/play/sample.c:5
+ #define ADD(x) (M + x)
+ (gdb) info macro Q
+ Defined at /home/jimb/gdb/macros/play/sample.h:1
+ included at /home/jimb/gdb/macros/play/sample.c:2
+ #define Q <
+ (gdb) macro expand ADD(1)
+ expands to: (42 + 1)
+ (gdb) macro expand-once ADD(1)
+ expands to: once (M + 1)
+ (gdb)
+
+ In the example above, note that `macro expand-once' expands only the
+macro invocation explicit in the original text -- the invocation of
+`ADD' -- but does not expand the invocation of the macro `M', which was
+introduced by `ADD'.
+
+ Once the program is running, GDB uses the macro definitions in force
+at the source line of the current stack frame:
+
+ (gdb) break main
+ Breakpoint 1 at 0x8048370: file sample.c, line 10.
+ (gdb) run
+ Starting program: /home/jimb/gdb/macros/play/sample
+
+ Breakpoint 1, main () at sample.c:10
+ 10 printf ("Hello, world!\n");
+ (gdb)
+
+ At line 10, the definition of the macro `N' at line 9 is in force:
+
+ (gdb) info macro N
+ Defined at /home/jimb/gdb/macros/play/sample.c:9
+ #define N 28
+ (gdb) macro expand N Q M
+ expands to: 28 < 42
+ (gdb) print N Q M
+ $1 = 1
+ (gdb)
+
+ As we step over directives that remove `N''s definition, and then
+give it a new definition, GDB finds the definition (or lack thereof) in
+force at each point:
+
+ (gdb) next
+ Hello, world!
+ 12 printf ("We're so creative.\n");
+ (gdb) info macro N
+ The symbol `N' has no definition as a C/C++ preprocessor macro
+ at /home/jimb/gdb/macros/play/sample.c:12
+ (gdb) next
+ We're so creative.
+ 14 printf ("Goodbye, world!\n");
+ (gdb) info macro N
+ Defined at /home/jimb/gdb/macros/play/sample.c:13
+ #define N 1729
+ (gdb) macro expand N Q M
+ expands to: 1729 < 42
+ (gdb) print N Q M
+ $2 = 0
+ (gdb)
+
+ In addition to source files, macros can be defined on the
+compilation command line using the `-DNAME=VALUE' syntax. For macros
+defined in such a way, GDB displays the location of their definition as
+line zero of the source file submitted to the compiler.
+
+ (gdb) info macro __STDC__
+ Defined at /home/jimb/gdb/macros/play/sample.c:0
+ -D__STDC__=1
+ (gdb)
+
+
+File: gdb.info, Node: Tracepoints, Next: Overlays, Prev: Macros, Up: Top
+
+13 Tracepoints
+**************
+
+In some applications, it is not feasible for the debugger to interrupt
+the program's execution long enough for the developer to learn anything
+helpful about its behavior. If the program's correctness depends on
+its real-time behavior, delays introduced by a debugger might cause the
+program to change its behavior drastically, or perhaps fail, even when
+the code itself is correct. It is useful to be able to observe the
+program's behavior without interrupting it.
+
+ Using GDB's `trace' and `collect' commands, you can specify
+locations in the program, called "tracepoints", and arbitrary
+expressions to evaluate when those tracepoints are reached. Later,
+using the `tfind' command, you can examine the values those expressions
+had when the program hit the tracepoints. The expressions may also
+denote objects in memory--structures or arrays, for example--whose
+values GDB should record; while visiting a particular tracepoint, you
+may inspect those objects as if they were in memory at that moment.
+However, because GDB records these values without interacting with you,
+it can do so quickly and unobtrusively, hopefully not disturbing the
+program's behavior.
+
+ The tracepoint facility is currently available only for remote
+targets. *Note Targets::. In addition, your remote target must know
+how to collect trace data. This functionality is implemented in the
+remote stub; however, none of the stubs distributed with GDB support
+tracepoints as of this writing. The format of the remote packets used
+to implement tracepoints are described in *note Tracepoint Packets::.
+
+ It is also possible to get trace data from a file, in a manner
+reminiscent of corefiles; you specify the filename, and use `tfind' to
+search through the file. *Note Trace Files::, for more details.
+
+ This chapter describes the tracepoint commands and features.
+
+* Menu:
+
+* Set Tracepoints::
+* Analyze Collected Data::
+* Tracepoint Variables::
+* Trace Files::
+
+
+File: gdb.info, Node: Set Tracepoints, Next: Analyze Collected Data, Up: Tracepoints
+
+13.1 Commands to Set Tracepoints
+================================
+
+Before running such a "trace experiment", an arbitrary number of
+tracepoints can be set. A tracepoint is actually a special type of
+breakpoint (*note Set Breaks::), so you can manipulate it using
+standard breakpoint commands. For instance, as with breakpoints,
+tracepoint numbers are successive integers starting from one, and many
+of the commands associated with tracepoints take the tracepoint number
+as their argument, to identify which tracepoint to work on.
+
+ For each tracepoint, you can specify, in advance, some arbitrary set
+of data that you want the target to collect in the trace buffer when it
+hits that tracepoint. The collected data can include registers, local
+variables, or global data. Later, you can use GDB commands to examine
+the values these data had at the time the tracepoint was hit.
+
+ Tracepoints do not support every breakpoint feature. Ignore counts
+on tracepoints have no effect, and tracepoints cannot run GDB commands
+when they are hit. Tracepoints may not be thread-specific either.
+
+ Some targets may support "fast tracepoints", which are inserted in a
+different way (such as with a jump instead of a trap), that is faster
+but possibly restricted in where they may be installed.
+
+ Regular and fast tracepoints are dynamic tracing facilities, meaning
+that they can be used to insert tracepoints at (almost) any location in
+the target. Some targets may also support controlling "static
+tracepoints" from GDB. With static tracing, a set of instrumentation
+points, also known as "markers", are embedded in the target program,
+and can be activated or deactivated by name or address. These are
+usually placed at locations which facilitate investigating what the
+target is actually doing. GDB's support for static tracing includes
+being able to list instrumentation points, and attach them with GDB
+defined high level tracepoints that expose the whole range of
+convenience of GDB's tracepoints support. Namely, support for
+collecting registers values and values of global or local (to the
+instrumentation point) variables; tracepoint conditions and trace state
+variables. The act of installing a GDB static tracepoint on an
+instrumentation point, or marker, is referred to as "probing" a static
+tracepoint marker.
+
+ `gdbserver' supports tracepoints on some target systems. *Note
+Tracepoints support in `gdbserver': Server.
+
+ This section describes commands to set tracepoints and associated
+conditions and actions.
+
+* Menu:
+
+* Create and Delete Tracepoints::
+* Enable and Disable Tracepoints::
+* Tracepoint Passcounts::
+* Tracepoint Conditions::
+* Trace State Variables::
+* Tracepoint Actions::
+* Listing Tracepoints::
+* Listing Static Tracepoint Markers::
+* Starting and Stopping Trace Experiments::
+* Tracepoint Restrictions::
+
+
+File: gdb.info, Node: Create and Delete Tracepoints, Next: Enable and Disable Tracepoints, Up: Set Tracepoints
+
+13.1.1 Create and Delete Tracepoints
+------------------------------------
+
+`trace LOCATION'
+ The `trace' command is very similar to the `break' command. Its
+ argument LOCATION can be a source line, a function name, or an
+ address in the target program. *Note Specify Location::. The
+ `trace' command defines a tracepoint, which is a point in the
+ target program where the debugger will briefly stop, collect some
+ data, and then allow the program to continue. Setting a
+ tracepoint or changing its actions doesn't take effect until the
+ next `tstart' command, and once a trace experiment is running,
+ further changes will not have any effect until the next trace
+ experiment starts.
+
+ Here are some examples of using the `trace' command:
+
+ (gdb) trace foo.c:121 // a source file and line number
+
+ (gdb) trace +2 // 2 lines forward
+
+ (gdb) trace my_function // first source line of function
+
+ (gdb) trace *my_function // EXACT start address of function
+
+ (gdb) trace *0x2117c4 // an address
+
+ You can abbreviate `trace' as `tr'.
+
+`trace LOCATION if COND'
+ Set a tracepoint with condition COND; evaluate the expression COND
+ each time the tracepoint is reached, and collect data only if the
+ value is nonzero--that is, if COND evaluates as true. *Note
+ Tracepoint Conditions: Tracepoint Conditions, for more information
+ on tracepoint conditions.
+
+`ftrace LOCATION [ if COND ]'
+ The `ftrace' command sets a fast tracepoint. For targets that
+ support them, fast tracepoints will use a more efficient but
+ possibly less general technique to trigger data collection, such
+ as a jump instruction instead of a trap, or some sort of hardware
+ support. It may not be possible to create a fast tracepoint at
+ the desired location, in which case the command will exit with an
+ explanatory message.
+
+ GDB handles arguments to `ftrace' exactly as for `trace'.
+
+`strace LOCATION [ if COND ]'
+ The `strace' command sets a static tracepoint. For targets that
+ support it, setting a static tracepoint probes a static
+ instrumentation point, or marker, found at LOCATION. It may not
+ be possible to set a static tracepoint at the desired location, in
+ which case the command will exit with an explanatory message.
+
+ GDB handles arguments to `strace' exactly as for `trace', with the
+ addition that the user can also specify `-m MARKER' as LOCATION.
+ This probes the marker identified by the MARKER string identifier.
+ This identifier depends on the static tracepoint backend library
+ your program is using. You can find all the marker identifiers in
+ the `ID' field of the `info static-tracepoint-markers' command
+ output. *Note Listing Static Tracepoint Markers: Listing Static
+ Tracepoint Markers. For example, in the following small program
+ using the UST tracing engine:
+
+ main ()
+ {
+ trace_mark(ust, bar33, "str %s", "FOOBAZ");
+ }
+
+ the marker id is composed of joining the first two arguments to the
+ `trace_mark' call with a slash, which translates to:
+
+ (gdb) info static-tracepoint-markers
+ Cnt Enb ID Address What
+ 1 n ust/bar33 0x0000000000400ddc in main at stexample.c:22
+ Data: "str %s"
+ [etc...]
+
+ so you may probe the marker above with:
+
+ (gdb) strace -m ust/bar33
+
+ Static tracepoints accept an extra collect action -- `collect
+ $_sdata'. This collects arbitrary user data passed in the probe
+ point call to the tracing library. In the UST example above,
+ you'll see that the third argument to `trace_mark' is a
+ printf-like format string. The user data is then the result of
+ running that formating string against the following arguments.
+ Note that `info static-tracepoint-markers' command output lists
+ that format string in the `Data:' field.
+
+ You can inspect this data when analyzing the trace buffer, by
+ printing the $_sdata variable like any other variable available to
+ GDB. *Note Tracepoint Action Lists: Tracepoint Actions.
+
+ The convenience variable `$tpnum' records the tracepoint number of
+ the most recently set tracepoint.
+
+`delete tracepoint [NUM]'
+ Permanently delete one or more tracepoints. With no argument, the
+ default is to delete all tracepoints. Note that the regular
+ `delete' command can remove tracepoints also.
+
+ Examples:
+
+ (gdb) delete trace 1 2 3 // remove three tracepoints
+
+ (gdb) delete trace // remove all tracepoints
+
+ You can abbreviate this command as `del tr'.
+
+
+File: gdb.info, Node: Enable and Disable Tracepoints, Next: Tracepoint Passcounts, Prev: Create and Delete Tracepoints, Up: Set Tracepoints
+
+13.1.2 Enable and Disable Tracepoints
+-------------------------------------
+
+These commands are deprecated; they are equivalent to plain `disable'
+and `enable'.
+
+`disable tracepoint [NUM]'
+ Disable tracepoint NUM, or all tracepoints if no argument NUM is
+ given. A disabled tracepoint will have no effect during the next
+ trace experiment, but it is not forgotten. You can re-enable a
+ disabled tracepoint using the `enable tracepoint' command.
+
+`enable tracepoint [NUM]'
+ Enable tracepoint NUM, or all tracepoints. The enabled
+ tracepoints will become effective the next time a trace experiment
+ is run.
+
+
+File: gdb.info, Node: Tracepoint Passcounts, Next: Tracepoint Conditions, Prev: Enable and Disable Tracepoints, Up: Set Tracepoints
+
+13.1.3 Tracepoint Passcounts
+----------------------------
+
+`passcount [N [NUM]]'
+ Set the "passcount" of a tracepoint. The passcount is a way to
+ automatically stop a trace experiment. If a tracepoint's
+ passcount is N, then the trace experiment will be automatically
+ stopped on the N'th time that tracepoint is hit. If the
+ tracepoint number NUM is not specified, the `passcount' command
+ sets the passcount of the most recently defined tracepoint. If no
+ passcount is given, the trace experiment will run until stopped
+ explicitly by the user.
+
+ Examples:
+
+ (gdb) passcount 5 2 // Stop on the 5th execution of
+ `// tracepoint 2'
+
+ (gdb) passcount 12 // Stop on the 12th execution of the
+ `// most recently defined tracepoint.'
+ (gdb) trace foo
+ (gdb) pass 3
+ (gdb) trace bar
+ (gdb) pass 2
+ (gdb) trace baz
+ (gdb) pass 1 // Stop tracing when foo has been
+ `// executed 3 times OR when bar has'
+ `// been executed 2 times'
+ `// OR when baz has been executed 1 time.'
+
+
+
+File: gdb.info, Node: Tracepoint Conditions, Next: Trace State Variables, Prev: Tracepoint Passcounts, Up: Set Tracepoints
+
+13.1.4 Tracepoint Conditions
+----------------------------
+
+The simplest sort of tracepoint collects data every time your program
+reaches a specified place. You can also specify a "condition" for a
+tracepoint. A condition is just a Boolean expression in your
+programming language (*note Expressions: Expressions.). A tracepoint
+with a condition evaluates the expression each time your program
+reaches it, and data collection happens only if the condition is true.
+
+ Tracepoint conditions can be specified when a tracepoint is set, by
+using `if' in the arguments to the `trace' command. *Note Setting
+Tracepoints: Create and Delete Tracepoints. They can also be set or
+changed at any time with the `condition' command, just as with
+breakpoints.
+
+ Unlike breakpoint conditions, GDB does not actually evaluate the
+conditional expression itself. Instead, GDB encodes the expression
+into an agent expression (*note Agent Expressions::) suitable for
+execution on the target, independently of GDB. Global variables become
+raw memory locations, locals become stack accesses, and so forth.
+
+ For instance, suppose you have a function that is usually called
+frequently, but should not be called after an error has occurred. You
+could use the following tracepoint command to collect data about calls
+of that function that happen while the error code is propagating
+through the program; an unconditional tracepoint could end up
+collecting thousands of useless trace frames that you would have to
+search through.
+
+ (gdb) trace normal_operation if errcode > 0
+
+
+File: gdb.info, Node: Trace State Variables, Next: Tracepoint Actions, Prev: Tracepoint Conditions, Up: Set Tracepoints
+
+13.1.5 Trace State Variables
+----------------------------
+
+A "trace state variable" is a special type of variable that is created
+and managed by target-side code. The syntax is the same as that for
+GDB's convenience variables (a string prefixed with "$"), but they are
+stored on the target. They must be created explicitly, using a
+`tvariable' command. They are always 64-bit signed integers.
+
+ Trace state variables are remembered by GDB, and downloaded to the
+target along with tracepoint information when the trace experiment
+starts. There are no intrinsic limits on the number of trace state
+variables, beyond memory limitations of the target.
+
+ Although trace state variables are managed by the target, you can use
+them in print commands and expressions as if they were convenience
+variables; GDB will get the current value from the target while the
+trace experiment is running. Trace state variables share the same
+namespace as other "$" variables, which means that you cannot have
+trace state variables with names like `$23' or `$pc', nor can you have
+a trace state variable and a convenience variable with the same name.
+
+`tvariable $NAME [ = EXPRESSION ]'
+ The `tvariable' command creates a new trace state variable named
+ `$NAME', and optionally gives it an initial value of EXPRESSION.
+ EXPRESSION is evaluated when this command is entered; the result
+ will be converted to an integer if possible, otherwise GDB will
+ report an error. A subsequent `tvariable' command specifying the
+ same name does not create a variable, but instead assigns the
+ supplied initial value to the existing variable of that name,
+ overwriting any previous initial value. The default initial value
+ is 0.
+
+`info tvariables'
+ List all the trace state variables along with their initial values.
+ Their current values may also be displayed, if the trace
+ experiment is currently running.
+
+`delete tvariable [ $NAME ... ]'
+ Delete the given trace state variables, or all of them if no
+ arguments are specified.
+
+
+
+File: gdb.info, Node: Tracepoint Actions, Next: Listing Tracepoints, Prev: Trace State Variables, Up: Set Tracepoints
+
+13.1.6 Tracepoint Action Lists
+------------------------------
+
+`actions [NUM]'
+ This command will prompt for a list of actions to be taken when the
+ tracepoint is hit. If the tracepoint number NUM is not specified,
+ this command sets the actions for the one that was most recently
+ defined (so that you can define a tracepoint and then say
+ `actions' without bothering about its number). You specify the
+ actions themselves on the following lines, one action at a time,
+ and terminate the actions list with a line containing just `end'.
+ So far, the only defined actions are `collect', `teval', and
+ `while-stepping'.
+
+ `actions' is actually equivalent to `commands' (*note Breakpoint
+ Command Lists: Break Commands.), except that only the defined
+ actions are allowed; any other GDB command is rejected.
+
+ To remove all actions from a tracepoint, type `actions NUM' and
+ follow it immediately with `end'.
+
+ (gdb) collect DATA // collect some data
+
+ (gdb) while-stepping 5 // single-step 5 times, collect data
+
+ (gdb) end // signals the end of actions.
+
+ In the following example, the action list begins with `collect'
+ commands indicating the things to be collected when the tracepoint
+ is hit. Then, in order to single-step and collect additional data
+ following the tracepoint, a `while-stepping' command is used,
+ followed by the list of things to be collected after each step in a
+ sequence of single steps. The `while-stepping' command is
+ terminated by its own separate `end' command. Lastly, the action
+ list is terminated by an `end' command.
+
+ (gdb) trace foo
+ (gdb) actions
+ Enter actions for tracepoint 1, one per line:
+ > collect bar,baz
+ > collect $regs
+ > while-stepping 12
+ > collect $pc, arr[i]
+ > end
+ end
+
+`collect EXPR1, EXPR2, ...'
+ Collect values of the given expressions when the tracepoint is hit.
+ This command accepts a comma-separated list of any valid
+ expressions. In addition to global, static, or local variables,
+ the following special arguments are supported:
+
+ `$regs'
+ Collect all registers.
+
+ `$args'
+ Collect all function arguments.
+
+ `$locals'
+ Collect all local variables.
+
+ `$_sdata'
+ Collect static tracepoint marker specific data. Only
+ available for static tracepoints. *Note Tracepoint Action
+ Lists: Tracepoint Actions. On the UST static tracepoints
+ library backend, an instrumentation point resembles a
+ `printf' function call. The tracing library is able to
+ collect user specified data formatted to a character string
+ using the format provided by the programmer that instrumented
+ the program. Other backends have similar mechanisms. Here's
+ an example of a UST marker call:
+
+ const char master_name[] = "$your_name";
+ trace_mark(channel1, marker1, "hello %s", master_name)
+
+ In this case, collecting `$_sdata' collects the string `hello
+ $yourname'. When analyzing the trace buffer, you can inspect
+ `$_sdata' like any other variable available to GDB.
+
+ You can give several consecutive `collect' commands, each one with
+ a single argument, or one `collect' command with several arguments
+ separated by commas; the effect is the same.
+
+ The command `info scope' (*note info scope: Symbols.) is
+ particularly useful for figuring out what data to collect.
+
+`teval EXPR1, EXPR2, ...'
+ Evaluate the given expressions when the tracepoint is hit. This
+ command accepts a comma-separated list of expressions. The results
+ are discarded, so this is mainly useful for assigning values to
+ trace state variables (*note Trace State Variables::) without
+ adding those values to the trace buffer, as would be the case if
+ the `collect' action were used.
+
+`while-stepping N'
+ Perform N single-step instruction traces after the tracepoint,
+ collecting new data after each step. The `while-stepping' command
+ is followed by the list of what to collect while stepping
+ (followed by its own `end' command):
+
+ > while-stepping 12
+ > collect $regs, myglobal
+ > end
+ >
+
+ Note that `$pc' is not automatically collected by
+ `while-stepping'; you need to explicitly collect that register if
+ you need it. You may abbreviate `while-stepping' as `ws' or
+ `stepping'.
+
+`set default-collect EXPR1, EXPR2, ...'
+ This variable is a list of expressions to collect at each
+ tracepoint hit. It is effectively an additional `collect' action
+ prepended to every tracepoint action list. The expressions are
+ parsed individually for each tracepoint, so for instance a
+ variable named `xyz' may be interpreted as a global for one
+ tracepoint, and a local for another, as appropriate to the
+ tracepoint's location.
+
+`show default-collect'
+ Show the list of expressions that are collected by default at each
+ tracepoint hit.
+
+
+
+File: gdb.info, Node: Listing Tracepoints, Next: Listing Static Tracepoint Markers, Prev: Tracepoint Actions, Up: Set Tracepoints
+
+13.1.7 Listing Tracepoints
+--------------------------
+
+`info tracepoints [NUM...]'
+ Display information about the tracepoint NUM. If you don't
+ specify a tracepoint number, displays information about all the
+ tracepoints defined so far. The format is similar to that used for
+ `info breakpoints'; in fact, `info tracepoints' is the same
+ command, simply restricting itself to tracepoints.
+
+ A tracepoint's listing may include additional information specific
+ to tracing:
+
+ * its passcount as given by the `passcount N' command
+
+ (gdb) info trace
+ Num Type Disp Enb Address What
+ 1 tracepoint keep y 0x0804ab57 in foo() at main.cxx:7
+ while-stepping 20
+ collect globfoo, $regs
+ end
+ collect globfoo2
+ end
+ pass count 1200
+ (gdb)
+
+ This command can be abbreviated `info tp'.
+
+
+File: gdb.info, Node: Listing Static Tracepoint Markers, Next: Starting and Stopping Trace Experiments, Prev: Listing Tracepoints, Up: Set Tracepoints
+
+13.1.8 Listing Static Tracepoint Markers
+----------------------------------------
+
+`info static-tracepoint-markers'
+ Display information about all static tracepoint markers defined in
+ the program.
+
+ For each marker, the following columns are printed:
+
+ _Count_
+ An incrementing counter, output to help readability. This is
+ not a stable identifier.
+
+ _ID_
+ The marker ID, as reported by the target.
+
+ _Enabled or Disabled_
+ Probed markers are tagged with `y'. `n' identifies marks
+ that are not enabled.
+
+ _Address_
+ Where the marker is in your program, as a memory address.
+
+ _What_
+ Where the marker is in the source for your program, as a file
+ and line number. If the debug information included in the
+ program does not allow GDB to locate the source of the
+ marker, this column will be left blank.
+
+ In addition, the following information may be printed for each
+ marker:
+
+ _Data_
+ User data passed to the tracing library by the marker call.
+ In the UST backend, this is the format string passed as
+ argument to the marker call.
+
+ _Static tracepoints probing the marker_
+ The list of static tracepoints attached to the marker.
+
+ (gdb) info static-tracepoint-markers
+ Cnt ID Enb Address What
+ 1 ust/bar2 y 0x0000000000400e1a in main at stexample.c:25
+ Data: number1 %d number2 %d
+ Probed by static tracepoints: #2
+ 2 ust/bar33 n 0x0000000000400c87 in main at stexample.c:24
+ Data: str %s
+ (gdb)
+
+
+File: gdb.info, Node: Starting and Stopping Trace Experiments, Next: Tracepoint Restrictions, Prev: Listing Static Tracepoint Markers, Up: Set Tracepoints
+
+13.1.9 Starting and Stopping Trace Experiments
+----------------------------------------------
+
+`tstart'
+ This command takes no arguments. It starts the trace experiment,
+ and begins collecting data. This has the side effect of
+ discarding all the data collected in the trace buffer during the
+ previous trace experiment.
+
+`tstop'
+ This command takes no arguments. It ends the trace experiment, and
+ stops collecting data.
+
+ *Note*: a trace experiment and data collection may stop
+ automatically if any tracepoint's passcount is reached (*note
+ Tracepoint Passcounts::), or if the trace buffer becomes full.
+
+`tstatus'
+ This command displays the status of the current trace data
+ collection.
+
+ Here is an example of the commands we described so far:
+
+ (gdb) trace gdb_c_test
+ (gdb) actions
+ Enter actions for tracepoint #1, one per line.
+ > collect $regs,$locals,$args
+ > while-stepping 11
+ > collect $regs
+ > end
+ > end
+ (gdb) tstart
+ [time passes ...]
+ (gdb) tstop
+
+ You can choose to continue running the trace experiment even if GDB
+disconnects from the target, voluntarily or involuntarily. For
+commands such as `detach', the debugger will ask what you want to do
+with the trace. But for unexpected terminations (GDB crash, network
+outage), it would be unfortunate to lose hard-won trace data, so the
+variable `disconnected-tracing' lets you decide whether the trace should
+continue running without GDB.
+
+`set disconnected-tracing on'
+`set disconnected-tracing off'
+ Choose whether a tracing run should continue to run if GDB has
+ disconnected from the target. Note that `detach' or `quit' will
+ ask you directly what to do about a running trace no matter what
+ this variable's setting, so the variable is mainly useful for
+ handling unexpected situations, such as loss of the network.
+
+`show disconnected-tracing'
+ Show the current choice for disconnected tracing.
+
+
+ When you reconnect to the target, the trace experiment may or may not
+still be running; it might have filled the trace buffer in the
+meantime, or stopped for one of the other reasons. If it is running,
+it will continue after reconnection.
+
+ Upon reconnection, the target will upload information about the
+tracepoints in effect. GDB will then compare that information to the
+set of tracepoints currently defined, and attempt to match them up,
+allowing for the possibility that the numbers may have changed due to
+creation and deletion in the meantime. If one of the target's
+tracepoints does not match any in GDB, the debugger will create a new
+tracepoint, so that you have a number with which to specify that
+tracepoint. This matching-up process is necessarily heuristic, and it
+may result in useless tracepoints being created; you may simply delete
+them if they are of no use.
+
+ If your target agent supports a "circular trace buffer", then you
+can run a trace experiment indefinitely without filling the trace
+buffer; when space runs out, the agent deletes already-collected trace
+frames, oldest first, until there is enough room to continue
+collecting. This is especially useful if your tracepoints are being
+hit too often, and your trace gets terminated prematurely because the
+buffer is full. To ask for a circular trace buffer, simply set
+`circular-trace-buffer' to on. You can set this at any time, including
+during tracing; if the agent can do it, it will change buffer handling
+on the fly, otherwise it will not take effect until the next run.
+
+`set circular-trace-buffer on'
+`set circular-trace-buffer off'
+ Choose whether a tracing run should use a linear or circular buffer
+ for trace data. A linear buffer will not lose any trace data, but
+ may fill up prematurely, while a circular buffer will discard old
+ trace data, but it will have always room for the latest tracepoint
+ hits.
+
+`show circular-trace-buffer'
+ Show the current choice for the trace buffer. Note that this may
+ not match the agent's current buffer handling, nor is it
+ guaranteed to match the setting that might have been in effect
+ during a past run, for instance if you are looking at frames from
+ a trace file.
+
+
+
+File: gdb.info, Node: Tracepoint Restrictions, Prev: Starting and Stopping Trace Experiments, Up: Set Tracepoints
+
+13.1.10 Tracepoint Restrictions
+-------------------------------
+
+There are a number of restrictions on the use of tracepoints. As
+described above, tracepoint data gathering occurs on the target without
+interaction from GDB. Thus the full capabilities of the debugger are
+not available during data gathering, and then at data examination time,
+you will be limited by only having what was collected. The following
+items describe some common problems, but it is not exhaustive, and you
+may run into additional difficulties not mentioned here.
+
+ * Tracepoint expressions are intended to gather objects (lvalues).
+ Thus the full flexibility of GDB's expression evaluator is not
+ available. You cannot call functions, cast objects to aggregate
+ types, access convenience variables or modify values (except by
+ assignment to trace state variables). Some language features may
+ implicitly call functions (for instance Objective-C fields with
+ accessors), and therefore cannot be collected either.
+
+ * Collection of local variables, either individually or in bulk with
+ `$locals' or `$args', during `while-stepping' may behave
+ erratically. The stepping action may enter a new scope (for
+ instance by stepping into a function), or the location of the
+ variable may change (for instance it is loaded into a register).
+ The tracepoint data recorded uses the location information for the
+ variables that is correct for the tracepoint location. When the
+ tracepoint is created, it is not possible, in general, to determine
+ where the steps of a `while-stepping' sequence will advance the
+ program--particularly if a conditional branch is stepped.
+
+ * Collection of an incompletely-initialized or partially-destroyed
+ object may result in something that GDB cannot display, or displays
+ in a misleading way.
+
+ * When GDB displays a pointer to character it automatically
+ dereferences the pointer to also display characters of the string
+ being pointed to. However, collecting the pointer during tracing
+ does not automatically collect the string. You need to explicitly
+ dereference the pointer and provide size information if you want to
+ collect not only the pointer, but the memory pointed to. For
+ example, `*ptr@50' can be used to collect the 50 element array
+ pointed to by `ptr'.
+
+ * It is not possible to collect a complete stack backtrace at a
+ tracepoint. Instead, you may collect the registers and a few
+ hundred bytes from the stack pointer with something like
+ `*$esp@300' (adjust to use the name of the actual stack pointer
+ register on your target architecture, and the amount of stack you
+ wish to capture). Then the `backtrace' command will show a
+ partial backtrace when using a trace frame. The number of stack
+ frames that can be examined depends on the sizes of the frames in
+ the collected stack. Note that if you ask for a block so large
+ that it goes past the bottom of the stack, the target agent may
+ report an error trying to read from an invalid address.
+
+ * If you do not collect registers at a tracepoint, GDB can infer
+ that the value of `$pc' must be the same as the address of the
+ tracepoint and use that when you are looking at a trace frame for
+ that tracepoint. However, this cannot work if the tracepoint has
+ multiple locations (for instance if it was set in a function that
+ was inlined), or if it has a `while-stepping' loop. In those cases
+ GDB will warn you that it can't infer `$pc', and default it to
+ zero.
+
+
+
+File: gdb.info, Node: Analyze Collected Data, Next: Tracepoint Variables, Prev: Set Tracepoints, Up: Tracepoints
+
+13.2 Using the Collected Data
+=============================
+
+After the tracepoint experiment ends, you use GDB commands for
+examining the trace data. The basic idea is that each tracepoint
+collects a trace "snapshot" every time it is hit and another snapshot
+every time it single-steps. All these snapshots are consecutively
+numbered from zero and go into a buffer, and you can examine them
+later. The way you examine them is to "focus" on a specific trace
+snapshot. When the remote stub is focused on a trace snapshot, it will
+respond to all GDB requests for memory and registers by reading from
+the buffer which belongs to that snapshot, rather than from _real_
+memory or registers of the program being debugged. This means that
+*all* GDB commands (`print', `info registers', `backtrace', etc.) will
+behave as if we were currently debugging the program state as it was
+when the tracepoint occurred. Any requests for data that are not in
+the buffer will fail.
+
+* Menu:
+
+* tfind:: How to select a trace snapshot
+* tdump:: How to display all data for a snapshot
+* save tracepoints:: How to save tracepoints for a future run
+
+
+File: gdb.info, Node: tfind, Next: tdump, Up: Analyze Collected Data
+
+13.2.1 `tfind N'
+----------------
+
+The basic command for selecting a trace snapshot from the buffer is
+`tfind N', which finds trace snapshot number N, counting from zero. If
+no argument N is given, the next snapshot is selected.
+
+ Here are the various forms of using the `tfind' command.
+
+`tfind start'
+ Find the first snapshot in the buffer. This is a synonym for
+ `tfind 0' (since 0 is the number of the first snapshot).
+
+`tfind none'
+ Stop debugging trace snapshots, resume _live_ debugging.
+
+`tfind end'
+ Same as `tfind none'.
+
+`tfind'
+ No argument means find the next trace snapshot.
+
+`tfind -'
+ Find the previous trace snapshot before the current one. This
+ permits retracing earlier steps.
+
+`tfind tracepoint NUM'
+ Find the next snapshot associated with tracepoint NUM. Search
+ proceeds forward from the last examined trace snapshot. If no
+ argument NUM is given, it means find the next snapshot collected
+ for the same tracepoint as the current snapshot.
+
+`tfind pc ADDR'
+ Find the next snapshot associated with the value ADDR of the
+ program counter. Search proceeds forward from the last examined
+ trace snapshot. If no argument ADDR is given, it means find the
+ next snapshot with the same value of PC as the current snapshot.
+
+`tfind outside ADDR1, ADDR2'
+ Find the next snapshot whose PC is outside the given range of
+ addresses (exclusive).
+
+`tfind range ADDR1, ADDR2'
+ Find the next snapshot whose PC is between ADDR1 and ADDR2
+ (inclusive).
+
+`tfind line [FILE:]N'
+ Find the next snapshot associated with the source line N. If the
+ optional argument FILE is given, refer to line N in that source
+ file. Search proceeds forward from the last examined trace
+ snapshot. If no argument N is given, it means find the next line
+ other than the one currently being examined; thus saying `tfind
+ line' repeatedly can appear to have the same effect as stepping
+ from line to line in a _live_ debugging session.
+
+ The default arguments for the `tfind' commands are specifically
+designed to make it easy to scan through the trace buffer. For
+instance, `tfind' with no argument selects the next trace snapshot, and
+`tfind -' with no argument selects the previous trace snapshot. So, by
+giving one `tfind' command, and then simply hitting <RET> repeatedly
+you can examine all the trace snapshots in order. Or, by saying `tfind
+-' and then hitting <RET> repeatedly you can examine the snapshots in
+reverse order. The `tfind line' command with no argument selects the
+snapshot for the next source line executed. The `tfind pc' command with
+no argument selects the next snapshot with the same program counter
+(PC) as the current frame. The `tfind tracepoint' command with no
+argument selects the next trace snapshot collected by the same
+tracepoint as the current one.
+
+ In addition to letting you scan through the trace buffer manually,
+these commands make it easy to construct GDB scripts that scan through
+the trace buffer and print out whatever collected data you are
+interested in. Thus, if we want to examine the PC, FP, and SP
+registers from each trace frame in the buffer, we can say this:
+
+ (gdb) tfind start
+ (gdb) while ($trace_frame != -1)
+ > printf "Frame %d, PC = %08X, SP = %08X, FP = %08X\n", \
+ $trace_frame, $pc, $sp, $fp
+ > tfind
+ > end
+
+ Frame 0, PC = 0020DC64, SP = 0030BF3C, FP = 0030BF44
+ Frame 1, PC = 0020DC6C, SP = 0030BF38, FP = 0030BF44
+ Frame 2, PC = 0020DC70, SP = 0030BF34, FP = 0030BF44
+ Frame 3, PC = 0020DC74, SP = 0030BF30, FP = 0030BF44
+ Frame 4, PC = 0020DC78, SP = 0030BF2C, FP = 0030BF44
+ Frame 5, PC = 0020DC7C, SP = 0030BF28, FP = 0030BF44
+ Frame 6, PC = 0020DC80, SP = 0030BF24, FP = 0030BF44
+ Frame 7, PC = 0020DC84, SP = 0030BF20, FP = 0030BF44
+ Frame 8, PC = 0020DC88, SP = 0030BF1C, FP = 0030BF44
+ Frame 9, PC = 0020DC8E, SP = 0030BF18, FP = 0030BF44
+ Frame 10, PC = 00203F6C, SP = 0030BE3C, FP = 0030BF14
+
+ Or, if we want to examine the variable `X' at each source line in
+the buffer:
+
+ (gdb) tfind start
+ (gdb) while ($trace_frame != -1)
+ > printf "Frame %d, X == %d\n", $trace_frame, X
+ > tfind line
+ > end
+
+ Frame 0, X = 1
+ Frame 7, X = 2
+ Frame 13, X = 255
+
+
+File: gdb.info, Node: tdump, Next: save tracepoints, Prev: tfind, Up: Analyze Collected Data
+
+13.2.2 `tdump'
+--------------
+
+This command takes no arguments. It prints all the data collected at
+the current trace snapshot.
+
+ (gdb) trace 444
+ (gdb) actions
+ Enter actions for tracepoint #2, one per line:
+ > collect $regs, $locals, $args, gdb_long_test
+ > end
+
+ (gdb) tstart
+
+ (gdb) tfind line 444
+ #0 gdb_test (p1=0x11, p2=0x22, p3=0x33, p4=0x44, p5=0x55, p6=0x66)
+ at gdb_test.c:444
+ 444 printp( "%s: arguments = 0x%X 0x%X 0x%X 0x%X 0x%X 0x%X\n", )
+
+ (gdb) tdump
+ Data collected at tracepoint 2, trace frame 1:
+ d0 0xc4aa0085 -995491707
+ d1 0x18 24
+ d2 0x80 128
+ d3 0x33 51
+ d4 0x71aea3d 119204413
+ d5 0x22 34
+ d6 0xe0 224
+ d7 0x380035 3670069
+ a0 0x19e24a 1696330
+ a1 0x3000668 50333288
+ a2 0x100 256
+ a3 0x322000 3284992
+ a4 0x3000698 50333336
+ a5 0x1ad3cc 1758156
+ fp 0x30bf3c 0x30bf3c
+ sp 0x30bf34 0x30bf34
+ ps 0x0 0
+ pc 0x20b2c8 0x20b2c8
+ fpcontrol 0x0 0
+ fpstatus 0x0 0
+ fpiaddr 0x0 0
+ p = 0x20e5b4 "gdb-test"
+ p1 = (void *) 0x11
+ p2 = (void *) 0x22
+ p3 = (void *) 0x33
+ p4 = (void *) 0x44
+ p5 = (void *) 0x55
+ p6 = (void *) 0x66
+ gdb_long_test = 17 '\021'
+
+ (gdb)
+
+ `tdump' works by scanning the tracepoint's current collection
+actions and printing the value of each expression listed. So `tdump'
+can fail, if after a run, you change the tracepoint's actions to
+mention variables that were not collected during the run.
+
+ Also, for tracepoints with `while-stepping' loops, `tdump' uses the
+collected value of `$pc' to distinguish between trace frames that were
+collected at the tracepoint hit, and frames that were collected while
+stepping. This allows it to correctly choose whether to display the
+basic list of collections, or the collections from the body of the
+while-stepping loop. However, if `$pc' was not collected, then `tdump'
+will always attempt to dump using the basic collection list, and may
+fail if a while-stepping frame does not include all the same data that
+is collected at the tracepoint hit.
+
+
+File: gdb.info, Node: save tracepoints, Prev: tdump, Up: Analyze Collected Data
+
+13.2.3 `save tracepoints FILENAME'
+----------------------------------
+
+This command saves all current tracepoint definitions together with
+their actions and passcounts, into a file `FILENAME' suitable for use
+in a later debugging session. To read the saved tracepoint
+definitions, use the `source' command (*note Command Files::). The
+`save-tracepoints' command is a deprecated alias for `save tracepoints'
+
+
+File: gdb.info, Node: Tracepoint Variables, Next: Trace Files, Prev: Analyze Collected Data, Up: Tracepoints
+
+13.3 Convenience Variables for Tracepoints
+==========================================
+
+`(int) $trace_frame'
+ The current trace snapshot (a.k.a. "frame") number, or -1 if no
+ snapshot is selected.
+
+`(int) $tracepoint'
+ The tracepoint for the current trace snapshot.
+
+`(int) $trace_line'
+ The line number for the current trace snapshot.
+
+`(char []) $trace_file'
+ The source file for the current trace snapshot.
+
+`(char []) $trace_func'
+ The name of the function containing `$tracepoint'.
+
+ Note: `$trace_file' is not suitable for use in `printf', use
+`output' instead.
+
+ Here's a simple example of using these convenience variables for
+stepping through all the trace snapshots and printing some of their
+data. Note that these are not the same as trace state variables, which
+are managed by the target.
+
+ (gdb) tfind start
+
+ (gdb) while $trace_frame != -1
+ > output $trace_file
+ > printf ", line %d (tracepoint #%d)\n", $trace_line, $tracepoint
+ > tfind
+ > end
+
+
+File: gdb.info, Node: Trace Files, Prev: Tracepoint Variables, Up: Tracepoints
+
+13.4 Using Trace Files
+======================
+
+In some situations, the target running a trace experiment may no longer
+be available; perhaps it crashed, or the hardware was needed for a
+different activity. To handle these cases, you can arrange to dump the
+trace data into a file, and later use that file as a source of trace
+data, via the `target tfile' command.
+
+`tsave [ -r ] FILENAME'
+ Save the trace data to FILENAME. By default, this command assumes
+ that FILENAME refers to the host filesystem, so if necessary GDB
+ will copy raw trace data up from the target and then save it. If
+ the target supports it, you can also supply the optional argument
+ `-r' ("remote") to direct the target to save the data directly
+ into FILENAME in its own filesystem, which may be more efficient
+ if the trace buffer is very large. (Note, however, that `target
+ tfile' can only read from files accessible to the host.)
+
+`target tfile FILENAME'
+ Use the file named FILENAME as a source of trace data. Commands
+ that examine data work as they do with a live target, but it is not
+ possible to run any new trace experiments. `tstatus' will report
+ the state of the trace run at the moment the data was saved, as
+ well as the current trace frame you are examining. FILENAME must
+ be on a filesystem accessible to the host.
+
+
+
+File: gdb.info, Node: Overlays, Next: Languages, Prev: Tracepoints, Up: Top
+
+14 Debugging Programs That Use Overlays
+***************************************
+
+If your program is too large to fit completely in your target system's
+memory, you can sometimes use "overlays" to work around this problem.
+GDB provides some support for debugging programs that use overlays.
+
+* Menu:
+
+* How Overlays Work:: A general explanation of overlays.
+* Overlay Commands:: Managing overlays in GDB.
+* Automatic Overlay Debugging:: GDB can find out which overlays are
+ mapped by asking the inferior.
+* Overlay Sample Program:: A sample program using overlays.
+
+
+File: gdb.info, Node: How Overlays Work, Next: Overlay Commands, Up: Overlays
+
+14.1 How Overlays Work
+======================
+
+Suppose you have a computer whose instruction address space is only 64
+kilobytes long, but which has much more memory which can be accessed by
+other means: special instructions, segment registers, or memory
+management hardware, for example. Suppose further that you want to
+adapt a program which is larger than 64 kilobytes to run on this system.
+
+ One solution is to identify modules of your program which are
+relatively independent, and need not call each other directly; call
+these modules "overlays". Separate the overlays from the main program,
+and place their machine code in the larger memory. Place your main
+program in instruction memory, but leave at least enough space there to
+hold the largest overlay as well.
+
+ Now, to call a function located in an overlay, you must first copy
+that overlay's machine code from the large memory into the space set
+aside for it in the instruction memory, and then jump to its entry point
+there.
+
+ Data Instruction Larger
+ Address Space Address Space Address Space
+ +-----------+ +-----------+ +-----------+
+ | | | | | |
+ +-----------+ +-----------+ +-----------+<-- overlay 1
+ | program | | main | .----| overlay 1 | load address
+ | variables | | program | | +-----------+
+ | and heap | | | | | |
+ +-----------+ | | | +-----------+<-- overlay 2
+ | | +-----------+ | | | load address
+ +-----------+ | | | .-| overlay 2 |
+ | | | | | |
+ mapped --->+-----------+ | | +-----------+
+ address | | | | | |
+ | overlay | <-' | | |
+ | area | <---' +-----------+<-- overlay 3
+ | | <---. | | load address
+ +-----------+ `--| overlay 3 |
+ | | | |
+ +-----------+ | |
+ +-----------+
+ | |
+ +-----------+
+
+ A code overlay
+
+ The diagram (*note A code overlay::) shows a system with separate
+data and instruction address spaces. To map an overlay, the program
+copies its code from the larger address space to the instruction
+address space. Since the overlays shown here all use the same mapped
+address, only one may be mapped at a time. For a system with a single
+address space for data and instructions, the diagram would be similar,
+except that the program variables and heap would share an address space
+with the main program and the overlay area.
+
+ An overlay loaded into instruction memory and ready for use is
+called a "mapped" overlay; its "mapped address" is its address in the
+instruction memory. An overlay not present (or only partially present)
+in instruction memory is called "unmapped"; its "load address" is its
+address in the larger memory. The mapped address is also called the
+"virtual memory address", or "VMA"; the load address is also called the
+"load memory address", or "LMA".
+
+ Unfortunately, overlays are not a completely transparent way to
+adapt a program to limited instruction memory. They introduce a new
+set of global constraints you must keep in mind as you design your
+program:
+
+ * Before calling or returning to a function in an overlay, your
+ program must make sure that overlay is actually mapped.
+ Otherwise, the call or return will transfer control to the right
+ address, but in the wrong overlay, and your program will probably
+ crash.
+
+ * If the process of mapping an overlay is expensive on your system,
+ you will need to choose your overlays carefully to minimize their
+ effect on your program's performance.
+
+ * The executable file you load onto your system must contain each
+ overlay's instructions, appearing at the overlay's load address,
+ not its mapped address. However, each overlay's instructions must
+ be relocated and its symbols defined as if the overlay were at its
+ mapped address. You can use GNU linker scripts to specify
+ different load and relocation addresses for pieces of your
+ program; see *note Overlay Description: (ld.info)Overlay
+ Description.
+
+ * The procedure for loading executable files onto your system must
+ be able to load their contents into the larger address space as
+ well as the instruction and data spaces.
+
+
+ The overlay system described above is rather simple, and could be
+improved in many ways:
+
+ * If your system has suitable bank switch registers or memory
+ management hardware, you could use those facilities to make an
+ overlay's load area contents simply appear at their mapped address
+ in instruction space. This would probably be faster than copying
+ the overlay to its mapped area in the usual way.
+
+ * If your overlays are small enough, you could set aside more than
+ one overlay area, and have more than one overlay mapped at a time.
+
+ * You can use overlays to manage data, as well as instructions. In
+ general, data overlays are even less transparent to your design
+ than code overlays: whereas code overlays only require care when
+ you call or return to functions, data overlays require care every
+ time you access the data. Also, if you change the contents of a
+ data overlay, you must copy its contents back out to its load
+ address before you can copy a different data overlay into the same
+ mapped area.
+
+
+
+File: gdb.info, Node: Overlay Commands, Next: Automatic Overlay Debugging, Prev: How Overlays Work, Up: Overlays
+
+14.2 Overlay Commands
+=====================
+
+To use GDB's overlay support, each overlay in your program must
+correspond to a separate section of the executable file. The section's
+virtual memory address and load memory address must be the overlay's
+mapped and load addresses. Identifying overlays with sections allows
+GDB to determine the appropriate address of a function or variable,
+depending on whether the overlay is mapped or not.
+
+ GDB's overlay commands all start with the word `overlay'; you can
+abbreviate this as `ov' or `ovly'. The commands are:
+
+`overlay off'
+ Disable GDB's overlay support. When overlay support is disabled,
+ GDB assumes that all functions and variables are always present at
+ their mapped addresses. By default, GDB's overlay support is
+ disabled.
+
+`overlay manual'
+ Enable "manual" overlay debugging. In this mode, GDB relies on
+ you to tell it which overlays are mapped, and which are not, using
+ the `overlay map-overlay' and `overlay unmap-overlay' commands
+ described below.
+
+`overlay map-overlay OVERLAY'
+`overlay map OVERLAY'
+ Tell GDB that OVERLAY is now mapped; OVERLAY must be the name of
+ the object file section containing the overlay. When an overlay
+ is mapped, GDB assumes it can find the overlay's functions and
+ variables at their mapped addresses. GDB assumes that any other
+ overlays whose mapped ranges overlap that of OVERLAY are now
+ unmapped.
+
+`overlay unmap-overlay OVERLAY'
+`overlay unmap OVERLAY'
+ Tell GDB that OVERLAY is no longer mapped; OVERLAY must be the
+ name of the object file section containing the overlay. When an
+ overlay is unmapped, GDB assumes it can find the overlay's
+ functions and variables at their load addresses.
+
+`overlay auto'
+ Enable "automatic" overlay debugging. In this mode, GDB consults
+ a data structure the overlay manager maintains in the inferior to
+ see which overlays are mapped. For details, see *note Automatic
+ Overlay Debugging::.
+
+`overlay load-target'
+`overlay load'
+ Re-read the overlay table from the inferior. Normally, GDB
+ re-reads the table GDB automatically each time the inferior stops,
+ so this command should only be necessary if you have changed the
+ overlay mapping yourself using GDB. This command is only useful
+ when using automatic overlay debugging.
+
+`overlay list-overlays'
+`overlay list'
+ Display a list of the overlays currently mapped, along with their
+ mapped addresses, load addresses, and sizes.
+
+
+ Normally, when GDB prints a code address, it includes the name of
+the function the address falls in:
+
+ (gdb) print main
+ $3 = {int ()} 0x11a0 <main>
+ When overlay debugging is enabled, GDB recognizes code in unmapped
+overlays, and prints the names of unmapped functions with asterisks
+around them. For example, if `foo' is a function in an unmapped
+overlay, GDB prints it this way:
+
+ (gdb) overlay list
+ No sections are mapped.
+ (gdb) print foo
+ $5 = {int (int)} 0x100000 <*foo*>
+ When `foo''s overlay is mapped, GDB prints the function's name
+normally:
+
+ (gdb) overlay list
+ Section .ov.foo.text, loaded at 0x100000 - 0x100034,
+ mapped at 0x1016 - 0x104a
+ (gdb) print foo
+ $6 = {int (int)} 0x1016 <foo>
+
+ When overlay debugging is enabled, GDB can find the correct address
+for functions and variables in an overlay, whether or not the overlay
+is mapped. This allows most GDB commands, like `break' and
+`disassemble', to work normally, even on unmapped code. However, GDB's
+breakpoint support has some limitations:
+
+ * You can set breakpoints in functions in unmapped overlays, as long
+ as GDB can write to the overlay at its load address.
+
+ * GDB can not set hardware or simulator-based breakpoints in
+ unmapped overlays. However, if you set a breakpoint at the end of
+ your overlay manager (and tell GDB which overlays are now mapped,
+ if you are using manual overlay management), GDB will re-set its
+ breakpoints properly.
+
+
+File: gdb.info, Node: Automatic Overlay Debugging, Next: Overlay Sample Program, Prev: Overlay Commands, Up: Overlays
+
+14.3 Automatic Overlay Debugging
+================================
+
+GDB can automatically track which overlays are mapped and which are
+not, given some simple co-operation from the overlay manager in the
+inferior. If you enable automatic overlay debugging with the `overlay
+auto' command (*note Overlay Commands::), GDB looks in the inferior's
+memory for certain variables describing the current state of the
+overlays.
+
+ Here are the variables your overlay manager must define to support
+GDB's automatic overlay debugging:
+
+`_ovly_table':
+ This variable must be an array of the following structures:
+
+ struct
+ {
+ /* The overlay's mapped address. */
+ unsigned long vma;
+
+ /* The size of the overlay, in bytes. */
+ unsigned long size;
+
+ /* The overlay's load address. */
+ unsigned long lma;
+
+ /* Non-zero if the overlay is currently mapped;
+ zero otherwise. */
+ unsigned long mapped;
+ }
+
+`_novlys':
+ This variable must be a four-byte signed integer, holding the total
+ number of elements in `_ovly_table'.
+
+
+ To decide whether a particular overlay is mapped or not, GDB looks
+for an entry in `_ovly_table' whose `vma' and `lma' members equal the
+VMA and LMA of the overlay's section in the executable file. When GDB
+finds a matching entry, it consults the entry's `mapped' member to
+determine whether the overlay is currently mapped.
+
+ In addition, your overlay manager may define a function called
+`_ovly_debug_event'. If this function is defined, GDB will silently
+set a breakpoint there. If the overlay manager then calls this
+function whenever it has changed the overlay table, this will enable
+GDB to accurately keep track of which overlays are in program memory,
+and update any breakpoints that may be set in overlays. This will
+allow breakpoints to work even if the overlays are kept in ROM or other
+non-writable memory while they are not being executed.
+
+
+File: gdb.info, Node: Overlay Sample Program, Prev: Automatic Overlay Debugging, Up: Overlays
+
+14.4 Overlay Sample Program
+===========================
+
+When linking a program which uses overlays, you must place the overlays
+at their load addresses, while relocating them to run at their mapped
+addresses. To do this, you must write a linker script (*note Overlay
+Description: (ld.info)Overlay Description.). Unfortunately, since
+linker scripts are specific to a particular host system, target
+architecture, and target memory layout, this manual cannot provide
+portable sample code demonstrating GDB's overlay support.
+
+ However, the GDB source distribution does contain an overlaid
+program, with linker scripts for a few systems, as part of its test
+suite. The program consists of the following files from
+`gdb/testsuite/gdb.base':
+
+`overlays.c'
+ The main program file.
+
+`ovlymgr.c'
+ A simple overlay manager, used by `overlays.c'.
+
+`foo.c'
+`bar.c'
+`baz.c'
+`grbx.c'
+ Overlay modules, loaded and used by `overlays.c'.
+
+`d10v.ld'
+`m32r.ld'
+ Linker scripts for linking the test program on the `d10v-elf' and
+ `m32r-elf' targets.
+
+ You can build the test program using the `d10v-elf' GCC
+cross-compiler like this:
+
+ $ d10v-elf-gcc -g -c overlays.c
+ $ d10v-elf-gcc -g -c ovlymgr.c
+ $ d10v-elf-gcc -g -c foo.c
+ $ d10v-elf-gcc -g -c bar.c
+ $ d10v-elf-gcc -g -c baz.c
+ $ d10v-elf-gcc -g -c grbx.c
+ $ d10v-elf-gcc -g overlays.o ovlymgr.o foo.o bar.o \
+ baz.o grbx.o -Wl,-Td10v.ld -o overlays
+
+ The build process is identical for any other architecture, except
+that you must substitute the appropriate compiler and linker script for
+the target system for `d10v-elf-gcc' and `d10v.ld'.
+
+
+File: gdb.info, Node: Languages, Next: Symbols, Prev: Overlays, Up: Top
+
+15 Using GDB with Different Languages
+*************************************
+
+Although programming languages generally have common aspects, they are
+rarely expressed in the same manner. For instance, in ANSI C,
+dereferencing a pointer `p' is accomplished by `*p', but in Modula-2,
+it is accomplished by `p^'. Values can also be represented (and
+displayed) differently. Hex numbers in C appear as `0x1ae', while in
+Modula-2 they appear as `1AEH'.
+
+ Language-specific information is built into GDB for some languages,
+allowing you to express operations like the above in your program's
+native language, and allowing GDB to output values in a manner
+consistent with the syntax of your program's native language. The
+language you use to build expressions is called the "working language".
+
+* Menu:
+
+* Setting:: Switching between source languages
+* Show:: Displaying the language
+* Checks:: Type and range checks
+* Supported Languages:: Supported languages
+* Unsupported Languages:: Unsupported languages
+
+
+File: gdb.info, Node: Setting, Next: Show, Up: Languages
+
+15.1 Switching Between Source Languages
+=======================================
+
+There are two ways to control the working language--either have GDB set
+it automatically, or select it manually yourself. You can use the `set
+language' command for either purpose. On startup, GDB defaults to
+setting the language automatically. The working language is used to
+determine how expressions you type are interpreted, how values are
+printed, etc.
+
+ In addition to the working language, every source file that GDB
+knows about has its own working language. For some object file
+formats, the compiler might indicate which language a particular source
+file is in. However, most of the time GDB infers the language from the
+name of the file. The language of a source file controls whether C++
+names are demangled--this way `backtrace' can show each frame
+appropriately for its own language. There is no way to set the
+language of a source file from within GDB, but you can set the language
+associated with a filename extension. *Note Displaying the Language:
+Show.
+
+ This is most commonly a problem when you use a program, such as
+`cfront' or `f2c', that generates C but is written in another language.
+In that case, make the program use `#line' directives in its C output;
+that way GDB will know the correct language of the source code of the
+original program, and will display that source code, not the generated
+C code.
+
+* Menu:
+
+* Filenames:: Filename extensions and languages.
+* Manually:: Setting the working language manually
+* Automatically:: Having GDB infer the source language
+
+
+File: gdb.info, Node: Filenames, Next: Manually, Up: Setting
+
+15.1.1 List of Filename Extensions and Languages
+------------------------------------------------
+
+If a source file name ends in one of the following extensions, then GDB
+infers that its language is the one indicated.
+
+`.ada'
+`.ads'
+`.adb'
+`.a'
+ Ada source file.
+
+`.c'
+ C source file
+
+`.C'
+`.cc'
+`.cp'
+`.cpp'
+`.cxx'
+`.c++'
+ C++ source file
+
+`.d'
+ D source file
+
+`.m'
+ Objective-C source file
+
+`.f'
+`.F'
+ Fortran source file
+
+`.mod'
+ Modula-2 source file
+
+`.s'
+`.S'
+ Assembler source file. This actually behaves almost like C, but
+ GDB does not skip over function prologues when stepping.
+
+ In addition, you may set the language associated with a filename
+extension. *Note Displaying the Language: Show.
+
+
+File: gdb.info, Node: Manually, Next: Automatically, Prev: Filenames, Up: Setting
+
+15.1.2 Setting the Working Language
+-----------------------------------
+
+If you allow GDB to set the language automatically, expressions are
+interpreted the same way in your debugging session and your program.
+
+ If you wish, you may set the language manually. To do this, issue
+the command `set language LANG', where LANG is the name of a language,
+such as `c' or `modula-2'. For a list of the supported languages, type
+`set language'.
+
+ Setting the language manually prevents GDB from updating the working
+language automatically. This can lead to confusion if you try to debug
+a program when the working language is not the same as the source
+language, when an expression is acceptable to both languages--but means
+different things. For instance, if the current source file were
+written in C, and GDB was parsing Modula-2, a command such as:
+
+ print a = b + c
+
+might not have the effect you intended. In C, this means to add `b'
+and `c' and place the result in `a'. The result printed would be the
+value of `a'. In Modula-2, this means to compare `a' to the result of
+`b+c', yielding a `BOOLEAN' value.
+
+
+File: gdb.info, Node: Automatically, Prev: Manually, Up: Setting
+
+15.1.3 Having GDB Infer the Source Language
+-------------------------------------------
+
+To have GDB set the working language automatically, use `set language
+local' or `set language auto'. GDB then infers the working language.
+That is, when your program stops in a frame (usually by encountering a
+breakpoint), GDB sets the working language to the language recorded for
+the function in that frame. If the language for a frame is unknown
+(that is, if the function or block corresponding to the frame was
+defined in a source file that does not have a recognized extension),
+the current working language is not changed, and GDB issues a warning.
+
+ This may not seem necessary for most programs, which are written
+entirely in one source language. However, program modules and libraries
+written in one source language can be used by a main program written in
+a different source language. Using `set language auto' in this case
+frees you from having to set the working language manually.
+
+
+File: gdb.info, Node: Show, Next: Checks, Prev: Setting, Up: Languages
+
+15.2 Displaying the Language
+============================
+
+The following commands help you find out which language is the working
+language, and also what language source files were written in.
+
+`show language'
+ Display the current working language. This is the language you
+ can use with commands such as `print' to build and compute
+ expressions that may involve variables in your program.
+
+`info frame'
+ Display the source language for this frame. This language becomes
+ the working language if you use an identifier from this frame.
+ *Note Information about a Frame: Frame Info, to identify the other
+ information listed here.
+
+`info source'
+ Display the source language of this source file. *Note Examining
+ the Symbol Table: Symbols, to identify the other information
+ listed here.
+
+ In unusual circumstances, you may have source files with extensions
+not in the standard list. You can then set the extension associated
+with a language explicitly:
+
+`set extension-language EXT LANGUAGE'
+ Tell GDB that source files with extension EXT are to be assumed as
+ written in the source language LANGUAGE.
+
+`info extensions'
+ List all the filename extensions and the associated languages.
+
+
+File: gdb.info, Node: Checks, Next: Supported Languages, Prev: Show, Up: Languages
+
+15.3 Type and Range Checking
+============================
+
+ _Warning:_ In this release, the GDB commands for type and range
+ checking are included, but they do not yet have any effect. This
+ section documents the intended facilities.
+
+ Some languages are designed to guard you against making seemingly
+common errors through a series of compile- and run-time checks. These
+include checking the type of arguments to functions and operators, and
+making sure mathematical overflows are caught at run time. Checks such
+as these help to ensure a program's correctness once it has been
+compiled by eliminating type mismatches, and providing active checks
+for range errors when your program is running.
+
+ GDB can check for conditions like the above if you wish. Although
+GDB does not check the statements in your program, it can check
+expressions entered directly into GDB for evaluation via the `print'
+command, for example. As with the working language, GDB can also
+decide whether or not to check automatically based on your program's
+source language. *Note Supported Languages: Supported Languages, for
+the default settings of supported languages.
+
+* Menu:
+
+* Type Checking:: An overview of type checking
+* Range Checking:: An overview of range checking
+
+
+File: gdb.info, Node: Type Checking, Next: Range Checking, Up: Checks
+
+15.3.1 An Overview of Type Checking
+-----------------------------------
+
+Some languages, such as Modula-2, are strongly typed, meaning that the
+arguments to operators and functions have to be of the correct type,
+otherwise an error occurs. These checks prevent type mismatch errors
+from ever causing any run-time problems. For example,
+
+ 1 + 2 => 3
+but
+ error--> 1 + 2.3
+
+ The second example fails because the `CARDINAL' 1 is not
+type-compatible with the `REAL' 2.3.
+
+ For the expressions you use in GDB commands, you can tell the GDB
+type checker to skip checking; to treat any mismatches as errors and
+abandon the expression; or to only issue warnings when type mismatches
+occur, but evaluate the expression anyway. When you choose the last of
+these, GDB evaluates expressions like the second example above, but
+also issues a warning.
+
+ Even if you turn type checking off, there may be other reasons
+related to type that prevent GDB from evaluating an expression. For
+instance, GDB does not know how to add an `int' and a `struct foo'.
+These particular type errors have nothing to do with the language in
+use, and usually arise from expressions, such as the one described
+above, which make little sense to evaluate anyway.
+
+ Each language defines to what degree it is strict about type. For
+instance, both Modula-2 and C require the arguments to arithmetical
+operators to be numbers. In C, enumerated types and pointers can be
+represented as numbers, so that they are valid arguments to mathematical
+operators. *Note Supported Languages: Supported Languages, for further
+details on specific languages.
+
+ GDB provides some additional commands for controlling the type
+checker:
+
+`set check type auto'
+ Set type checking on or off based on the current working language.
+ *Note Supported Languages: Supported Languages, for the default
+ settings for each language.
+
+`set check type on'
+`set check type off'
+ Set type checking on or off, overriding the default setting for the
+ current working language. Issue a warning if the setting does not
+ match the language default. If any type mismatches occur in
+ evaluating an expression while type checking is on, GDB prints a
+ message and aborts evaluation of the expression.
+
+`set check type warn'
+ Cause the type checker to issue warnings, but to always attempt to
+ evaluate the expression. Evaluating the expression may still be
+ impossible for other reasons. For example, GDB cannot add numbers
+ and structures.
+
+`show type'
+ Show the current setting of the type checker, and whether or not
+ GDB is setting it automatically.
+
+
+File: gdb.info, Node: Range Checking, Prev: Type Checking, Up: Checks
+
+15.3.2 An Overview of Range Checking
+------------------------------------
+
+In some languages (such as Modula-2), it is an error to exceed the
+bounds of a type; this is enforced with run-time checks. Such range
+checking is meant to ensure program correctness by making sure
+computations do not overflow, or indices on an array element access do
+not exceed the bounds of the array.
+
+ For expressions you use in GDB commands, you can tell GDB to treat
+range errors in one of three ways: ignore them, always treat them as
+errors and abandon the expression, or issue warnings but evaluate the
+expression anyway.
+
+ A range error can result from numerical overflow, from exceeding an
+array index bound, or when you type a constant that is not a member of
+any type. Some languages, however, do not treat overflows as an error.
+In many implementations of C, mathematical overflow causes the result
+to "wrap around" to lower values--for example, if M is the largest
+integer value, and S is the smallest, then
+
+ M + 1 => S
+
+ This, too, is specific to individual languages, and in some cases
+specific to individual compilers or machines. *Note Supported
+Languages: Supported Languages, for further details on specific
+languages.
+
+ GDB provides some additional commands for controlling the range
+checker:
+
+`set check range auto'
+ Set range checking on or off based on the current working language.
+ *Note Supported Languages: Supported Languages, for the default
+ settings for each language.
+
+`set check range on'
+`set check range off'
+ Set range checking on or off, overriding the default setting for
+ the current working language. A warning is issued if the setting
+ does not match the language default. If a range error occurs and
+ range checking is on, then a message is printed and evaluation of
+ the expression is aborted.
+
+`set check range warn'
+ Output messages when the GDB range checker detects a range error,
+ but attempt to evaluate the expression anyway. Evaluating the
+ expression may still be impossible for other reasons, such as
+ accessing memory that the process does not own (a typical example
+ from many Unix systems).
+
+`show range'
+ Show the current setting of the range checker, and whether or not
+ it is being set automatically by GDB.
+
+
+File: gdb.info, Node: Supported Languages, Next: Unsupported Languages, Prev: Checks, Up: Languages
+
+15.4 Supported Languages
+========================
+
+GDB supports C, C++, D, Objective-C, Fortran, Java, OpenCL C, Pascal,
+assembly, Modula-2, and Ada. Some GDB features may be used in
+expressions regardless of the language you use: the GDB `@' and `::'
+operators, and the `{type}addr' construct (*note Expressions:
+Expressions.) can be used with the constructs of any supported language.
+
+ The following sections detail to what degree each source language is
+supported by GDB. These sections are not meant to be language
+tutorials or references, but serve only as a reference guide to what the
+GDB expression parser accepts, and what input and output formats should
+look like for different languages. There are many good books written
+on each of these languages; please look to these for a language
+reference or tutorial.
+
+* Menu:
+
+* C:: C and C++
+* D:: D
+* Objective-C:: Objective-C
+* OpenCL C:: OpenCL C
+* Fortran:: Fortran
+* Pascal:: Pascal
+* Modula-2:: Modula-2
+* Ada:: Ada
+
+
+File: gdb.info, Node: C, Next: D, Up: Supported Languages
+
+15.4.1 C and C++
+----------------
+
+Since C and C++ are so closely related, many features of GDB apply to
+both languages. Whenever this is the case, we discuss those languages
+together.
+
+ The C++ debugging facilities are jointly implemented by the C++
+compiler and GDB. Therefore, to debug your C++ code effectively, you
+must compile your C++ programs with a supported C++ compiler, such as
+GNU `g++', or the HP ANSI C++ compiler (`aCC').
+
+ For best results when using GNU C++, use the DWARF 2 debugging
+format; if it doesn't work on your system, try the stabs+ debugging
+format. You can select those formats explicitly with the `g++'
+command-line options `-gdwarf-2' and `-gstabs+'. *Note Options for
+Debugging Your Program or GCC: (gcc.info)Debugging Options.
+
+* Menu:
+
+* C Operators:: C and C++ operators
+* C Constants:: C and C++ constants
+* C Plus Plus Expressions:: C++ expressions
+* C Defaults:: Default settings for C and C++
+* C Checks:: C and C++ type and range checks
+* Debugging C:: GDB and C
+* Debugging C Plus Plus:: GDB features for C++
+* Decimal Floating Point:: Numbers in Decimal Floating Point format
+
+
+File: gdb.info, Node: C Operators, Next: C Constants, Up: C
+
+15.4.1.1 C and C++ Operators
+............................
+
+Operators must be defined on values of specific types. For instance,
+`+' is defined on numbers, but not on structures. Operators are often
+defined on groups of types.
+
+ For the purposes of C and C++, the following definitions hold:
+
+ * _Integral types_ include `int' with any of its storage-class
+ specifiers; `char'; `enum'; and, for C++, `bool'.
+
+ * _Floating-point types_ include `float', `double', and `long
+ double' (if supported by the target platform).
+
+ * _Pointer types_ include all types defined as `(TYPE *)'.
+
+ * _Scalar types_ include all of the above.
+
+
+The following operators are supported. They are listed here in order
+of increasing precedence:
+
+`,'
+ The comma or sequencing operator. Expressions in a
+ comma-separated list are evaluated from left to right, with the
+ result of the entire expression being the last expression
+ evaluated.
+
+`='
+ Assignment. The value of an assignment expression is the value
+ assigned. Defined on scalar types.
+
+`OP='
+ Used in an expression of the form `A OP= B', and translated to
+ `A = A OP B'. `OP=' and `=' have the same precedence. OP is any
+ one of the operators `|', `^', `&', `<<', `>>', `+', `-', `*',
+ `/', `%'.
+
+`?:'
+ The ternary operator. `A ? B : C' can be thought of as: if A
+ then B else C. A should be of an integral type.
+
+`||'
+ Logical OR. Defined on integral types.
+
+`&&'
+ Logical AND. Defined on integral types.
+
+`|'
+ Bitwise OR. Defined on integral types.
+
+`^'
+ Bitwise exclusive-OR. Defined on integral types.
+
+`&'
+ Bitwise AND. Defined on integral types.
+
+`==, !='
+ Equality and inequality. Defined on scalar types. The value of
+ these expressions is 0 for false and non-zero for true.
+
+`<, >, <=, >='
+ Less than, greater than, less than or equal, greater than or equal.
+ Defined on scalar types. The value of these expressions is 0 for
+ false and non-zero for true.
+
+`<<, >>'
+ left shift, and right shift. Defined on integral types.
+
+`@'
+ The GDB "artificial array" operator (*note Expressions:
+ Expressions.).
+
+`+, -'
+ Addition and subtraction. Defined on integral types,
+ floating-point types and pointer types.
+
+`*, /, %'
+ Multiplication, division, and modulus. Multiplication and
+ division are defined on integral and floating-point types.
+ Modulus is defined on integral types.
+
+`++, --'
+ Increment and decrement. When appearing before a variable, the
+ operation is performed before the variable is used in an
+ expression; when appearing after it, the variable's value is used
+ before the operation takes place.
+
+`*'
+ Pointer dereferencing. Defined on pointer types. Same precedence
+ as `++'.
+
+`&'
+ Address operator. Defined on variables. Same precedence as `++'.
+
+ For debugging C++, GDB implements a use of `&' beyond what is
+ allowed in the C++ language itself: you can use `&(&REF)' to
+ examine the address where a C++ reference variable (declared with
+ `&REF') is stored.
+
+`-'
+ Negative. Defined on integral and floating-point types. Same
+ precedence as `++'.
+
+`!'
+ Logical negation. Defined on integral types. Same precedence as
+ `++'.
+
+`~'
+ Bitwise complement operator. Defined on integral types. Same
+ precedence as `++'.
+
+`., ->'
+ Structure member, and pointer-to-structure member. For
+ convenience, GDB regards the two as equivalent, choosing whether
+ to dereference a pointer based on the stored type information.
+ Defined on `struct' and `union' data.
+
+`.*, ->*'
+ Dereferences of pointers to members.
+
+`[]'
+ Array indexing. `A[I]' is defined as `*(A+I)'. Same precedence
+ as `->'.
+
+`()'
+ Function parameter list. Same precedence as `->'.
+
+`::'
+ C++ scope resolution operator. Defined on `struct', `union', and
+ `class' types.
+
+`::'
+ Doubled colons also represent the GDB scope operator (*note
+ Expressions: Expressions.). Same precedence as `::', above.
+
+ If an operator is redefined in the user code, GDB usually attempts
+to invoke the redefined version instead of using the operator's
+predefined meaning.
+
+
+File: gdb.info, Node: C Constants, Next: C Plus Plus Expressions, Prev: C Operators, Up: C
+
+15.4.1.2 C and C++ Constants
+............................
+
+GDB allows you to express the constants of C and C++ in the following
+ways:
+
+ * Integer constants are a sequence of digits. Octal constants are
+ specified by a leading `0' (i.e. zero), and hexadecimal constants
+ by a leading `0x' or `0X'. Constants may also end with a letter
+ `l', specifying that the constant should be treated as a `long'
+ value.
+
+ * Floating point constants are a sequence of digits, followed by a
+ decimal point, followed by a sequence of digits, and optionally
+ followed by an exponent. An exponent is of the form:
+ `e[[+]|-]NNN', where NNN is another sequence of digits. The `+'
+ is optional for positive exponents. A floating-point constant may
+ also end with a letter `f' or `F', specifying that the constant
+ should be treated as being of the `float' (as opposed to the
+ default `double') type; or with a letter `l' or `L', which
+ specifies a `long double' constant.
+
+ * Enumerated constants consist of enumerated identifiers, or their
+ integral equivalents.
+
+ * Character constants are a single character surrounded by single
+ quotes (`''), or a number--the ordinal value of the corresponding
+ character (usually its ASCII value). Within quotes, the single
+ character may be represented by a letter or by "escape sequences",
+ which are of the form `\NNN', where NNN is the octal representation
+ of the character's ordinal value; or of the form `\X', where `X'
+ is a predefined special character--for example, `\n' for newline.
+
+ * String constants are a sequence of character constants surrounded
+ by double quotes (`"'). Any valid character constant (as described
+ above) may appear. Double quotes within the string must be
+ preceded by a backslash, so for instance `"a\"b'c"' is a string of
+ five characters.
+
+ * Pointer constants are an integral value. You can also write
+ pointers to constants using the C operator `&'.
+
+ * Array constants are comma-separated lists surrounded by braces `{'
+ and `}'; for example, `{1,2,3}' is a three-element array of
+ integers, `{{1,2}, {3,4}, {5,6}}' is a three-by-two array, and
+ `{&"hi", &"there", &"fred"}' is a three-element array of pointers.
+
+
+File: gdb.info, Node: C Plus Plus Expressions, Next: C Defaults, Prev: C Constants, Up: C
+
+15.4.1.3 C++ Expressions
+........................
+
+GDB expression handling can interpret most C++ expressions.
+
+ _Warning:_ GDB can only debug C++ code if you use the proper
+ compiler and the proper debug format. Currently, GDB works best
+ when debugging C++ code that is compiled with GCC 2.95.3 or with
+ GCC 3.1 or newer, using the options `-gdwarf-2' or `-gstabs+'.
+ DWARF 2 is preferred over stabs+. Most configurations of GCC emit
+ either DWARF 2 or stabs+ as their default debug format, so you
+ usually don't need to specify a debug format explicitly. Other
+ compilers and/or debug formats are likely to work badly or not at
+ all when using GDB to debug C++ code.
+
+ 1. Member function calls are allowed; you can use expressions like
+
+ count = aml->GetOriginal(x, y)
+
+ 2. While a member function is active (in the selected stack frame),
+ your expressions have the same namespace available as the member
+ function; that is, GDB allows implicit references to the class
+ instance pointer `this' following the same rules as C++.
+
+ 3. You can call overloaded functions; GDB resolves the function call
+ to the right definition, with some restrictions. GDB does not
+ perform overload resolution involving user-defined type
+ conversions, calls to constructors, or instantiations of templates
+ that do not exist in the program. It also cannot handle ellipsis
+ argument lists or default arguments.
+
+ It does perform integral conversions and promotions, floating-point
+ promotions, arithmetic conversions, pointer conversions,
+ conversions of class objects to base classes, and standard
+ conversions such as those of functions or arrays to pointers; it
+ requires an exact match on the number of function arguments.
+
+ Overload resolution is always performed, unless you have specified
+ `set overload-resolution off'. *Note GDB Features for C++:
+ Debugging C Plus Plus.
+
+ You must specify `set overload-resolution off' in order to use an
+ explicit function signature to call an overloaded function, as in
+ p 'foo(char,int)'('x', 13)
+
+ The GDB command-completion facility can simplify this; see *note
+ Command Completion: Completion.
+
+ 4. GDB understands variables declared as C++ references; you can use
+ them in expressions just as you do in C++ source--they are
+ automatically dereferenced.
+
+ In the parameter list shown when GDB displays a frame, the values
+ of reference variables are not displayed (unlike other variables);
+ this avoids clutter, since references are often used for large
+ structures. The _address_ of a reference variable is always
+ shown, unless you have specified `set print address off'.
+
+ 5. GDB supports the C++ name resolution operator `::'--your
+ expressions can use it just as expressions in your program do.
+ Since one scope may be defined in another, you can use `::'
+ repeatedly if necessary, for example in an expression like
+ `SCOPE1::SCOPE2::NAME'. GDB also allows resolving name scope by
+ reference to source files, in both C and C++ debugging (*note
+ Program Variables: Variables.).
+
+ In addition, when used with HP's C++ compiler, GDB supports calling
+virtual functions correctly, printing out virtual bases of objects,
+calling functions in a base subobject, casting objects, and invoking
+user-defined operators.
+
+
+File: gdb.info, Node: C Defaults, Next: C Checks, Prev: C Plus Plus Expressions, Up: C
+
+15.4.1.4 C and C++ Defaults
+...........................
+
+If you allow GDB to set type and range checking automatically, they
+both default to `off' whenever the working language changes to C or
+C++. This happens regardless of whether you or GDB selects the working
+language.
+
+ If you allow GDB to set the language automatically, it recognizes
+source files whose names end with `.c', `.C', or `.cc', etc, and when
+GDB enters code compiled from one of these files, it sets the working
+language to C or C++. *Note Having GDB Infer the Source Language:
+Automatically, for further details.
+
+
+File: gdb.info, Node: C Checks, Next: Debugging C, Prev: C Defaults, Up: C
+
+15.4.1.5 C and C++ Type and Range Checks
+........................................
+
+By default, when GDB parses C or C++ expressions, type checking is not
+used. However, if you turn type checking on, GDB considers two
+variables type equivalent if:
+
+ * The two variables are structured and have the same structure,
+ union, or enumerated tag.
+
+ * The two variables have the same type name, or types that have been
+ declared equivalent through `typedef'.
+
+
+ Range checking, if turned on, is done on mathematical operations.
+Array indices are not checked, since they are often used to index a
+pointer that is not itself an array.
+
+
+File: gdb.info, Node: Debugging C, Next: Debugging C Plus Plus, Prev: C Checks, Up: C
+
+15.4.1.6 GDB and C
+..................
+
+The `set print union' and `show print union' commands apply to the
+`union' type. When set to `on', any `union' that is inside a `struct'
+or `class' is also printed. Otherwise, it appears as `{...}'.
+
+ The `@' operator aids in the debugging of dynamic arrays, formed
+with pointers and a memory allocation function. *Note Expressions:
+Expressions.
+
+
+File: gdb.info, Node: Debugging C Plus Plus, Next: Decimal Floating Point, Prev: Debugging C, Up: C
+
+15.4.1.7 GDB Features for C++
+.............................
+
+Some GDB commands are particularly useful with C++, and some are
+designed specifically for use with C++. Here is a summary:
+
+`breakpoint menus'
+ When you want a breakpoint in a function whose name is overloaded,
+ GDB has the capability to display a menu of possible breakpoint
+ locations to help you specify which function definition you want.
+ *Note Ambiguous Expressions: Ambiguous Expressions.
+
+`rbreak REGEX'
+ Setting breakpoints using regular expressions is helpful for
+ setting breakpoints on overloaded functions that are not members
+ of any special classes. *Note Setting Breakpoints: Set Breaks.
+
+`catch throw'
+`catch catch'
+ Debug C++ exception handling using these commands. *Note Setting
+ Catchpoints: Set Catchpoints.
+
+`ptype TYPENAME'
+ Print inheritance relationships as well as other information for
+ type TYPENAME. *Note Examining the Symbol Table: Symbols.
+
+`set print demangle'
+`show print demangle'
+`set print asm-demangle'
+`show print asm-demangle'
+ Control whether C++ symbols display in their source form, both when
+ displaying code as C++ source and when displaying disassemblies.
+ *Note Print Settings: Print Settings.
+
+`set print object'
+`show print object'
+ Choose whether to print derived (actual) or declared types of
+ objects. *Note Print Settings: Print Settings.
+
+`set print vtbl'
+`show print vtbl'
+ Control the format for printing virtual function tables. *Note
+ Print Settings: Print Settings. (The `vtbl' commands do not work
+ on programs compiled with the HP ANSI C++ compiler (`aCC').)
+
+`set overload-resolution on'
+ Enable overload resolution for C++ expression evaluation. The
+ default is on. For overloaded functions, GDB evaluates the
+ arguments and searches for a function whose signature matches the
+ argument types, using the standard C++ conversion rules (see *note
+ C++ Expressions: C Plus Plus Expressions, for details). If it
+ cannot find a match, it emits a message.
+
+`set overload-resolution off'
+ Disable overload resolution for C++ expression evaluation. For
+ overloaded functions that are not class member functions, GDB
+ chooses the first function of the specified name that it finds in
+ the symbol table, whether or not its arguments are of the correct
+ type. For overloaded functions that are class member functions,
+ GDB searches for a function whose signature _exactly_ matches the
+ argument types.
+
+`show overload-resolution'
+ Show the current setting of overload resolution.
+
+`Overloaded symbol names'
+ You can specify a particular definition of an overloaded symbol,
+ using the same notation that is used to declare such symbols in
+ C++: type `SYMBOL(TYPES)' rather than just SYMBOL. You can also
+ use the GDB command-line word completion facilities to list the
+ available choices, or to finish the type list for you. *Note
+ Command Completion: Completion, for details on how to do this.
+
+
+File: gdb.info, Node: Decimal Floating Point, Prev: Debugging C Plus Plus, Up: C
+
+15.4.1.8 Decimal Floating Point format
+......................................
+
+GDB can examine, set and perform computations with numbers in decimal
+floating point format, which in the C language correspond to the
+`_Decimal32', `_Decimal64' and `_Decimal128' types as specified by the
+extension to support decimal floating-point arithmetic.
+
+ There are two encodings in use, depending on the architecture: BID
+(Binary Integer Decimal) for x86 and x86-64, and DPD (Densely Packed
+Decimal) for PowerPC. GDB will use the appropriate encoding for the
+configured target.
+
+ Because of a limitation in `libdecnumber', the library used by GDB
+to manipulate decimal floating point numbers, it is not possible to
+convert (using a cast, for example) integers wider than 32-bit to
+decimal float.
+
+ In addition, in order to imitate GDB's behaviour with binary floating
+point computations, error checking in decimal float operations ignores
+underflow, overflow and divide by zero exceptions.
+
+ In the PowerPC architecture, GDB provides a set of pseudo-registers
+to inspect `_Decimal128' values stored in floating point registers.
+See *note PowerPC: PowerPC. for more details.
+
+
+File: gdb.info, Node: D, Next: Objective-C, Prev: C, Up: Supported Languages
+
+15.4.2 D
+--------
+
+GDB can be used to debug programs written in D and compiled with GDC,
+LDC or DMD compilers. Currently GDB supports only one D specific
+feature -- dynamic arrays.
+
+
+File: gdb.info, Node: Objective-C, Next: OpenCL C, Prev: D, Up: Supported Languages
+
+15.4.3 Objective-C
+------------------
+
+This section provides information about some commands and command
+options that are useful for debugging Objective-C code. See also *note
+info classes: Symbols, and *note info selectors: Symbols, for a few
+more commands specific to Objective-C support.
+
+* Menu:
+
+* Method Names in Commands::
+* The Print Command with Objective-C::
+
+
+File: gdb.info, Node: Method Names in Commands, Next: The Print Command with Objective-C, Up: Objective-C
+
+15.4.3.1 Method Names in Commands
+.................................
+
+The following commands have been extended to accept Objective-C method
+names as line specifications:
+
+ * `clear'
+
+ * `break'
+
+ * `info line'
+
+ * `jump'
+
+ * `list'
+
+ A fully qualified Objective-C method name is specified as
+
+ -[CLASS METHODNAME]
+
+ where the minus sign is used to indicate an instance method and a
+plus sign (not shown) is used to indicate a class method. The class
+name CLASS and method name METHODNAME are enclosed in brackets, similar
+to the way messages are specified in Objective-C source code. For
+example, to set a breakpoint at the `create' instance method of class
+`Fruit' in the program currently being debugged, enter:
+
+ break -[Fruit create]
+
+ To list ten program lines around the `initialize' class method,
+enter:
+
+ list +[NSText initialize]
+
+ In the current version of GDB, the plus or minus sign is required.
+In future versions of GDB, the plus or minus sign will be optional, but
+you can use it to narrow the search. It is also possible to specify
+just a method name:
+
+ break create
+
+ You must specify the complete method name, including any colons. If
+your program's source files contain more than one `create' method,
+you'll be presented with a numbered list of classes that implement that
+method. Indicate your choice by number, or type `0' to exit if none
+apply.
+
+ As another example, to clear a breakpoint established at the
+`makeKeyAndOrderFront:' method of the `NSWindow' class, enter:
+
+ clear -[NSWindow makeKeyAndOrderFront:]
+
+
+File: gdb.info, Node: The Print Command with Objective-C, Prev: Method Names in Commands, Up: Objective-C
+
+15.4.3.2 The Print Command With Objective-C
+...........................................
+
+The print command has also been extended to accept methods. For
+example:
+
+ print -[OBJECT hash]
+
+will tell GDB to send the `hash' message to OBJECT and print the
+result. Also, an additional command has been added, `print-object' or
+`po' for short, which is meant to print the description of an object.
+However, this command may only work with certain Objective-C libraries
+that have a particular hook function, `_NSPrintForDebugger', defined.
+
+
+File: gdb.info, Node: OpenCL C, Next: Fortran, Prev: Objective-C, Up: Supported Languages
+
+15.4.4 OpenCL C
+---------------
+
+This section provides information about GDBs OpenCL C support.
+
+* Menu:
+
+* OpenCL C Datatypes::
+* OpenCL C Expressions::
+* OpenCL C Operators::
+
+
+File: gdb.info, Node: OpenCL C Datatypes, Next: OpenCL C Expressions, Up: OpenCL C
+
+15.4.4.1 OpenCL C Datatypes
+...........................
+
+GDB supports the builtin scalar and vector datatypes specified by
+OpenCL 1.1. In addition the half- and double-precision floating point
+data types of the `cl_khr_fp16' and `cl_khr_fp64' OpenCL extensions are
+also known to GDB.
+
+
+File: gdb.info, Node: OpenCL C Expressions, Next: OpenCL C Operators, Prev: OpenCL C Datatypes, Up: OpenCL C
+
+15.4.4.2 OpenCL C Expressions
+.............................
+
+GDB supports accesses to vector components including the access as
+lvalue where possible. Since OpenCL C is based on C99 most C
+expressions supported by GDB can be used as well.
+
+
+File: gdb.info, Node: OpenCL C Operators, Prev: OpenCL C Expressions, Up: OpenCL C
+
+15.4.4.3 OpenCL C Operators
+...........................
+
+GDB supports the operators specified by OpenCL 1.1 for scalar and
+vector data types.
+
+
+File: gdb.info, Node: Fortran, Next: Pascal, Prev: OpenCL C, Up: Supported Languages
+
+15.4.5 Fortran
+--------------
+
+GDB can be used to debug programs written in Fortran, but it currently
+supports only the features of Fortran 77 language.
+
+ Some Fortran compilers (GNU Fortran 77 and Fortran 95 compilers
+among them) append an underscore to the names of variables and
+functions. When you debug programs compiled by those compilers, you
+will need to refer to variables and functions with a trailing
+underscore.
+
+* Menu:
+
+* Fortran Operators:: Fortran operators and expressions
+* Fortran Defaults:: Default settings for Fortran
+* Special Fortran Commands:: Special GDB commands for Fortran
+
+
+File: gdb.info, Node: Fortran Operators, Next: Fortran Defaults, Up: Fortran
+
+15.4.5.1 Fortran Operators and Expressions
+..........................................
+
+Operators must be defined on values of specific types. For instance,
+`+' is defined on numbers, but not on characters or other non-
+arithmetic types. Operators are often defined on groups of types.
+
+`**'
+ The exponentiation operator. It raises the first operand to the
+ power of the second one.
+
+`:'
+ The range operator. Normally used in the form of array(low:high)
+ to represent a section of array.
+
+`%'
+ The access component operator. Normally used to access elements
+ in derived types. Also suitable for unions. As unions aren't
+ part of regular Fortran, this can only happen when accessing a
+ register that uses a gdbarch-defined union type.
+
+
+File: gdb.info, Node: Fortran Defaults, Next: Special Fortran Commands, Prev: Fortran Operators, Up: Fortran
+
+15.4.5.2 Fortran Defaults
+.........................
+
+Fortran symbols are usually case-insensitive, so GDB by default uses
+case-insensitive matches for Fortran symbols. You can change that with
+the `set case-insensitive' command, see *note Symbols::, for the
+details.
+
+
+File: gdb.info, Node: Special Fortran Commands, Prev: Fortran Defaults, Up: Fortran
+
+15.4.5.3 Special Fortran Commands
+.................................
+
+GDB has some commands to support Fortran-specific features, such as
+displaying common blocks.
+
+`info common [COMMON-NAME]'
+ This command prints the values contained in the Fortran `COMMON'
+ block whose name is COMMON-NAME. With no argument, the names of
+ all `COMMON' blocks visible at the current program location are
+ printed.
+
+
+File: gdb.info, Node: Pascal, Next: Modula-2, Prev: Fortran, Up: Supported Languages
+
+15.4.6 Pascal
+-------------
+
+Debugging Pascal programs which use sets, subranges, file variables, or
+nested functions does not currently work. GDB does not support
+entering expressions, printing values, or similar features using Pascal
+syntax.
+
+ The Pascal-specific command `set print pascal_static-members'
+controls whether static members of Pascal objects are displayed. *Note
+pascal_static-members: Print Settings.
+
+
+File: gdb.info, Node: Modula-2, Next: Ada, Prev: Pascal, Up: Supported Languages
+
+15.4.7 Modula-2
+---------------
+
+The extensions made to GDB to support Modula-2 only support output from
+the GNU Modula-2 compiler (which is currently being developed). Other
+Modula-2 compilers are not currently supported, and attempting to debug
+executables produced by them is most likely to give an error as GDB
+reads in the executable's symbol table.
+
+* Menu:
+
+* M2 Operators:: Built-in operators
+* Built-In Func/Proc:: Built-in functions and procedures
+* M2 Constants:: Modula-2 constants
+* M2 Types:: Modula-2 types
+* M2 Defaults:: Default settings for Modula-2
+* Deviations:: Deviations from standard Modula-2
+* M2 Checks:: Modula-2 type and range checks
+* M2 Scope:: The scope operators `::' and `.'
+* GDB/M2:: GDB and Modula-2
+
+
+File: gdb.info, Node: M2 Operators, Next: Built-In Func/Proc, Up: Modula-2
+
+15.4.7.1 Operators
+..................
+
+Operators must be defined on values of specific types. For instance,
+`+' is defined on numbers, but not on structures. Operators are often
+defined on groups of types. For the purposes of Modula-2, the
+following definitions hold:
+
+ * _Integral types_ consist of `INTEGER', `CARDINAL', and their
+ subranges.
+
+ * _Character types_ consist of `CHAR' and its subranges.
+
+ * _Floating-point types_ consist of `REAL'.
+
+ * _Pointer types_ consist of anything declared as `POINTER TO TYPE'.
+
+ * _Scalar types_ consist of all of the above.
+
+ * _Set types_ consist of `SET' and `BITSET' types.
+
+ * _Boolean types_ consist of `BOOLEAN'.
+
+The following operators are supported, and appear in order of
+increasing precedence:
+
+`,'
+ Function argument or array index separator.
+
+`:='
+ Assignment. The value of VAR `:=' VALUE is VALUE.
+
+`<, >'
+ Less than, greater than on integral, floating-point, or enumerated
+ types.
+
+`<=, >='
+ Less than or equal to, greater than or equal to on integral,
+ floating-point and enumerated types, or set inclusion on set
+ types. Same precedence as `<'.
+
+`=, <>, #'
+ Equality and two ways of expressing inequality, valid on scalar
+ types. Same precedence as `<'. In GDB scripts, only `<>' is
+ available for inequality, since `#' conflicts with the script
+ comment character.
+
+`IN'
+ Set membership. Defined on set types and the types of their
+ members. Same precedence as `<'.
+
+`OR'
+ Boolean disjunction. Defined on boolean types.
+
+`AND, &'
+ Boolean conjunction. Defined on boolean types.
+
+`@'
+ The GDB "artificial array" operator (*note Expressions:
+ Expressions.).
+
+`+, -'
+ Addition and subtraction on integral and floating-point types, or
+ union and difference on set types.
+
+`*'
+ Multiplication on integral and floating-point types, or set
+ intersection on set types.
+
+`/'
+ Division on floating-point types, or symmetric set difference on
+ set types. Same precedence as `*'.
+
+`DIV, MOD'
+ Integer division and remainder. Defined on integral types. Same
+ precedence as `*'.
+
+`-'
+ Negative. Defined on `INTEGER' and `REAL' data.
+
+`^'
+ Pointer dereferencing. Defined on pointer types.
+
+`NOT'
+ Boolean negation. Defined on boolean types. Same precedence as
+ `^'.
+
+`.'
+ `RECORD' field selector. Defined on `RECORD' data. Same
+ precedence as `^'.
+
+`[]'
+ Array indexing. Defined on `ARRAY' data. Same precedence as `^'.
+
+`()'
+ Procedure argument list. Defined on `PROCEDURE' objects. Same
+ precedence as `^'.
+
+`::, .'
+ GDB and Modula-2 scope operators.
+
+ _Warning:_ Set expressions and their operations are not yet
+ supported, so GDB treats the use of the operator `IN', or the use
+ of operators `+', `-', `*', `/', `=', , `<>', `#', `<=', and `>='
+ on sets as an error.
+
+
+File: gdb.info, Node: Built-In Func/Proc, Next: M2 Constants, Prev: M2 Operators, Up: Modula-2
+
+15.4.7.2 Built-in Functions and Procedures
+..........................................
+
+Modula-2 also makes available several built-in procedures and functions.
+In describing these, the following metavariables are used:
+
+A
+ represents an `ARRAY' variable.
+
+C
+ represents a `CHAR' constant or variable.
+
+I
+ represents a variable or constant of integral type.
+
+M
+ represents an identifier that belongs to a set. Generally used in
+ the same function with the metavariable S. The type of S should
+ be `SET OF MTYPE' (where MTYPE is the type of M).
+
+N
+ represents a variable or constant of integral or floating-point
+ type.
+
+R
+ represents a variable or constant of floating-point type.
+
+T
+ represents a type.
+
+V
+ represents a variable.
+
+X
+ represents a variable or constant of one of many types. See the
+ explanation of the function for details.
+
+ All Modula-2 built-in procedures also return a result, described
+below.
+
+`ABS(N)'
+ Returns the absolute value of N.
+
+`CAP(C)'
+ If C is a lower case letter, it returns its upper case equivalent,
+ otherwise it returns its argument.
+
+`CHR(I)'
+ Returns the character whose ordinal value is I.
+
+`DEC(V)'
+ Decrements the value in the variable V by one. Returns the new
+ value.
+
+`DEC(V,I)'
+ Decrements the value in the variable V by I. Returns the new
+ value.
+
+`EXCL(M,S)'
+ Removes the element M from the set S. Returns the new set.
+
+`FLOAT(I)'
+ Returns the floating point equivalent of the integer I.
+
+`HIGH(A)'
+ Returns the index of the last member of A.
+
+`INC(V)'
+ Increments the value in the variable V by one. Returns the new
+ value.
+
+`INC(V,I)'
+ Increments the value in the variable V by I. Returns the new
+ value.
+
+`INCL(M,S)'
+ Adds the element M to the set S if it is not already there.
+ Returns the new set.
+
+`MAX(T)'
+ Returns the maximum value of the type T.
+
+`MIN(T)'
+ Returns the minimum value of the type T.
+
+`ODD(I)'
+ Returns boolean TRUE if I is an odd number.
+
+`ORD(X)'
+ Returns the ordinal value of its argument. For example, the
+ ordinal value of a character is its ASCII value (on machines
+ supporting the ASCII character set). X must be of an ordered
+ type, which include integral, character and enumerated types.
+
+`SIZE(X)'
+ Returns the size of its argument. X can be a variable or a type.
+
+`TRUNC(R)'
+ Returns the integral part of R.
+
+`TSIZE(X)'
+ Returns the size of its argument. X can be a variable or a type.
+
+`VAL(T,I)'
+ Returns the member of the type T whose ordinal value is I.
+
+ _Warning:_ Sets and their operations are not yet supported, so
+ GDB treats the use of procedures `INCL' and `EXCL' as an error.
+
+
+File: gdb.info, Node: M2 Constants, Next: M2 Types, Prev: Built-In Func/Proc, Up: Modula-2
+
+15.4.7.3 Constants
+..................
+
+GDB allows you to express the constants of Modula-2 in the following
+ways:
+
+ * Integer constants are simply a sequence of digits. When used in an
+ expression, a constant is interpreted to be type-compatible with
+ the rest of the expression. Hexadecimal integers are specified by
+ a trailing `H', and octal integers by a trailing `B'.
+
+ * Floating point constants appear as a sequence of digits, followed
+ by a decimal point and another sequence of digits. An optional
+ exponent can then be specified, in the form `E[+|-]NNN', where
+ `[+|-]NNN' is the desired exponent. All of the digits of the
+ floating point constant must be valid decimal (base 10) digits.
+
+ * Character constants consist of a single character enclosed by a
+ pair of like quotes, either single (`'') or double (`"'). They may
+ also be expressed by their ordinal value (their ASCII value,
+ usually) followed by a `C'.
+
+ * String constants consist of a sequence of characters enclosed by a
+ pair of like quotes, either single (`'') or double (`"'). Escape
+ sequences in the style of C are also allowed. *Note C and C++
+ Constants: C Constants, for a brief explanation of escape
+ sequences.
+
+ * Enumerated constants consist of an enumerated identifier.
+
+ * Boolean constants consist of the identifiers `TRUE' and `FALSE'.
+
+ * Pointer constants consist of integral values only.
+
+ * Set constants are not yet supported.
+
+
+File: gdb.info, Node: M2 Types, Next: M2 Defaults, Prev: M2 Constants, Up: Modula-2
+
+15.4.7.4 Modula-2 Types
+.......................
+
+Currently GDB can print the following data types in Modula-2 syntax:
+array types, record types, set types, pointer types, procedure types,
+enumerated types, subrange types and base types. You can also print
+the contents of variables declared using these type. This section
+gives a number of simple source code examples together with sample GDB
+sessions.
+
+ The first example contains the following section of code:
+
+ VAR
+ s: SET OF CHAR ;
+ r: [20..40] ;
+
+and you can request GDB to interrogate the type and value of `r' and
+`s'.
+
+ (gdb) print s
+ {'A'..'C', 'Z'}
+ (gdb) ptype s
+ SET OF CHAR
+ (gdb) print r
+ 21
+ (gdb) ptype r
+ [20..40]
+
+Likewise if your source code declares `s' as:
+
+ VAR
+ s: SET ['A'..'Z'] ;
+
+then you may query the type of `s' by:
+
+ (gdb) ptype s
+ type = SET ['A'..'Z']
+
+Note that at present you cannot interactively manipulate set
+expressions using the debugger.
+
+ The following example shows how you might declare an array in
+Modula-2 and how you can interact with GDB to print its type and
+contents:
+
+ VAR
+ s: ARRAY [-10..10] OF CHAR ;
+
+ (gdb) ptype s
+ ARRAY [-10..10] OF CHAR
+
+ Note that the array handling is not yet complete and although the
+type is printed correctly, expression handling still assumes that all
+arrays have a lower bound of zero and not `-10' as in the example above.
+
+ Here are some more type related Modula-2 examples:
+
+ TYPE
+ colour = (blue, red, yellow, green) ;
+ t = [blue..yellow] ;
+ VAR
+ s: t ;
+ BEGIN
+ s := blue ;
+
+The GDB interaction shows how you can query the data type and value of
+a variable.
+
+ (gdb) print s
+ $1 = blue
+ (gdb) ptype t
+ type = [blue..yellow]
+
+In this example a Modula-2 array is declared and its contents
+displayed. Observe that the contents are written in the same way as
+their `C' counterparts.
+
+ VAR
+ s: ARRAY [1..5] OF CARDINAL ;
+ BEGIN
+ s[1] := 1 ;
+
+ (gdb) print s
+ $1 = {1, 0, 0, 0, 0}
+ (gdb) ptype s
+ type = ARRAY [1..5] OF CARDINAL
+
+ The Modula-2 language interface to GDB also understands pointer
+types as shown in this example:
+
+ VAR
+ s: POINTER TO ARRAY [1..5] OF CARDINAL ;
+ BEGIN
+ NEW(s) ;
+ s^[1] := 1 ;
+
+and you can request that GDB describes the type of `s'.
+
+ (gdb) ptype s
+ type = POINTER TO ARRAY [1..5] OF CARDINAL
+
+ GDB handles compound types as we can see in this example. Here we
+combine array types, record types, pointer types and subrange types:
+
+ TYPE
+ foo = RECORD
+ f1: CARDINAL ;
+ f2: CHAR ;
+ f3: myarray ;
+ END ;
+
+ myarray = ARRAY myrange OF CARDINAL ;
+ myrange = [-2..2] ;
+ VAR
+ s: POINTER TO ARRAY myrange OF foo ;
+
+and you can ask GDB to describe the type of `s' as shown below.
+
+ (gdb) ptype s
+ type = POINTER TO ARRAY [-2..2] OF foo = RECORD
+ f1 : CARDINAL;
+ f2 : CHAR;
+ f3 : ARRAY [-2..2] OF CARDINAL;
+ END
+
+
+File: gdb.info, Node: M2 Defaults, Next: Deviations, Prev: M2 Types, Up: Modula-2
+
+15.4.7.5 Modula-2 Defaults
+..........................
+
+If type and range checking are set automatically by GDB, they both
+default to `on' whenever the working language changes to Modula-2.
+This happens regardless of whether you or GDB selected the working
+language.
+
+ If you allow GDB to set the language automatically, then entering
+code compiled from a file whose name ends with `.mod' sets the working
+language to Modula-2. *Note Having GDB Infer the Source Language:
+Automatically, for further details.
+
+
+File: gdb.info, Node: Deviations, Next: M2 Checks, Prev: M2 Defaults, Up: Modula-2
+
+15.4.7.6 Deviations from Standard Modula-2
+..........................................
+
+A few changes have been made to make Modula-2 programs easier to debug.
+This is done primarily via loosening its type strictness:
+
+ * Unlike in standard Modula-2, pointer constants can be formed by
+ integers. This allows you to modify pointer variables during
+ debugging. (In standard Modula-2, the actual address contained in
+ a pointer variable is hidden from you; it can only be modified
+ through direct assignment to another pointer variable or
+ expression that returned a pointer.)
+
+ * C escape sequences can be used in strings and characters to
+ represent non-printable characters. GDB prints out strings with
+ these escape sequences embedded. Single non-printable characters
+ are printed using the `CHR(NNN)' format.
+
+ * The assignment operator (`:=') returns the value of its right-hand
+ argument.
+
+ * All built-in procedures both modify _and_ return their argument.
+
+
+File: gdb.info, Node: M2 Checks, Next: M2 Scope, Prev: Deviations, Up: Modula-2
+
+15.4.7.7 Modula-2 Type and Range Checks
+.......................................
+
+ _Warning:_ in this release, GDB does not yet perform type or range
+ checking.
+
+ GDB considers two Modula-2 variables type equivalent if:
+
+ * They are of types that have been declared equivalent via a `TYPE
+ T1 = T2' statement
+
+ * They have been declared on the same line. (Note: This is true of
+ the GNU Modula-2 compiler, but it may not be true of other
+ compilers.)
+
+ As long as type checking is enabled, any attempt to combine variables
+whose types are not equivalent is an error.
+
+ Range checking is done on all mathematical operations, assignment,
+array index bounds, and all built-in functions and procedures.
+
+
+File: gdb.info, Node: M2 Scope, Next: GDB/M2, Prev: M2 Checks, Up: Modula-2
+
+15.4.7.8 The Scope Operators `::' and `.'
+.........................................
+
+There are a few subtle differences between the Modula-2 scope operator
+(`.') and the GDB scope operator (`::'). The two have similar syntax:
+
+
+ MODULE . ID
+ SCOPE :: ID
+
+where SCOPE is the name of a module or a procedure, MODULE the name of
+a module, and ID is any declared identifier within your program, except
+another module.
+
+ Using the `::' operator makes GDB search the scope specified by
+SCOPE for the identifier ID. If it is not found in the specified
+scope, then GDB searches all scopes enclosing the one specified by
+SCOPE.
+
+ Using the `.' operator makes GDB search the current scope for the
+identifier specified by ID that was imported from the definition module
+specified by MODULE. With this operator, it is an error if the
+identifier ID was not imported from definition module MODULE, or if ID
+is not an identifier in MODULE.
+
+
+File: gdb.info, Node: GDB/M2, Prev: M2 Scope, Up: Modula-2
+
+15.4.7.9 GDB and Modula-2
+.........................
+
+Some GDB commands have little use when debugging Modula-2 programs.
+Five subcommands of `set print' and `show print' apply specifically to
+C and C++: `vtbl', `demangle', `asm-demangle', `object', and `union'.
+The first four apply to C++, and the last to the C `union' type, which
+has no direct analogue in Modula-2.
+
+ The `@' operator (*note Expressions: Expressions.), while available
+with any language, is not useful with Modula-2. Its intent is to aid
+the debugging of "dynamic arrays", which cannot be created in Modula-2
+as they can in C or C++. However, because an address can be specified
+by an integral constant, the construct `{TYPE}ADREXP' is still useful.
+
+ In GDB scripts, the Modula-2 inequality operator `#' is interpreted
+as the beginning of a comment. Use `<>' instead.
+
+
+File: gdb.info, Node: Ada, Prev: Modula-2, Up: Supported Languages
+
+15.4.8 Ada
+----------
+
+The extensions made to GDB for Ada only support output from the GNU Ada
+(GNAT) compiler. Other Ada compilers are not currently supported, and
+attempting to debug executables produced by them is most likely to be
+difficult.
+
+* Menu:
+
+* Ada Mode Intro:: General remarks on the Ada syntax
+ and semantics supported by Ada mode
+ in GDB.
+* Omissions from Ada:: Restrictions on the Ada expression syntax.
+* Additions to Ada:: Extensions of the Ada expression syntax.
+* Stopping Before Main Program:: Debugging the program during elaboration.
+* Ada Tasks:: Listing and setting breakpoints in tasks.
+* Ada Tasks and Core Files:: Tasking Support when Debugging Core Files
+* Ravenscar Profile:: Tasking Support when using the Ravenscar
+ Profile
+* Ada Glitches:: Known peculiarities of Ada mode.
+
+
+File: gdb.info, Node: Ada Mode Intro, Next: Omissions from Ada, Up: Ada
+
+15.4.8.1 Introduction
+.....................
+
+The Ada mode of GDB supports a fairly large subset of Ada expression
+syntax, with some extensions. The philosophy behind the design of this
+subset is
+
+ * That GDB should provide basic literals and access to operations for
+ arithmetic, dereferencing, field selection, indexing, and
+ subprogram calls, leaving more sophisticated computations to
+ subprograms written into the program (which therefore may be
+ called from GDB).
+
+ * That type safety and strict adherence to Ada language restrictions
+ are not particularly important to the GDB user.
+
+ * That brevity is important to the GDB user.
+
+ Thus, for brevity, the debugger acts as if all names declared in
+user-written packages are directly visible, even if they are not visible
+according to Ada rules, thus making it unnecessary to fully qualify most
+names with their packages, regardless of context. Where this causes
+ambiguity, GDB asks the user's intent.
+
+ The debugger will start in Ada mode if it detects an Ada main
+program. As for other languages, it will enter Ada mode when stopped
+in a program that was translated from an Ada source file.
+
+ While in Ada mode, you may use `-' for comments. This is useful
+mostly for documenting command files. The standard GDB comment (`#')
+still works at the beginning of a line in Ada mode, but not in the
+middle (to allow based literals).
+
+ The debugger supports limited overloading. Given a subprogram call
+in which the function symbol has multiple definitions, it will use the
+number of actual parameters and some information about their types to
+attempt to narrow the set of definitions. It also makes very limited
+use of context, preferring procedures to functions in the context of
+the `call' command, and functions to procedures elsewhere.
+
+
+File: gdb.info, Node: Omissions from Ada, Next: Additions to Ada, Prev: Ada Mode Intro, Up: Ada
+
+15.4.8.2 Omissions from Ada
+...........................
+
+Here are the notable omissions from the subset:
+
+ * Only a subset of the attributes are supported:
+
+ - 'First, 'Last, and 'Length on array objects (not on types
+ and subtypes).
+
+ - 'Min and 'Max.
+
+ - 'Pos and 'Val.
+
+ - 'Tag.
+
+ - 'Range on array objects (not subtypes), but only as the right
+ operand of the membership (`in') operator.
+
+ - 'Access, 'Unchecked_Access, and 'Unrestricted_Access (a GNAT
+ extension).
+
+ - 'Address.
+
+ * The names in `Characters.Latin_1' are not available and
+ concatenation is not implemented. Thus, escape characters in
+ strings are not currently available.
+
+ * Equality tests (`=' and `/=') on arrays test for bitwise equality
+ of representations. They will generally work correctly for
+ strings and arrays whose elements have integer or enumeration
+ types. They may not work correctly for arrays whose element types
+ have user-defined equality, for arrays of real values (in
+ particular, IEEE-conformant floating point, because of negative
+ zeroes and NaNs), and for arrays whose elements contain unused
+ bits with indeterminate values.
+
+ * The other component-by-component array operations (`and', `or',
+ `xor', `not', and relational tests other than equality) are not
+ implemented.
+
+ * There is limited support for array and record aggregates. They are
+ permitted only on the right sides of assignments, as in these
+ examples:
+
+ (gdb) set An_Array := (1, 2, 3, 4, 5, 6)
+ (gdb) set An_Array := (1, others => 0)
+ (gdb) set An_Array := (0|4 => 1, 1..3 => 2, 5 => 6)
+ (gdb) set A_2D_Array := ((1, 2, 3), (4, 5, 6), (7, 8, 9))
+ (gdb) set A_Record := (1, "Peter", True);
+ (gdb) set A_Record := (Name => "Peter", Id => 1, Alive => True)
+
+ Changing a discriminant's value by assigning an aggregate has an
+ undefined effect if that discriminant is used within the record.
+ However, you can first modify discriminants by directly assigning
+ to them (which normally would not be allowed in Ada), and then
+ performing an aggregate assignment. For example, given a variable
+ `A_Rec' declared to have a type such as:
+
+ type Rec (Len : Small_Integer := 0) is record
+ Id : Integer;
+ Vals : IntArray (1 .. Len);
+ end record;
+
+ you can assign a value with a different size of `Vals' with two
+ assignments:
+
+ (gdb) set A_Rec.Len := 4
+ (gdb) set A_Rec := (Id => 42, Vals => (1, 2, 3, 4))
+
+ As this example also illustrates, GDB is very loose about the usual
+ rules concerning aggregates. You may leave out some of the
+ components of an array or record aggregate (such as the `Len'
+ component in the assignment to `A_Rec' above); they will retain
+ their original values upon assignment. You may freely use dynamic
+ values as indices in component associations. You may even use
+ overlapping or redundant component associations, although which
+ component values are assigned in such cases is not defined.
+
+ * Calls to dispatching subprograms are not implemented.
+
+ * The overloading algorithm is much more limited (i.e., less
+ selective) than that of real Ada. It makes only limited use of
+ the context in which a subexpression appears to resolve its
+ meaning, and it is much looser in its rules for allowing type
+ matches. As a result, some function calls will be ambiguous, and
+ the user will be asked to choose the proper resolution.
+
+ * The `new' operator is not implemented.
+
+ * Entry calls are not implemented.
+
+ * Aside from printing, arithmetic operations on the native VAX
+ floating-point formats are not supported.
+
+ * It is not possible to slice a packed array.
+
+ * The names `True' and `False', when not part of a qualified name,
+ are interpreted as if implicitly prefixed by `Standard',
+ regardless of context. Should your program redefine these names
+ in a package or procedure (at best a dubious practice), you will
+ have to use fully qualified names to access their new definitions.
+
+
+File: gdb.info, Node: Additions to Ada, Next: Stopping Before Main Program, Prev: Omissions from Ada, Up: Ada
+
+15.4.8.3 Additions to Ada
+.........................
+
+As it does for other languages, GDB makes certain generic extensions to
+Ada (*note Expressions::):
+
+ * If the expression E is a variable residing in memory (typically a
+ local variable or array element) and N is a positive integer, then
+ `E@N' displays the values of E and the N-1 adjacent variables
+ following it in memory as an array. In Ada, this operator is
+ generally not necessary, since its prime use is in displaying
+ parts of an array, and slicing will usually do this in Ada.
+ However, there are occasional uses when debugging programs in
+ which certain debugging information has been optimized away.
+
+ * `B::VAR' means "the variable named VAR that appears in function or
+ file B." When B is a file name, you must typically surround it in
+ single quotes.
+
+ * The expression `{TYPE} ADDR' means "the variable of type TYPE that
+ appears at address ADDR."
+
+ * A name starting with `$' is a convenience variable (*note
+ Convenience Vars::) or a machine register (*note Registers::).
+
+ In addition, GDB provides a few other shortcuts and outright
+additions specific to Ada:
+
+ * The assignment statement is allowed as an expression, returning
+ its right-hand operand as its value. Thus, you may enter
+
+ (gdb) set x := y + 3
+ (gdb) print A(tmp := y + 1)
+
+ * The semicolon is allowed as an "operator," returning as its value
+ the value of its right-hand operand. This allows, for example,
+ complex conditional breaks:
+
+ (gdb) break f
+ (gdb) condition 1 (report(i); k += 1; A(k) > 100)
+
+ * Rather than use catenation and symbolic character names to
+ introduce special characters into strings, one may instead use a
+ special bracket notation, which is also used to print strings. A
+ sequence of characters of the form `["XX"]' within a string or
+ character literal denotes the (single) character whose numeric
+ encoding is XX in hexadecimal. The sequence of characters `["""]'
+ also denotes a single quotation mark in strings. For example,
+ "One line.["0a"]Next line.["0a"]"
+ contains an ASCII newline character (`Ada.Characters.Latin_1.LF')
+ after each period.
+
+ * The subtype used as a prefix for the attributes 'Pos, 'Min, and
+ 'Max is optional (and is ignored in any case). For example, it is
+ valid to write
+
+ (gdb) print 'max(x, y)
+
+ * When printing arrays, GDB uses positional notation when the array
+ has a lower bound of 1, and uses a modified named notation
+ otherwise. For example, a one-dimensional array of three integers
+ with a lower bound of 3 might print as
+
+ (3 => 10, 17, 1)
+
+ That is, in contrast to valid Ada, only the first component has a
+ `=>' clause.
+
+ * You may abbreviate attributes in expressions with any unique,
+ multi-character subsequence of their names (an exact match gets
+ preference). For example, you may use a'len, a'gth, or a'lh in
+ place of a'length.
+
+ * Since Ada is case-insensitive, the debugger normally maps
+ identifiers you type to lower case. The GNAT compiler uses
+ upper-case characters for some of its internal identifiers, which
+ are normally of no interest to users. For the rare occasions when
+ you actually have to look at them, enclose them in angle brackets
+ to avoid the lower-case mapping. For example,
+ (gdb) print <JMPBUF_SAVE>[0]
+
+ * Printing an object of class-wide type or dereferencing an
+ access-to-class-wide value will display all the components of the
+ object's specific type (as indicated by its run-time tag).
+ Likewise, component selection on such a value will operate on the
+ specific type of the object.
+
+
+
+File: gdb.info, Node: Stopping Before Main Program, Next: Ada Tasks, Prev: Additions to Ada, Up: Ada
+
+15.4.8.4 Stopping at the Very Beginning
+.......................................
+
+It is sometimes necessary to debug the program during elaboration, and
+before reaching the main procedure. As defined in the Ada Reference
+Manual, the elaboration code is invoked from a procedure called
+`adainit'. To run your program up to the beginning of elaboration,
+simply use the following two commands: `tbreak adainit' and `run'.
+
+
+File: gdb.info, Node: Ada Tasks, Next: Ada Tasks and Core Files, Prev: Stopping Before Main Program, Up: Ada
+
+15.4.8.5 Extensions for Ada Tasks
+.................................
+
+Support for Ada tasks is analogous to that for threads (*note
+Threads::). GDB provides the following task-related commands:
+
+`info tasks'
+ This command shows a list of current Ada tasks, as in the
+ following example:
+
+ (gdb) info tasks
+ ID TID P-ID Pri State Name
+ 1 8088000 0 15 Child Activation Wait main_task
+ 2 80a4000 1 15 Accept Statement b
+ 3 809a800 1 15 Child Activation Wait a
+ * 4 80ae800 3 15 Runnable c
+
+ In this listing, the asterisk before the last task indicates it to
+ be the task currently being inspected.
+
+ ID
+ Represents GDB's internal task number.
+
+ TID
+ The Ada task ID.
+
+ P-ID
+ The parent's task ID (GDB's internal task number).
+
+ Pri
+ The base priority of the task.
+
+ State
+ Current state of the task.
+
+ `Unactivated'
+ The task has been created but has not been activated.
+ It cannot be executing.
+
+ `Runnable'
+ The task is not blocked for any reason known to Ada.
+ (It may be waiting for a mutex, though.) It is
+ conceptually "executing" in normal mode.
+
+ `Terminated'
+ The task is terminated, in the sense of ARM 9.3 (5).
+ Any dependents that were waiting on terminate
+ alternatives have been awakened and have terminated
+ themselves.
+
+ `Child Activation Wait'
+ The task is waiting for created tasks to complete
+ activation.
+
+ `Accept Statement'
+ The task is waiting on an accept or selective wait
+ statement.
+
+ `Waiting on entry call'
+ The task is waiting on an entry call.
+
+ `Async Select Wait'
+ The task is waiting to start the abortable part of an
+ asynchronous select statement.
+
+ `Delay Sleep'
+ The task is waiting on a select statement with only a
+ delay alternative open.
+
+ `Child Termination Wait'
+ The task is sleeping having completed a master within
+ itself, and is waiting for the tasks dependent on that
+ master to become terminated or waiting on a terminate
+ Phase.
+
+ `Wait Child in Term Alt'
+ The task is sleeping waiting for tasks on terminate
+ alternatives to finish terminating.
+
+ `Accepting RV with TASKNO'
+ The task is accepting a rendez-vous with the task TASKNO.
+
+ Name
+ Name of the task in the program.
+
+
+`info task TASKNO'
+ This command shows detailled informations on the specified task,
+ as in the following example:
+ (gdb) info tasks
+ ID TID P-ID Pri State Name
+ 1 8077880 0 15 Child Activation Wait main_task
+ * 2 807c468 1 15 Runnable task_1
+ (gdb) info task 2
+ Ada Task: 0x807c468
+ Name: task_1
+ Thread: 0x807f378
+ Parent: 1 (main_task)
+ Base Priority: 15
+ State: Runnable
+
+`task'
+ This command prints the ID of the current task.
+
+ (gdb) info tasks
+ ID TID P-ID Pri State Name
+ 1 8077870 0 15 Child Activation Wait main_task
+ * 2 807c458 1 15 Runnable t
+ (gdb) task
+ [Current task is 2]
+
+`task TASKNO'
+ This command is like the `thread THREADNO' command (*note
+ Threads::). It switches the context of debugging from the current
+ task to the given task.
+
+ (gdb) info tasks
+ ID TID P-ID Pri State Name
+ 1 8077870 0 15 Child Activation Wait main_task
+ * 2 807c458 1 15 Runnable t
+ (gdb) task 1
+ [Switching to task 1]
+ #0 0x8067726 in pthread_cond_wait ()
+ (gdb) bt
+ #0 0x8067726 in pthread_cond_wait ()
+ #1 0x8056714 in system.os_interface.pthread_cond_wait ()
+ #2 0x805cb63 in system.task_primitives.operations.sleep ()
+ #3 0x806153e in system.tasking.stages.activate_tasks ()
+ #4 0x804aacc in un () at un.adb:5
+
+`break LINESPEC task TASKNO'
+`break LINESPEC task TASKNO if ...'
+ These commands are like the `break ... thread ...' command (*note
+ Thread Stops::). LINESPEC specifies source lines, as described in
+ *note Specify Location::.
+
+ Use the qualifier `task TASKNO' with a breakpoint command to
+ specify that you only want GDB to stop the program when a
+ particular Ada task reaches this breakpoint. TASKNO is one of the
+ numeric task identifiers assigned by GDB, shown in the first
+ column of the `info tasks' display.
+
+ If you do not specify `task TASKNO' when you set a breakpoint, the
+ breakpoint applies to _all_ tasks of your program.
+
+ You can use the `task' qualifier on conditional breakpoints as
+ well; in this case, place `task TASKNO' before the breakpoint
+ condition (before the `if').
+
+ For example,
+
+ (gdb) info tasks
+ ID TID P-ID Pri State Name
+ 1 140022020 0 15 Child Activation Wait main_task
+ 2 140045060 1 15 Accept/Select Wait t2
+ 3 140044840 1 15 Runnable t1
+ * 4 140056040 1 15 Runnable t3
+ (gdb) b 15 task 2
+ Breakpoint 5 at 0x120044cb0: file test_task_debug.adb, line 15.
+ (gdb) cont
+ Continuing.
+ task # 1 running
+ task # 2 running
+
+ Breakpoint 5, test_task_debug () at test_task_debug.adb:15
+ 15 flush;
+ (gdb) info tasks
+ ID TID P-ID Pri State Name
+ 1 140022020 0 15 Child Activation Wait main_task
+ * 2 140045060 1 15 Runnable t2
+ 3 140044840 1 15 Runnable t1
+ 4 140056040 1 15 Delay Sleep t3
+
+
+File: gdb.info, Node: Ada Tasks and Core Files, Next: Ravenscar Profile, Prev: Ada Tasks, Up: Ada
+
+15.4.8.6 Tasking Support when Debugging Core Files
+..................................................
+
+When inspecting a core file, as opposed to debugging a live program,
+tasking support may be limited or even unavailable, depending on the
+platform being used. For instance, on x86-linux, the list of tasks is
+available, but task switching is not supported. On Tru64, however,
+task switching will work as usual.
+
+ On certain platforms, including Tru64, the debugger needs to perform
+some memory writes in order to provide Ada tasking support. When
+inspecting a core file, this means that the core file must be opened
+with read-write privileges, using the command `"set write on"' (*note
+Patching::). Under these circumstances, you should make a backup copy
+of the core file before inspecting it with GDB.
+
+
+File: gdb.info, Node: Ravenscar Profile, Next: Ada Glitches, Prev: Ada Tasks and Core Files, Up: Ada
+
+15.4.8.7 Tasking Support when using the Ravenscar Profile
+.........................................................
+
+The "Ravenscar Profile" is a subset of the Ada tasking features,
+specifically designed for systems with safety-critical real-time
+requirements.
+
+`set ravenscar task-switching on'
+ Allows task switching when debugging a program that uses the
+ Ravenscar Profile. This is the default.
+
+`set ravenscar task-switching off'
+ Turn off task switching when debugging a program that uses the
+ Ravenscar Profile. This is mostly intended to disable the code
+ that adds support for the Ravenscar Profile, in case a bug in
+ either GDB or in the Ravenscar runtime is preventing GDB from
+ working properly. To be effective, this command should be run
+ before the program is started.
+
+`show ravenscar task-switching'
+ Show whether it is possible to switch from task to task in a
+ program using the Ravenscar Profile.
+
+
+
+File: gdb.info, Node: Ada Glitches, Prev: Ravenscar Profile, Up: Ada
+
+15.4.8.8 Known Peculiarities of Ada Mode
+........................................
+
+Besides the omissions listed previously (*note Omissions from Ada::),
+we know of several problems with and limitations of Ada mode in GDB,
+some of which will be fixed with planned future releases of the debugger
+and the GNU Ada compiler.
+
+ * Static constants that the compiler chooses not to materialize as
+ objects in storage are invisible to the debugger.
+
+ * Named parameter associations in function argument lists are
+ ignored (the argument lists are treated as positional).
+
+ * Many useful library packages are currently invisible to the
+ debugger.
+
+ * Fixed-point arithmetic, conversions, input, and output is carried
+ out using floating-point arithmetic, and may give results that
+ only approximate those on the host machine.
+
+ * The GNAT compiler never generates the prefix `Standard' for any of
+ the standard symbols defined by the Ada language. GDB knows about
+ this: it will strip the prefix from names when you use it, and
+ will never look for a name you have so qualified among local
+ symbols, nor match against symbols in other packages or
+ subprograms. If you have defined entities anywhere in your
+ program other than parameters and local variables whose simple
+ names match names in `Standard', GNAT's lack of qualification here
+ can cause confusion. When this happens, you can usually resolve
+ the confusion by qualifying the problematic names with package
+ `Standard' explicitly.
+
+ Older versions of the compiler sometimes generate erroneous debugging
+information, resulting in the debugger incorrectly printing the value
+of affected entities. In some cases, the debugger is able to work
+around an issue automatically. In other cases, the debugger is able to
+work around the issue, but the work-around has to be specifically
+enabled.
+
+`set ada trust-PAD-over-XVS on'
+ Configure GDB to strictly follow the GNAT encoding when computing
+ the value of Ada entities, particularly when `PAD' and `PAD___XVS'
+ types are involved (see `ada/exp_dbug.ads' in the GCC sources for
+ a complete description of the encoding used by the GNAT compiler).
+ This is the default.
+
+`set ada trust-PAD-over-XVS off'
+ This is related to the encoding using by the GNAT compiler. If
+ GDB sometimes prints the wrong value for certain entities,
+ changing `ada trust-PAD-over-XVS' to `off' activates a work-around
+ which may fix the issue. It is always safe to set `ada
+ trust-PAD-over-XVS' to `off', but this incurs a slight performance
+ penalty, so it is recommended to leave this setting to `on' unless
+ necessary.
+
+
+
+File: gdb.info, Node: Unsupported Languages, Prev: Supported Languages, Up: Languages
+
+15.5 Unsupported Languages
+==========================
+
+In addition to the other fully-supported programming languages, GDB
+also provides a pseudo-language, called `minimal'. It does not
+represent a real programming language, but provides a set of
+capabilities close to what the C or assembly languages provide. This
+should allow most simple operations to be performed while debugging an
+application that uses a language currently not supported by GDB.
+
+ If the language is set to `auto', GDB will automatically select this
+language if the current frame corresponds to an unsupported language.
+
+
+File: gdb.info, Node: Symbols, Next: Altering, Prev: Languages, Up: Top
+
+16 Examining the Symbol Table
+*****************************
+
+The commands described in this chapter allow you to inquire about the
+symbols (names of variables, functions and types) defined in your
+program. This information is inherent in the text of your program and
+does not change as your program executes. GDB finds it in your
+program's symbol table, in the file indicated when you started GDB
+(*note Choosing Files: File Options.), or by one of the file-management
+commands (*note Commands to Specify Files: Files.).
+
+ Occasionally, you may need to refer to symbols that contain unusual
+characters, which GDB ordinarily treats as word delimiters. The most
+frequent case is in referring to static variables in other source files
+(*note Program Variables: Variables.). File names are recorded in
+object files as debugging symbols, but GDB would ordinarily parse a
+typical file name, like `foo.c', as the three words `foo' `.' `c'. To
+allow GDB to recognize `foo.c' as a single symbol, enclose it in single
+quotes; for example,
+
+ p 'foo.c'::x
+
+looks up the value of `x' in the scope of the file `foo.c'.
+
+`set case-sensitive on'
+`set case-sensitive off'
+`set case-sensitive auto'
+ Normally, when GDB looks up symbols, it matches their names with
+ case sensitivity determined by the current source language.
+ Occasionally, you may wish to control that. The command `set
+ case-sensitive' lets you do that by specifying `on' for
+ case-sensitive matches or `off' for case-insensitive ones. If you
+ specify `auto', case sensitivity is reset to the default suitable
+ for the source language. The default is case-sensitive matches
+ for all languages except for Fortran, for which the default is
+ case-insensitive matches.
+
+`show case-sensitive'
+ This command shows the current setting of case sensitivity for
+ symbols lookups.
+
+`info address SYMBOL'
+ Describe where the data for SYMBOL is stored. For a register
+ variable, this says which register it is kept in. For a
+ non-register local variable, this prints the stack-frame offset at
+ which the variable is always stored.
+
+ Note the contrast with `print &SYMBOL', which does not work at all
+ for a register variable, and for a stack local variable prints the
+ exact address of the current instantiation of the variable.
+
+`info symbol ADDR'
+ Print the name of a symbol which is stored at the address ADDR.
+ If no symbol is stored exactly at ADDR, GDB prints the nearest
+ symbol and an offset from it:
+
+ (gdb) info symbol 0x54320
+ _initialize_vx + 396 in section .text
+
+ This is the opposite of the `info address' command. You can use
+ it to find out the name of a variable or a function given its
+ address.
+
+ For dynamically linked executables, the name of executable or
+ shared library containing the symbol is also printed:
+
+ (gdb) info symbol 0x400225
+ _start + 5 in section .text of /tmp/a.out
+ (gdb) info symbol 0x2aaaac2811cf
+ __read_nocancel + 6 in section .text of /usr/lib64/libc.so.6
+
+`whatis [ARG]'
+ Print the data type of ARG, which can be either an expression or a
+ data type. With no argument, print the data type of `$', the last
+ value in the value history. If ARG is an expression, it is not
+ actually evaluated, and any side-effecting operations (such as
+ assignments or function calls) inside it do not take place. If
+ ARG is a type name, it may be the name of a type or typedef, or
+ for C code it may have the form `class CLASS-NAME', `struct
+ STRUCT-TAG', `union UNION-TAG' or `enum ENUM-TAG'. *Note
+ Expressions: Expressions.
+
+`ptype [ARG]'
+ `ptype' accepts the same arguments as `whatis', but prints a
+ detailed description of the type, instead of just the name of the
+ type. *Note Expressions: Expressions.
+
+ For example, for this variable declaration:
+
+ struct complex {double real; double imag;} v;
+
+ the two commands give this output:
+
+ (gdb) whatis v
+ type = struct complex
+ (gdb) ptype v
+ type = struct complex {
+ double real;
+ double imag;
+ }
+
+ As with `whatis', using `ptype' without an argument refers to the
+ type of `$', the last value in the value history.
+
+ Sometimes, programs use opaque data types or incomplete
+ specifications of complex data structure. If the debug
+ information included in the program does not allow GDB to display
+ a full declaration of the data type, it will say `<incomplete
+ type>'. For example, given these declarations:
+
+ struct foo;
+ struct foo *fooptr;
+
+ but no definition for `struct foo' itself, GDB will say:
+
+ (gdb) ptype foo
+ $1 = <incomplete type>
+
+ "Incomplete type" is C terminology for data types that are not
+ completely specified.
+
+`info types REGEXP'
+`info types'
+ Print a brief description of all types whose names match the
+ regular expression REGEXP (or all types in your program, if you
+ supply no argument). Each complete typename is matched as though
+ it were a complete line; thus, `i type value' gives information on
+ all types in your program whose names include the string `value',
+ but `i type ^value$' gives information only on types whose complete
+ name is `value'.
+
+ This command differs from `ptype' in two ways: first, like
+ `whatis', it does not print a detailed description; second, it
+ lists all source files where a type is defined.
+
+`info scope LOCATION'
+ List all the variables local to a particular scope. This command
+ accepts a LOCATION argument--a function name, a source line, or an
+ address preceded by a `*', and prints all the variables local to
+ the scope defined by that location. (*Note Specify Location::, for
+ details about supported forms of LOCATION.) For example:
+
+ (gdb) info scope command_line_handler
+ Scope for command_line_handler:
+ Symbol rl is an argument at stack/frame offset 8, length 4.
+ Symbol linebuffer is in static storage at address 0x150a18, length 4.
+ Symbol linelength is in static storage at address 0x150a1c, length 4.
+ Symbol p is a local variable in register $esi, length 4.
+ Symbol p1 is a local variable in register $ebx, length 4.
+ Symbol nline is a local variable in register $edx, length 4.
+ Symbol repeat is a local variable at frame offset -8, length 4.
+
+ This command is especially useful for determining what data to
+ collect during a "trace experiment", see *note collect: Tracepoint
+ Actions.
+
+`info source'
+ Show information about the current source file--that is, the
+ source file for the function containing the current point of
+ execution:
+ * the name of the source file, and the directory containing it,
+
+ * the directory it was compiled in,
+
+ * its length, in lines,
+
+ * which programming language it is written in,
+
+ * whether the executable includes debugging information for
+ that file, and if so, what format the information is in
+ (e.g., STABS, Dwarf 2, etc.), and
+
+ * whether the debugging information includes information about
+ preprocessor macros.
+
+`info sources'
+ Print the names of all source files in your program for which
+ there is debugging information, organized into two lists: files
+ whose symbols have already been read, and files whose symbols will
+ be read when needed.
+
+`info functions'
+ Print the names and data types of all defined functions.
+
+`info functions REGEXP'
+ Print the names and data types of all defined functions whose
+ names contain a match for regular expression REGEXP. Thus, `info
+ fun step' finds all functions whose names include `step'; `info
+ fun ^step' finds those whose names start with `step'. If a
+ function name contains characters that conflict with the regular
+ expression language (e.g. `operator*()'), they may be quoted with
+ a backslash.
+
+`info variables'
+ Print the names and data types of all variables that are defined
+ outside of functions (i.e. excluding local variables).
+
+`info variables REGEXP'
+ Print the names and data types of all variables (except for local
+ variables) whose names contain a match for regular expression
+ REGEXP.
+
+`info classes'
+`info classes REGEXP'
+ Display all Objective-C classes in your program, or (with the
+ REGEXP argument) all those matching a particular regular
+ expression.
+
+`info selectors'
+`info selectors REGEXP'
+ Display all Objective-C selectors in your program, or (with the
+ REGEXP argument) all those matching a particular regular
+ expression.
+
+ Some systems allow individual object files that make up your
+ program to be replaced without stopping and restarting your
+ program. For example, in VxWorks you can simply recompile a
+ defective object file and keep on running. If you are running on
+ one of these systems, you can allow GDB to reload the symbols for
+ automatically relinked modules:
+
+ `set symbol-reloading on'
+ Replace symbol definitions for the corresponding source file
+ when an object file with a particular name is seen again.
+
+ `set symbol-reloading off'
+ Do not replace symbol definitions when encountering object
+ files of the same name more than once. This is the default
+ state; if you are not running on a system that permits
+ automatic relinking of modules, you should leave
+ `symbol-reloading' off, since otherwise GDB may discard
+ symbols when linking large programs, that may contain several
+ modules (from different directories or libraries) with the
+ same name.
+
+ `show symbol-reloading'
+ Show the current `on' or `off' setting.
+
+`set opaque-type-resolution on'
+ Tell GDB to resolve opaque types. An opaque type is a type
+ declared as a pointer to a `struct', `class', or `union'--for
+ example, `struct MyType *'--that is used in one source file
+ although the full declaration of `struct MyType' is in another
+ source file. The default is on.
+
+ A change in the setting of this subcommand will not take effect
+ until the next time symbols for a file are loaded.
+
+`set opaque-type-resolution off'
+ Tell GDB not to resolve opaque types. In this case, the type is
+ printed as follows:
+ {<no data fields>}
+
+`show opaque-type-resolution'
+ Show whether opaque types are resolved or not.
+
+`set print symbol-loading'
+`set print symbol-loading on'
+`set print symbol-loading off'
+ The `set print symbol-loading' command allows you to enable or
+ disable printing of messages when GDB loads symbols. By default,
+ these messages will be printed, and normally this is what you
+ want. Disabling these messages is useful when debugging
+ applications with lots of shared libraries where the quantity of
+ output can be more annoying than useful.
+
+`show print symbol-loading'
+ Show whether messages will be printed when GDB loads symbols.
+
+`maint print symbols FILENAME'
+`maint print psymbols FILENAME'
+`maint print msymbols FILENAME'
+ Write a dump of debugging symbol data into the file FILENAME.
+ These commands are used to debug the GDB symbol-reading code. Only
+ symbols with debugging data are included. If you use `maint print
+ symbols', GDB includes all the symbols for which it has already
+ collected full details: that is, FILENAME reflects symbols for
+ only those files whose symbols GDB has read. You can use the
+ command `info sources' to find out which files these are. If you
+ use `maint print psymbols' instead, the dump shows information
+ about symbols that GDB only knows partially--that is, symbols
+ defined in files that GDB has skimmed, but not yet read
+ completely. Finally, `maint print msymbols' dumps just the
+ minimal symbol information required for each object file from
+ which GDB has read some symbols. *Note Commands to Specify Files:
+ Files, for a discussion of how GDB reads symbols (in the
+ description of `symbol-file').
+
+`maint info symtabs [ REGEXP ]'
+`maint info psymtabs [ REGEXP ]'
+ List the `struct symtab' or `struct partial_symtab' structures
+ whose names match REGEXP. If REGEXP is not given, list them all.
+ The output includes expressions which you can copy into a GDB
+ debugging this one to examine a particular structure in more
+ detail. For example:
+
+ (gdb) maint info psymtabs dwarf2read
+ { objfile /home/gnu/build/gdb/gdb
+ ((struct objfile *) 0x82e69d0)
+ { psymtab /home/gnu/src/gdb/dwarf2read.c
+ ((struct partial_symtab *) 0x8474b10)
+ readin no
+ fullname (null)
+ text addresses 0x814d3c8 -- 0x8158074
+ globals (* (struct partial_symbol **) 0x8507a08 @ 9)
+ statics (* (struct partial_symbol **) 0x40e95b78 @ 2882)
+ dependencies (none)
+ }
+ }
+ (gdb) maint info symtabs
+ (gdb)
+ We see that there is one partial symbol table whose filename
+ contains the string `dwarf2read', belonging to the `gdb'
+ executable; and we see that GDB has not read in any symtabs yet at
+ all. If we set a breakpoint on a function, that will cause GDB to
+ read the symtab for the compilation unit containing that function:
+
+ (gdb) break dwarf2_psymtab_to_symtab
+ Breakpoint 1 at 0x814e5da: file /home/gnu/src/gdb/dwarf2read.c,
+ line 1574.
+ (gdb) maint info symtabs
+ { objfile /home/gnu/build/gdb/gdb
+ ((struct objfile *) 0x82e69d0)
+ { symtab /home/gnu/src/gdb/dwarf2read.c
+ ((struct symtab *) 0x86c1f38)
+ dirname (null)
+ fullname (null)
+ blockvector ((struct blockvector *) 0x86c1bd0) (primary)
+ linetable ((struct linetable *) 0x8370fa0)
+ debugformat DWARF 2
+ }
+ }
+ (gdb)
+
+
+File: gdb.info, Node: Altering, Next: GDB Files, Prev: Symbols, Up: Top
+
+17 Altering Execution
+*********************
+
+Once you think you have found an error in your program, you might want
+to find out for certain whether correcting the apparent error would
+lead to correct results in the rest of the run. You can find the
+answer by experiment, using the GDB features for altering execution of
+the program.
+
+ For example, you can store new values into variables or memory
+locations, give your program a signal, restart it at a different
+address, or even return prematurely from a function.
+
+* Menu:
+
+* Assignment:: Assignment to variables
+* Jumping:: Continuing at a different address
+* Signaling:: Giving your program a signal
+* Returning:: Returning from a function
+* Calling:: Calling your program's functions
+* Patching:: Patching your program
+
+
+File: gdb.info, Node: Assignment, Next: Jumping, Up: Altering
+
+17.1 Assignment to Variables
+============================
+
+To alter the value of a variable, evaluate an assignment expression.
+*Note Expressions: Expressions. For example,
+
+ print x=4
+
+stores the value 4 into the variable `x', and then prints the value of
+the assignment expression (which is 4). *Note Using GDB with Different
+Languages: Languages, for more information on operators in supported
+languages.
+
+ If you are not interested in seeing the value of the assignment, use
+the `set' command instead of the `print' command. `set' is really the
+same as `print' except that the expression's value is not printed and
+is not put in the value history (*note Value History: Value History.).
+The expression is evaluated only for its effects.
+
+ If the beginning of the argument string of the `set' command appears
+identical to a `set' subcommand, use the `set variable' command instead
+of just `set'. This command is identical to `set' except for its lack
+of subcommands. For example, if your program has a variable `width',
+you get an error if you try to set a new value with just `set
+width=13', because GDB has the command `set width':
+
+ (gdb) whatis width
+ type = double
+ (gdb) p width
+ $4 = 13
+ (gdb) set width=47
+ Invalid syntax in expression.
+
+The invalid expression, of course, is `=47'. In order to actually set
+the program's variable `width', use
+
+ (gdb) set var width=47
+
+ Because the `set' command has many subcommands that can conflict
+with the names of program variables, it is a good idea to use the `set
+variable' command instead of just `set'. For example, if your program
+has a variable `g', you run into problems if you try to set a new value
+with just `set g=4', because GDB has the command `set gnutarget',
+abbreviated `set g':
+
+ (gdb) whatis g
+ type = double
+ (gdb) p g
+ $1 = 1
+ (gdb) set g=4
+ (gdb) p g
+ $2 = 1
+ (gdb) r
+ The program being debugged has been started already.
+ Start it from the beginning? (y or n) y
+ Starting program: /home/smith/cc_progs/a.out
+ "/home/smith/cc_progs/a.out": can't open to read symbols:
+ Invalid bfd target.
+ (gdb) show g
+ The current BFD target is "=4".
+
+The program variable `g' did not change, and you silently set the
+`gnutarget' to an invalid value. In order to set the variable `g', use
+
+ (gdb) set var g=4
+
+ GDB allows more implicit conversions in assignments than C; you can
+freely store an integer value into a pointer variable or vice versa,
+and you can convert any structure to any other structure that is the
+same length or shorter.
+
+ To store values into arbitrary places in memory, use the `{...}'
+construct to generate a value of specified type at a specified address
+(*note Expressions: Expressions.). For example, `{int}0x83040' refers
+to memory location `0x83040' as an integer (which implies a certain size
+and representation in memory), and
+
+ set {int}0x83040 = 4
+
+stores the value 4 into that memory location.
+
+
+File: gdb.info, Node: Jumping, Next: Signaling, Prev: Assignment, Up: Altering
+
+17.2 Continuing at a Different Address
+======================================
+
+Ordinarily, when you continue your program, you do so at the place where
+it stopped, with the `continue' command. You can instead continue at
+an address of your own choosing, with the following commands:
+
+`jump LINESPEC'
+`jump LOCATION'
+ Resume execution at line LINESPEC or at address given by LOCATION.
+ Execution stops again immediately if there is a breakpoint there.
+ *Note Specify Location::, for a description of the different forms
+ of LINESPEC and LOCATION. It is common practice to use the
+ `tbreak' command in conjunction with `jump'. *Note Setting
+ Breakpoints: Set Breaks.
+
+ The `jump' command does not change the current stack frame, or the
+ stack pointer, or the contents of any memory location or any
+ register other than the program counter. If line LINESPEC is in a
+ different function from the one currently executing, the results
+ may be bizarre if the two functions expect different patterns of
+ arguments or of local variables. For this reason, the `jump'
+ command requests confirmation if the specified line is not in the
+ function currently executing. However, even bizarre results are
+ predictable if you are well acquainted with the machine-language
+ code of your program.
+
+ On many systems, you can get much the same effect as the `jump'
+command by storing a new value into the register `$pc'. The difference
+is that this does not start your program running; it only changes the
+address of where it _will_ run when you continue. For example,
+
+ set $pc = 0x485
+
+makes the next `continue' command or stepping command execute at
+address `0x485', rather than at the address where your program stopped.
+*Note Continuing and Stepping: Continuing and Stepping.
+
+ The most common occasion to use the `jump' command is to back
+up--perhaps with more breakpoints set--over a portion of a program that
+has already executed, in order to examine its execution in more detail.
+
+
+File: gdb.info, Node: Signaling, Next: Returning, Prev: Jumping, Up: Altering
+
+17.3 Giving your Program a Signal
+=================================
+
+`signal SIGNAL'
+ Resume execution where your program stopped, but immediately give
+ it the signal SIGNAL. SIGNAL can be the name or the number of a
+ signal. For example, on many systems `signal 2' and `signal
+ SIGINT' are both ways of sending an interrupt signal.
+
+ Alternatively, if SIGNAL is zero, continue execution without
+ giving a signal. This is useful when your program stopped on
+ account of a signal and would ordinary see the signal when resumed
+ with the `continue' command; `signal 0' causes it to resume
+ without a signal.
+
+ `signal' does not repeat when you press <RET> a second time after
+ executing the command.
+
+ Invoking the `signal' command is not the same as invoking the `kill'
+utility from the shell. Sending a signal with `kill' causes GDB to
+decide what to do with the signal depending on the signal handling
+tables (*note Signals::). The `signal' command passes the signal
+directly to your program.
+
+
+File: gdb.info, Node: Returning, Next: Calling, Prev: Signaling, Up: Altering
+
+17.4 Returning from a Function
+==============================
+
+`return'
+`return EXPRESSION'
+ You can cancel execution of a function call with the `return'
+ command. If you give an EXPRESSION argument, its value is used as
+ the function's return value.
+
+ When you use `return', GDB discards the selected stack frame (and
+all frames within it). You can think of this as making the discarded
+frame return prematurely. If you wish to specify a value to be
+returned, give that value as the argument to `return'.
+
+ This pops the selected stack frame (*note Selecting a Frame:
+Selection.), and any other frames inside of it, leaving its caller as
+the innermost remaining frame. That frame becomes selected. The
+specified value is stored in the registers used for returning values of
+functions.
+
+ The `return' command does not resume execution; it leaves the
+program stopped in the state that would exist if the function had just
+returned. In contrast, the `finish' command (*note Continuing and
+Stepping: Continuing and Stepping.) resumes execution until the
+selected stack frame returns naturally.
+
+ GDB needs to know how the EXPRESSION argument should be set for the
+inferior. The concrete registers assignment depends on the OS ABI and
+the type being returned by the selected stack frame. For example it is
+common for OS ABI to return floating point values in FPU registers
+while integer values in CPU registers. Still some ABIs return even
+floating point values in CPU registers. Larger integer widths (such as
+`long long int') also have specific placement rules. GDB already knows
+the OS ABI from its current target so it needs to find out also the
+type being returned to make the assignment into the right register(s).
+
+ Normally, the selected stack frame has debug info. GDB will always
+use the debug info instead of the implicit type of EXPRESSION when the
+debug info is available. For example, if you type `return -1', and the
+function in the current stack frame is declared to return a `long long
+int', GDB transparently converts the implicit `int' value of -1 into a
+`long long int':
+
+ Breakpoint 1, func () at gdb.base/return-nodebug.c:29
+ 29 return 31;
+ (gdb) return -1
+ Make func return now? (y or n) y
+ #0 0x004004f6 in main () at gdb.base/return-nodebug.c:43
+ 43 printf ("result=%lld\n", func ());
+ (gdb)
+
+ However, if the selected stack frame does not have a debug info,
+e.g., if the function was compiled without debug info, GDB has to find
+out the type to return from user. Specifying a different type by
+mistake may set the value in different inferior registers than the
+caller code expects. For example, typing `return -1' with its implicit
+type `int' would set only a part of a `long long int' result for a
+debug info less function (on 32-bit architectures). Therefore the user
+is required to specify the return type by an appropriate cast
+explicitly:
+
+ Breakpoint 2, 0x0040050b in func ()
+ (gdb) return -1
+ Return value type not available for selected stack frame.
+ Please use an explicit cast of the value to return.
+ (gdb) return (long long int) -1
+ Make selected stack frame return now? (y or n) y
+ #0 0x00400526 in main ()
+ (gdb)
+
+
+File: gdb.info, Node: Calling, Next: Patching, Prev: Returning, Up: Altering
+
+17.5 Calling Program Functions
+==============================
+
+`print EXPR'
+ Evaluate the expression EXPR and display the resulting value.
+ EXPR may include calls to functions in the program being debugged.
+
+`call EXPR'
+ Evaluate the expression EXPR without displaying `void' returned
+ values.
+
+ You can use this variant of the `print' command if you want to
+ execute a function from your program that does not return anything
+ (a.k.a. "a void function"), but without cluttering the output with
+ `void' returned values that GDB will otherwise print. If the
+ result is not void, it is printed and saved in the value history.
+
+ It is possible for the function you call via the `print' or `call'
+command to generate a signal (e.g., if there's a bug in the function,
+or if you passed it incorrect arguments). What happens in that case is
+controlled by the `set unwindonsignal' command.
+
+ Similarly, with a C++ program it is possible for the function you
+call via the `print' or `call' command to generate an exception that is
+not handled due to the constraints of the dummy frame. In this case,
+any exception that is raised in the frame, but has an out-of-frame
+exception handler will not be found. GDB builds a dummy-frame for the
+inferior function call, and the unwinder cannot seek for exception
+handlers outside of this dummy-frame. What happens in that case is
+controlled by the `set unwind-on-terminating-exception' command.
+
+`set unwindonsignal'
+ Set unwinding of the stack if a signal is received while in a
+ function that GDB called in the program being debugged. If set to
+ on, GDB unwinds the stack it created for the call and restores the
+ context to what it was before the call. If set to off (the
+ default), GDB stops in the frame where the signal was received.
+
+`show unwindonsignal'
+ Show the current setting of stack unwinding in the functions
+ called by GDB.
+
+`set unwind-on-terminating-exception'
+ Set unwinding of the stack if a C++ exception is raised, but left
+ unhandled while in a function that GDB called in the program being
+ debugged. If set to on (the default), GDB unwinds the stack it
+ created for the call and restores the context to what it was before
+ the call. If set to off, GDB the exception is delivered to the
+ default C++ exception handler and the inferior terminated.
+
+`show unwind-on-terminating-exception'
+ Show the current setting of stack unwinding in the functions
+ called by GDB.
+
+
+ Sometimes, a function you wish to call is actually a "weak alias"
+for another function. In such case, GDB might not pick up the type
+information, including the types of the function arguments, which
+causes GDB to call the inferior function incorrectly. As a result, the
+called function will function erroneously and may even crash. A
+solution to that is to use the name of the aliased function instead.
+
+
+File: gdb.info, Node: Patching, Prev: Calling, Up: Altering
+
+17.6 Patching Programs
+======================
+
+By default, GDB opens the file containing your program's executable
+code (or the corefile) read-only. This prevents accidental alterations
+to machine code; but it also prevents you from intentionally patching
+your program's binary.
+
+ If you'd like to be able to patch the binary, you can specify that
+explicitly with the `set write' command. For example, you might want
+to turn on internal debugging flags, or even to make emergency repairs.
+
+`set write on'
+`set write off'
+ If you specify `set write on', GDB opens executable and core files
+ for both reading and writing; if you specify `set write off' (the
+ default), GDB opens them read-only.
+
+ If you have already loaded a file, you must load it again (using
+ the `exec-file' or `core-file' command) after changing `set
+ write', for your new setting to take effect.
+
+`show write'
+ Display whether executable files and core files are opened for
+ writing as well as reading.
+
+
+File: gdb.info, Node: GDB Files, Next: Targets, Prev: Altering, Up: Top
+
+18 GDB Files
+************
+
+GDB needs to know the file name of the program to be debugged, both in
+order to read its symbol table and in order to start your program. To
+debug a core dump of a previous run, you must also tell GDB the name of
+the core dump file.
+
+* Menu:
+
+* Files:: Commands to specify files
+* Separate Debug Files:: Debugging information in separate files
+* Index Files:: Index files speed up GDB
+* Symbol Errors:: Errors reading symbol files
+* Data Files:: GDB data files
+
+
+File: gdb.info, Node: Files, Next: Separate Debug Files, Up: GDB Files
+
+18.1 Commands to Specify Files
+==============================
+
+You may want to specify executable and core dump file names. The usual
+way to do this is at start-up time, using the arguments to GDB's
+start-up commands (*note Getting In and Out of GDB: Invocation.).
+
+ Occasionally it is necessary to change to a different file during a
+GDB session. Or you may run GDB and forget to specify a file you want
+to use. Or you are debugging a remote target via `gdbserver' (*note
+file: Server.). In these situations the GDB commands to specify new
+files are useful.
+
+`file FILENAME'
+ Use FILENAME as the program to be debugged. It is read for its
+ symbols and for the contents of pure memory. It is also the
+ program executed when you use the `run' command. If you do not
+ specify a directory and the file is not found in the GDB working
+ directory, GDB uses the environment variable `PATH' as a list of
+ directories to search, just as the shell does when looking for a
+ program to run. You can change the value of this variable, for
+ both GDB and your program, using the `path' command.
+
+ You can load unlinked object `.o' files into GDB using the `file'
+ command. You will not be able to "run" an object file, but you
+ can disassemble functions and inspect variables. Also, if the
+ underlying BFD functionality supports it, you could use `gdb
+ -write' to patch object files using this technique. Note that GDB
+ can neither interpret nor modify relocations in this case, so
+ branches and some initialized variables will appear to go to the
+ wrong place. But this feature is still handy from time to time.
+
+`file'
+ `file' with no argument makes GDB discard any information it has
+ on both executable file and the symbol table.
+
+`exec-file [ FILENAME ]'
+ Specify that the program to be run (but not the symbol table) is
+ found in FILENAME. GDB searches the environment variable `PATH'
+ if necessary to locate your program. Omitting FILENAME means to
+ discard information on the executable file.
+
+`symbol-file [ FILENAME ]'
+ Read symbol table information from file FILENAME. `PATH' is
+ searched when necessary. Use the `file' command to get both symbol
+ table and program to run from the same file.
+
+ `symbol-file' with no argument clears out GDB information on your
+ program's symbol table.
+
+ The `symbol-file' command causes GDB to forget the contents of
+ some breakpoints and auto-display expressions. This is because
+ they may contain pointers to the internal data recording symbols
+ and data types, which are part of the old symbol table data being
+ discarded inside GDB.
+
+ `symbol-file' does not repeat if you press <RET> again after
+ executing it once.
+
+ When GDB is configured for a particular environment, it
+ understands debugging information in whatever format is the
+ standard generated for that environment; you may use either a GNU
+ compiler, or other compilers that adhere to the local conventions.
+ Best results are usually obtained from GNU compilers; for example,
+ using `GCC' you can generate debugging information for optimized
+ code.
+
+ For most kinds of object files, with the exception of old SVR3
+ systems using COFF, the `symbol-file' command does not normally
+ read the symbol table in full right away. Instead, it scans the
+ symbol table quickly to find which source files and which symbols
+ are present. The details are read later, one source file at a
+ time, as they are needed.
+
+ The purpose of this two-stage reading strategy is to make GDB
+ start up faster. For the most part, it is invisible except for
+ occasional pauses while the symbol table details for a particular
+ source file are being read. (The `set verbose' command can turn
+ these pauses into messages if desired. *Note Optional Warnings
+ and Messages: Messages/Warnings.)
+
+ We have not implemented the two-stage strategy for COFF yet. When
+ the symbol table is stored in COFF format, `symbol-file' reads the
+ symbol table data in full right away. Note that "stabs-in-COFF"
+ still does the two-stage strategy, since the debug info is actually
+ in stabs format.
+
+`symbol-file [ -readnow ] FILENAME'
+`file [ -readnow ] FILENAME'
+ You can override the GDB two-stage strategy for reading symbol
+ tables by using the `-readnow' option with any of the commands that
+ load symbol table information, if you want to be sure GDB has the
+ entire symbol table available.
+
+`core-file [FILENAME]'
+`core'
+ Specify the whereabouts of a core dump file to be used as the
+ "contents of memory". Traditionally, core files contain only some
+ parts of the address space of the process that generated them; GDB
+ can access the executable file itself for other parts.
+
+ `core-file' with no argument specifies that no core file is to be
+ used.
+
+ Note that the core file is ignored when your program is actually
+ running under GDB. So, if you have been running your program and
+ you wish to debug a core file instead, you must kill the
+ subprocess in which the program is running. To do this, use the
+ `kill' command (*note Killing the Child Process: Kill Process.).
+
+`add-symbol-file FILENAME ADDRESS'
+`add-symbol-file FILENAME ADDRESS [ -readnow ]'
+`add-symbol-file FILENAME -sSECTION ADDRESS ...'
+ The `add-symbol-file' command reads additional symbol table
+ information from the file FILENAME. You would use this command
+ when FILENAME has been dynamically loaded (by some other means)
+ into the program that is running. ADDRESS should be the memory
+ address at which the file has been loaded; GDB cannot figure this
+ out for itself. You can additionally specify an arbitrary number
+ of `-sSECTION ADDRESS' pairs, to give an explicit section name and
+ base address for that section. You can specify any ADDRESS as an
+ expression.
+
+ The symbol table of the file FILENAME is added to the symbol table
+ originally read with the `symbol-file' command. You can use the
+ `add-symbol-file' command any number of times; the new symbol data
+ thus read keeps adding to the old. To discard all old symbol data
+ instead, use the `symbol-file' command without any arguments.
+
+ Although FILENAME is typically a shared library file, an
+ executable file, or some other object file which has been fully
+ relocated for loading into a process, you can also load symbolic
+ information from relocatable `.o' files, as long as:
+
+ * the file's symbolic information refers only to linker symbols
+ defined in that file, not to symbols defined by other object
+ files,
+
+ * every section the file's symbolic information refers to has
+ actually been loaded into the inferior, as it appears in the
+ file, and
+
+ * you can determine the address at which every section was
+ loaded, and provide these to the `add-symbol-file' command.
+
+ Some embedded operating systems, like Sun Chorus and VxWorks, can
+ load relocatable files into an already running program; such
+ systems typically make the requirements above easy to meet.
+ However, it's important to recognize that many native systems use
+ complex link procedures (`.linkonce' section factoring and C++
+ constructor table assembly, for example) that make the
+ requirements difficult to meet. In general, one cannot assume
+ that using `add-symbol-file' to read a relocatable object file's
+ symbolic information will have the same effect as linking the
+ relocatable object file into the program in the normal way.
+
+ `add-symbol-file' does not repeat if you press <RET> after using
+ it.
+
+`add-symbol-file-from-memory ADDRESS'
+ Load symbols from the given ADDRESS in a dynamically loaded object
+ file whose image is mapped directly into the inferior's memory.
+ For example, the Linux kernel maps a `syscall DSO' into each
+ process's address space; this DSO provides kernel-specific code for
+ some system calls. The argument can be any expression whose
+ evaluation yields the address of the file's shared object file
+ header. For this command to work, you must have used
+ `symbol-file' or `exec-file' commands in advance.
+
+`add-shared-symbol-files LIBRARY-FILE'
+`assf LIBRARY-FILE'
+ The `add-shared-symbol-files' command can currently be used only
+ in the Cygwin build of GDB on MS-Windows OS, where it is an alias
+ for the `dll-symbols' command (*note Cygwin Native::). GDB
+ automatically looks for shared libraries, however if GDB does not
+ find yours, you can invoke `add-shared-symbol-files'. It takes
+ one argument: the shared library's file name. `assf' is a
+ shorthand alias for `add-shared-symbol-files'.
+
+`section SECTION ADDR'
+ The `section' command changes the base address of the named
+ SECTION of the exec file to ADDR. This can be used if the exec
+ file does not contain section addresses, (such as in the `a.out'
+ format), or when the addresses specified in the file itself are
+ wrong. Each section must be changed separately. The `info files'
+ command, described below, lists all the sections and their
+ addresses.
+
+`info files'
+`info target'
+ `info files' and `info target' are synonymous; both print the
+ current target (*note Specifying a Debugging Target: Targets.),
+ including the names of the executable and core dump files
+ currently in use by GDB, and the files from which symbols were
+ loaded. The command `help target' lists all possible targets
+ rather than current ones.
+
+`maint info sections'
+ Another command that can give you extra information about program
+ sections is `maint info sections'. In addition to the section
+ information displayed by `info files', this command displays the
+ flags and file offset of each section in the executable and core
+ dump files. In addition, `maint info sections' provides the
+ following command options (which may be arbitrarily combined):
+
+ `ALLOBJ'
+ Display sections for all loaded object files, including
+ shared libraries.
+
+ `SECTIONS'
+ Display info only for named SECTIONS.
+
+ `SECTION-FLAGS'
+ Display info only for sections for which SECTION-FLAGS are
+ true. The section flags that GDB currently knows about are:
+ `ALLOC'
+ Section will have space allocated in the process when
+ loaded. Set for all sections except those containing
+ debug information.
+
+ `LOAD'
+ Section will be loaded from the file into the child
+ process memory. Set for pre-initialized code and data,
+ clear for `.bss' sections.
+
+ `RELOC'
+ Section needs to be relocated before loading.
+
+ `READONLY'
+ Section cannot be modified by the child process.
+
+ `CODE'
+ Section contains executable code only.
+
+ `DATA'
+ Section contains data only (no executable code).
+
+ `ROM'
+ Section will reside in ROM.
+
+ `CONSTRUCTOR'
+ Section contains data for constructor/destructor lists.
+
+ `HAS_CONTENTS'
+ Section is not empty.
+
+ `NEVER_LOAD'
+ An instruction to the linker to not output the section.
+
+ `COFF_SHARED_LIBRARY'
+ A notification to the linker that the section contains
+ COFF shared library information.
+
+ `IS_COMMON'
+ Section contains common symbols.
+
+`set trust-readonly-sections on'
+ Tell GDB that readonly sections in your object file really are
+ read-only (i.e. that their contents will not change). In that
+ case, GDB can fetch values from these sections out of the object
+ file, rather than from the target program. For some targets
+ (notably embedded ones), this can be a significant enhancement to
+ debugging performance.
+
+ The default is off.
+
+`set trust-readonly-sections off'
+ Tell GDB not to trust readonly sections. This means that the
+ contents of the section might change while the program is running,
+ and must therefore be fetched from the target when needed.
+
+`show trust-readonly-sections'
+ Show the current setting of trusting readonly sections.
+
+ All file-specifying commands allow both absolute and relative file
+names as arguments. GDB always converts the file name to an absolute
+file name and remembers it that way.
+
+ GDB supports GNU/Linux, MS-Windows, HP-UX, SunOS, SVr4, Irix, and
+IBM RS/6000 AIX shared libraries.
+
+ On MS-Windows GDB must be linked with the Expat library to support
+shared libraries. *Note Expat::.
+
+ GDB automatically loads symbol definitions from shared libraries
+when you use the `run' command, or when you examine a core file.
+(Before you issue the `run' command, GDB does not understand references
+to a function in a shared library, however--unless you are debugging a
+core file).
+
+ On HP-UX, if the program loads a library explicitly, GDB
+automatically loads the symbols at the time of the `shl_load' call.
+
+ There are times, however, when you may wish to not automatically load
+symbol definitions from shared libraries, such as when they are
+particularly large or there are many of them.
+
+ To control the automatic loading of shared library symbols, use the
+commands:
+
+`set auto-solib-add MODE'
+ If MODE is `on', symbols from all shared object libraries will be
+ loaded automatically when the inferior begins execution, you
+ attach to an independently started inferior, or when the dynamic
+ linker informs GDB that a new library has been loaded. If MODE is
+ `off', symbols must be loaded manually, using the `sharedlibrary'
+ command. The default value is `on'.
+
+ If your program uses lots of shared libraries with debug info that
+ takes large amounts of memory, you can decrease the GDB memory
+ footprint by preventing it from automatically loading the symbols
+ from shared libraries. To that end, type `set auto-solib-add off'
+ before running the inferior, then load each library whose debug
+ symbols you do need with `sharedlibrary REGEXP', where REGEXP is a
+ regular expression that matches the libraries whose symbols you
+ want to be loaded.
+
+`show auto-solib-add'
+ Display the current autoloading mode.
+
+ To explicitly load shared library symbols, use the `sharedlibrary'
+command:
+
+`info share REGEX'
+`info sharedlibrary REGEX'
+ Print the names of the shared libraries which are currently loaded
+ that match REGEX. If REGEX is omitted then print all shared
+ libraries that are loaded.
+
+`sharedlibrary REGEX'
+`share REGEX'
+ Load shared object library symbols for files matching a Unix
+ regular expression. As with files loaded automatically, it only
+ loads shared libraries required by your program for a core file or
+ after typing `run'. If REGEX is omitted all shared libraries
+ required by your program are loaded.
+
+`nosharedlibrary'
+ Unload all shared object library symbols. This discards all
+ symbols that have been loaded from all shared libraries. Symbols
+ from shared libraries that were loaded by explicit user requests
+ are not discarded.
+
+ Sometimes you may wish that GDB stops and gives you control when any
+of shared library events happen. Use the `set stop-on-solib-events'
+command for this:
+
+`set stop-on-solib-events'
+ This command controls whether GDB should give you control when the
+ dynamic linker notifies it about some shared library event. The
+ most common event of interest is loading or unloading of a new
+ shared library.
+
+`show stop-on-solib-events'
+ Show whether GDB stops and gives you control when shared library
+ events happen.
+
+ Shared libraries are also supported in many cross or remote debugging
+configurations. GDB needs to have access to the target's libraries;
+this can be accomplished either by providing copies of the libraries on
+the host system, or by asking GDB to automatically retrieve the
+libraries from the target. If copies of the target libraries are
+provided, they need to be the same as the target libraries, although the
+copies on the target can be stripped as long as the copies on the host
+are not.
+
+ For remote debugging, you need to tell GDB where the target
+libraries are, so that it can load the correct copies--otherwise, it
+may try to load the host's libraries. GDB has two variables to specify
+the search directories for target libraries.
+
+`set sysroot PATH'
+ Use PATH as the system root for the program being debugged. Any
+ absolute shared library paths will be prefixed with PATH; many
+ runtime loaders store the absolute paths to the shared library in
+ the target program's memory. If you use `set sysroot' to find
+ shared libraries, they need to be laid out in the same way that
+ they are on the target, with e.g. a `/lib' and `/usr/lib' hierarchy
+ under PATH.
+
+ If PATH starts with the sequence `remote:', GDB will retrieve the
+ target libraries from the remote system. This is only supported
+ when using a remote target that supports the `remote get' command
+ (*note Sending files to a remote system: File Transfer.). The
+ part of PATH following the initial `remote:' (if present) is used
+ as system root prefix on the remote file system. (1)
+
+ For targets with an MS-DOS based filesystem, such as MS-Windows and
+ SymbianOS, GDB tries prefixing a few variants of the target
+ absolute file name with PATH. But first, on Unix hosts, GDB
+ converts all backslash directory separators into forward slashes,
+ because the backslash is not a directory separator on Unix:
+
+ c:\foo\bar.dll => c:/foo/bar.dll
+
+ Then, GDB attempts prefixing the target file name with PATH, and
+ looks for the resulting file name in the host file system:
+
+ c:/foo/bar.dll => /path/to/sysroot/c:/foo/bar.dll
+
+ If that does not find the shared library, GDB tries removing the
+ `:' character from the drive spec, both for convenience, and, for
+ the case of the host file system not supporting file names with
+ colons:
+
+ c:/foo/bar.dll => /path/to/sysroot/c/foo/bar.dll
+
+ This makes it possible to have a system root that mirrors a target
+ with more than one drive. E.g., you may want to setup your local
+ copies of the target system shared libraries like so (note `c' vs
+ `z'):
+
+ `/path/to/sysroot/c/sys/bin/foo.dll'
+ `/path/to/sysroot/c/sys/bin/bar.dll'
+ `/path/to/sysroot/z/sys/bin/bar.dll'
+
+ and point the system root at `/path/to/sysroot', so that GDB can
+ find the correct copies of both `c:\sys\bin\foo.dll', and
+ `z:\sys\bin\bar.dll'.
+
+ If that still does not find the shared library, GDB tries removing
+ the whole drive spec from the target file name:
+
+ c:/foo/bar.dll => /path/to/sysroot/foo/bar.dll
+
+ This last lookup makes it possible to not care about the drive
+ name, if you don't want or need to.
+
+ The `set solib-absolute-prefix' command is an alias for `set
+ sysroot'.
+
+ You can set the default system root by using the configure-time
+ `--with-sysroot' option. If the system root is inside GDB's
+ configured binary prefix (set with `--prefix' or `--exec-prefix'),
+ then the default system root will be updated automatically if the
+ installed GDB is moved to a new location.
+
+`show sysroot'
+ Display the current shared library prefix.
+
+`set solib-search-path PATH'
+ If this variable is set, PATH is a colon-separated list of
+ directories to search for shared libraries. `solib-search-path'
+ is used after `sysroot' fails to locate the library, or if the
+ path to the library is relative instead of absolute. If you want
+ to use `solib-search-path' instead of `sysroot', be sure to set
+ `sysroot' to a nonexistent directory to prevent GDB from finding
+ your host's libraries. `sysroot' is preferred; setting it to a
+ nonexistent directory may interfere with automatic loading of
+ shared library symbols.
+
+`show solib-search-path'
+ Display the current shared library search path.
+
+`set target-file-system-kind KIND'
+ Set assumed file system kind for target reported file names.
+
+ Shared library file names as reported by the target system may not
+ make sense as is on the system GDB is running on. For example,
+ when remote debugging a target that has MS-DOS based file system
+ semantics, from a Unix host, the target may be reporting to GDB a
+ list of loaded shared libraries with file names such as
+ `c:\Windows\kernel32.dll'. On Unix hosts, there's no concept of
+ drive letters, so the `c:\' prefix is not normally understood as
+ indicating an absolute file name, and neither is the backslash
+ normally considered a directory separator character. In that case,
+ the native file system would interpret this whole absolute file
+ name as a relative file name with no directory components. This
+ would make it impossible to point GDB at a copy of the remote
+ target's shared libraries on the host using `set sysroot', and
+ impractical with `set solib-search-path'. Setting
+ `target-file-system-kind' to `dos-based' tells GDB to interpret
+ such file names similarly to how the target would, and to map them
+ to file names valid on GDB's native file system semantics. The
+ value of KIND can be `"auto"', in addition to one of the supported
+ file system kinds. In that case, GDB tries to determine the
+ appropriate file system variant based on the current target's
+ operating system (*note Configuring the Current ABI: ABI.). The
+ supported file system settings are:
+
+ `unix'
+ Instruct GDB to assume the target file system is of Unix
+ kind. Only file names starting the forward slash (`/')
+ character are considered absolute, and the directory
+ separator character is also the forward slash.
+
+ `dos-based'
+ Instruct GDB to assume the target file system is DOS based.
+ File names starting with either a forward slash, or a drive
+ letter followed by a colon (e.g., `c:'), are considered
+ absolute, and both the slash (`/') and the backslash (`\\')
+ characters are considered directory separators.
+
+ `auto'
+ Instruct GDB to use the file system kind associated with the
+ target operating system (*note Configuring the Current ABI:
+ ABI.). This is the default.
+
+ When processing file names provided by the user, GDB frequently
+needs to compare them to the file names recorded in the program's debug
+info. Normally, GDB compares just the "base names" of the files as
+strings, which is reasonably fast even for very large programs. (The
+base name of a file is the last portion of its name, after stripping
+all the leading directories.) This shortcut in comparison is based
+upon the assumption that files cannot have more than one base name.
+This is usually true, but references to files that use symlinks or
+similar filesystem facilities violate that assumption. If your program
+records files using such facilities, or if you provide file names to
+GDB using symlinks etc., you can set `basenames-may-differ' to `true'
+to instruct GDB to completely canonicalize each pair of file names it
+needs to compare. This will make file-name comparisons accurate, but
+at a price of a significant slowdown.
+
+`set basenames-may-differ'
+ Set whether a source file may have multiple base names.
+
+`show basenames-may-differ'
+ Show whether a source file may have multiple base names.
+
+ ---------- Footnotes ----------
+
+ (1) If you want to specify a local system root using a directory
+that happens to be named `remote:', you need to use some equivalent
+variant of the name like `./remote:'.
+
+
+File: gdb.info, Node: Separate Debug Files, Next: Index Files, Prev: Files, Up: GDB Files
+
+18.2 Debugging Information in Separate Files
+============================================
+
+GDB allows you to put a program's debugging information in a file
+separate from the executable itself, in a way that allows GDB to find
+and load the debugging information automatically. Since debugging
+information can be very large--sometimes larger than the executable
+code itself--some systems distribute debugging information for their
+executables in separate files, which users can install only when they
+need to debug a problem.
+
+ GDB supports two ways of specifying the separate debug info file:
+
+ * The executable contains a "debug link" that specifies the name of
+ the separate debug info file. The separate debug file's name is
+ usually `EXECUTABLE.debug', where EXECUTABLE is the name of the
+ corresponding executable file without leading directories (e.g.,
+ `ls.debug' for `/usr/bin/ls'). In addition, the debug link
+ specifies a 32-bit "Cyclic Redundancy Check" (CRC) checksum for
+ the debug file, which GDB uses to validate that the executable and
+ the debug file came from the same build.
+
+ * The executable contains a "build ID", a unique bit string that is
+ also present in the corresponding debug info file. (This is
+ supported only on some operating systems, notably those which use
+ the ELF format for binary files and the GNU Binutils.) For more
+ details about this feature, see the description of the `--build-id'
+ command-line option in *note Command Line Options:
+ (ld.info)Options. The debug info file's name is not specified
+ explicitly by the build ID, but can be computed from the build ID,
+ see below.
+
+ Depending on the way the debug info file is specified, GDB uses two
+different methods of looking for the debug file:
+
+ * For the "debug link" method, GDB looks up the named file in the
+ directory of the executable file, then in a subdirectory of that
+ directory named `.debug', and finally under the global debug
+ directory, in a subdirectory whose name is identical to the leading
+ directories of the executable's absolute file name.
+
+ * For the "build ID" method, GDB looks in the `.build-id'
+ subdirectory of the global debug directory for a file named
+ `NN/NNNNNNNN.debug', where NN are the first 2 hex characters of
+ the build ID bit string, and NNNNNNNN are the rest of the bit
+ string. (Real build ID strings are 32 or more hex characters, not
+ 10.)
+
+ So, for example, suppose you ask GDB to debug `/usr/bin/ls', which
+has a debug link that specifies the file `ls.debug', and a build ID
+whose value in hex is `abcdef1234'. If the global debug directory is
+`/usr/lib/debug', then GDB will look for the following debug
+information files, in the indicated order:
+
+ - `/usr/lib/debug/.build-id/ab/cdef1234.debug'
+
+ - `/usr/bin/ls.debug'
+
+ - `/usr/bin/.debug/ls.debug'
+
+ - `/usr/lib/debug/usr/bin/ls.debug'.
+
+ You can set the global debugging info directory's name, and view the
+name GDB is currently using.
+
+`set debug-file-directory DIRECTORIES'
+ Set the directories which GDB searches for separate debugging
+ information files to DIRECTORY. Multiple directory components can
+ be set concatenating them by a directory separator.
+
+`show debug-file-directory'
+ Show the directories GDB searches for separate debugging
+ information files.
+
+
+ A debug link is a special section of the executable file named
+`.gnu_debuglink'. The section must contain:
+
+ * A filename, with any leading directory components removed,
+ followed by a zero byte,
+
+ * zero to three bytes of padding, as needed to reach the next
+ four-byte boundary within the section, and
+
+ * a four-byte CRC checksum, stored in the same endianness used for
+ the executable file itself. The checksum is computed on the
+ debugging information file's full contents by the function given
+ below, passing zero as the CRC argument.
+
+ Any executable file format can carry a debug link, as long as it can
+contain a section named `.gnu_debuglink' with the contents described
+above.
+
+ The build ID is a special section in the executable file (and in
+other ELF binary files that GDB may consider). This section is often
+named `.note.gnu.build-id', but that name is not mandatory. It
+contains unique identification for the built files--the ID remains the
+same across multiple builds of the same build tree. The default
+algorithm SHA1 produces 160 bits (40 hexadecimal characters) of the
+content for the build ID string. The same section with an identical
+value is present in the original built binary with symbols, in its
+stripped variant, and in the separate debugging information file.
+
+ The debugging information file itself should be an ordinary
+executable, containing a full set of linker symbols, sections, and
+debugging information. The sections of the debugging information file
+should have the same names, addresses, and sizes as the original file,
+but they need not contain any data--much like a `.bss' section in an
+ordinary executable.
+
+ The GNU binary utilities (Binutils) package includes the `objcopy'
+utility that can produce the separated executable / debugging
+information file pairs using the following commands:
+
+ objcopy --only-keep-debug foo foo.debug
+ strip -g foo
+
+These commands remove the debugging information from the executable
+file `foo' and place it in the file `foo.debug'. You can use the
+first, second or both methods to link the two files:
+
+ * The debug link method needs the following additional command to
+ also leave behind a debug link in `foo':
+
+ objcopy --add-gnu-debuglink=foo.debug foo
+
+ Ulrich Drepper's `elfutils' package, starting with version 0.53,
+ contains a version of the `strip' command such that the command
+ `strip foo -f foo.debug' has the same functionality as the two
+ `objcopy' commands and the `ln -s' command above, together.
+
+ * Build ID gets embedded into the main executable using `ld
+ --build-id' or the GCC counterpart `gcc -Wl,--build-id'. Build ID
+ support plus compatibility fixes for debug files separation are
+ present in GNU binary utilities (Binutils) package since version
+ 2.18.
+
+The CRC used in `.gnu_debuglink' is the CRC-32 defined in IEEE 802.3
+using the polynomial:
+
+ x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11
+ + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1
+
+ The function is computed byte at a time, taking the least
+significant bit of each byte first. The initial pattern `0xffffffff'
+is used, to ensure leading zeros affect the CRC and the final result is
+inverted to ensure trailing zeros also affect the CRC.
+
+ _Note:_ This is the same CRC polynomial as used in handling the
+"Remote Serial Protocol" `qCRC' packet (*note GDB Remote Serial
+Protocol: Remote Protocol.). However in the case of the Remote Serial
+Protocol, the CRC is computed _most_ significant bit first, and the
+result is not inverted, so trailing zeros have no effect on the CRC
+value.
+
+ To complete the description, we show below the code of the function
+which produces the CRC used in `.gnu_debuglink'. Inverting the
+initially supplied `crc' argument means that an initial call to this
+function passing in zero will start computing the CRC using
+`0xffffffff'.
+
+ unsigned long
+ gnu_debuglink_crc32 (unsigned long crc,
+ unsigned char *buf, size_t len)
+ {
+ static const unsigned long crc32_table[256] =
+ {
+ 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419,
+ 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4,
+ 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07,
+ 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
+ 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856,
+ 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9,
+ 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4,
+ 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
+ 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3,
+ 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a,
+ 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599,
+ 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
+ 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190,
+ 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f,
+ 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e,
+ 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
+ 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed,
+ 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950,
+ 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3,
+ 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
+ 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a,
+ 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5,
+ 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010,
+ 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
+ 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17,
+ 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6,
+ 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615,
+ 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
+ 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344,
+ 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb,
+ 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a,
+ 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
+ 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1,
+ 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c,
+ 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef,
+ 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
+ 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe,
+ 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31,
+ 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c,
+ 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
+ 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b,
+ 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242,
+ 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1,
+ 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
+ 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278,
+ 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7,
+ 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66,
+ 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
+ 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605,
+ 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8,
+ 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b,
+ 0x2d02ef8d
+ };
+ unsigned char *end;
+
+ crc = ~crc & 0xffffffff;
+ for (end = buf + len; buf < end; ++buf)
+ crc = crc32_table[(crc ^ *buf) & 0xff] ^ (crc >> 8);
+ return ~crc & 0xffffffff;
+ }
+
+This computation does not apply to the "build ID" method.
+
+
+File: gdb.info, Node: Index Files, Next: Symbol Errors, Prev: Separate Debug Files, Up: GDB Files
+
+18.3 Index Files Speed Up GDB
+=============================
+
+When GDB finds a symbol file, it scans the symbols in the file in order
+to construct an internal symbol table. This lets most GDB operations
+work quickly--at the cost of a delay early on. For large programs,
+this delay can be quite lengthy, so GDB provides a way to build an
+index, which speeds up startup.
+
+ The index is stored as a section in the symbol file. GDB can write
+the index to a file, then you can put it into the symbol file using
+`objcopy'.
+
+ To create an index file, use the `save gdb-index' command:
+
+`save gdb-index DIRECTORY'
+ Create an index file for each symbol file currently known by GDB.
+ Each file is named after its corresponding symbol file, with
+ `.gdb-index' appended, and is written into the given DIRECTORY.
+
+ Once you have created an index file you can merge it into your symbol
+file, here named `symfile', using `objcopy':
+
+ $ objcopy --add-section .gdb_index=symfile.gdb-index \
+ --set-section-flags .gdb_index=readonly symfile symfile
+
+ There are currently some limitation on indices. They only work when
+for DWARF debugging information, not stabs. And, they do not currently
+work for programs using Ada.
+
+
+File: gdb.info, Node: Symbol Errors, Next: Data Files, Prev: Index Files, Up: GDB Files
+
+18.4 Errors Reading Symbol Files
+================================
+
+While reading a symbol file, GDB occasionally encounters problems, such
+as symbol types it does not recognize, or known bugs in compiler
+output. By default, GDB does not notify you of such problems, since
+they are relatively common and primarily of interest to people
+debugging compilers. If you are interested in seeing information about
+ill-constructed symbol tables, you can either ask GDB to print only one
+message about each such type of problem, no matter how many times the
+problem occurs; or you can ask GDB to print more messages, to see how
+many times the problems occur, with the `set complaints' command (*note
+Optional Warnings and Messages: Messages/Warnings.).
+
+ The messages currently printed, and their meanings, include:
+
+`inner block not inside outer block in SYMBOL'
+ The symbol information shows where symbol scopes begin and end
+ (such as at the start of a function or a block of statements).
+ This error indicates that an inner scope block is not fully
+ contained in its outer scope blocks.
+
+ GDB circumvents the problem by treating the inner block as if it
+ had the same scope as the outer block. In the error message,
+ SYMBOL may be shown as "`(don't know)'" if the outer block is not a
+ function.
+
+`block at ADDRESS out of order'
+ The symbol information for symbol scope blocks should occur in
+ order of increasing addresses. This error indicates that it does
+ not do so.
+
+ GDB does not circumvent this problem, and has trouble locating
+ symbols in the source file whose symbols it is reading. (You can
+ often determine what source file is affected by specifying `set
+ verbose on'. *Note Optional Warnings and Messages:
+ Messages/Warnings.)
+
+`bad block start address patched'
+ The symbol information for a symbol scope block has a start address
+ smaller than the address of the preceding source line. This is
+ known to occur in the SunOS 4.1.1 (and earlier) C compiler.
+
+ GDB circumvents the problem by treating the symbol scope block as
+ starting on the previous source line.
+
+`bad string table offset in symbol N'
+ Symbol number N contains a pointer into the string table which is
+ larger than the size of the string table.
+
+ GDB circumvents the problem by considering the symbol to have the
+ name `foo', which may cause other problems if many symbols end up
+ with this name.
+
+`unknown symbol type `0xNN''
+ The symbol information contains new data types that GDB does not
+ yet know how to read. `0xNN' is the symbol type of the
+ uncomprehended information, in hexadecimal.
+
+ GDB circumvents the error by ignoring this symbol information.
+ This usually allows you to debug your program, though certain
+ symbols are not accessible. If you encounter such a problem and
+ feel like debugging it, you can debug `gdb' with itself, breakpoint
+ on `complain', then go up to the function `read_dbx_symtab' and
+ examine `*bufp' to see the symbol.
+
+`stub type has NULL name'
+ GDB could not find the full definition for a struct or class.
+
+`const/volatile indicator missing (ok if using g++ v1.x), got...'
+ The symbol information for a C++ member function is missing some
+ information that recent versions of the compiler should have
+ output for it.
+
+`info mismatch between compiler and debugger'
+ GDB could not parse a type specification output by the compiler.
+
+
+
+File: gdb.info, Node: Data Files, Prev: Symbol Errors, Up: GDB Files
+
+18.5 GDB Data Files
+===================
+
+GDB will sometimes read an auxiliary data file. These files are kept
+in a directory known as the "data directory".
+
+ You can set the data directory's name, and view the name GDB is
+currently using.
+
+`set data-directory DIRECTORY'
+ Set the directory which GDB searches for auxiliary data files to
+ DIRECTORY.
+
+`show data-directory'
+ Show the directory GDB searches for auxiliary data files.
+
+ You can set the default data directory by using the configure-time
+`--with-gdb-datadir' option. If the data directory is inside GDB's
+configured binary prefix (set with `--prefix' or `--exec-prefix'), then
+the default data directory will be updated automatically if the
+installed GDB is moved to a new location.
+
+ The data directory may also be specified with the `--data-directory'
+command line option. *Note Mode Options::.
+
+
+File: gdb.info, Node: Targets, Next: Remote Debugging, Prev: GDB Files, Up: Top
+
+19 Specifying a Debugging Target
+********************************
+
+A "target" is the execution environment occupied by your program.
+
+ Often, GDB runs in the same host environment as your program; in
+that case, the debugging target is specified as a side effect when you
+use the `file' or `core' commands. When you need more flexibility--for
+example, running GDB on a physically separate host, or controlling a
+standalone system over a serial port or a realtime system over a TCP/IP
+connection--you can use the `target' command to specify one of the
+target types configured for GDB (*note Commands for Managing Targets:
+Target Commands.).
+
+ It is possible to build GDB for several different "target
+architectures". When GDB is built like that, you can choose one of the
+available architectures with the `set architecture' command.
+
+`set architecture ARCH'
+ This command sets the current target architecture to ARCH. The
+ value of ARCH can be `"auto"', in addition to one of the supported
+ architectures.
+
+`show architecture'
+ Show the current target architecture.
+
+`set processor'
+`processor'
+ These are alias commands for, respectively, `set architecture' and
+ `show architecture'.
+
+* Menu:
+
+* Active Targets:: Active targets
+* Target Commands:: Commands for managing targets
+* Byte Order:: Choosing target byte order
+
+
+File: gdb.info, Node: Active Targets, Next: Target Commands, Up: Targets
+
+19.1 Active Targets
+===================
+
+There are multiple classes of targets such as: processes, executable
+files or recording sessions. Core files belong to the process class,
+making core file and process mutually exclusive. Otherwise, GDB can
+work concurrently on multiple active targets, one in each class. This
+allows you to (for example) start a process and inspect its activity,
+while still having access to the executable file after the process
+finishes. Or if you start process recording (*note Reverse
+Execution::) and `reverse-step' there, you are presented a virtual
+layer of the recording target, while the process target remains stopped
+at the chronologically last point of the process execution.
+
+ Use the `core-file' and `exec-file' commands to select a new core
+file or executable target (*note Commands to Specify Files: Files.). To
+specify as a target a process that is already running, use the `attach'
+command (*note Debugging an Already-running Process: Attach.).
+
+
+File: gdb.info, Node: Target Commands, Next: Byte Order, Prev: Active Targets, Up: Targets
+
+19.2 Commands for Managing Targets
+==================================
+
+`target TYPE PARAMETERS'
+ Connects the GDB host environment to a target machine or process.
+ A target is typically a protocol for talking to debugging
+ facilities. You use the argument TYPE to specify the type or
+ protocol of the target machine.
+
+ Further PARAMETERS are interpreted by the target protocol, but
+ typically include things like device names or host names to connect
+ with, process numbers, and baud rates.
+
+ The `target' command does not repeat if you press <RET> again
+ after executing the command.
+
+`help target'
+ Displays the names of all targets available. To display targets
+ currently selected, use either `info target' or `info files'
+ (*note Commands to Specify Files: Files.).
+
+`help target NAME'
+ Describe a particular target, including any parameters necessary to
+ select it.
+
+`set gnutarget ARGS'
+ GDB uses its own library BFD to read your files. GDB knows
+ whether it is reading an "executable", a "core", or a ".o" file;
+ however, you can specify the file format with the `set gnutarget'
+ command. Unlike most `target' commands, with `gnutarget' the
+ `target' refers to a program, not a machine.
+
+ _Warning:_ To specify a file format with `set gnutarget', you
+ must know the actual BFD name.
+
+ *Note Commands to Specify Files: Files.
+
+`show gnutarget'
+ Use the `show gnutarget' command to display what file format
+ `gnutarget' is set to read. If you have not set `gnutarget', GDB
+ will determine the file format for each file automatically, and
+ `show gnutarget' displays `The current BDF target is "auto"'.
+
+ Here are some common targets (available, or not, depending on the GDB
+configuration):
+
+`target exec PROGRAM'
+ An executable file. `target exec PROGRAM' is the same as
+ `exec-file PROGRAM'.
+
+`target core FILENAME'
+ A core dump file. `target core FILENAME' is the same as
+ `core-file FILENAME'.
+
+`target remote MEDIUM'
+ A remote system connected to GDB via a serial line or network
+ connection. This command tells GDB to use its own remote protocol
+ over MEDIUM for debugging. *Note Remote Debugging::.
+
+ For example, if you have a board connected to `/dev/ttya' on the
+ machine running GDB, you could say:
+
+ target remote /dev/ttya
+
+ `target remote' supports the `load' command. This is only useful
+ if you have some other way of getting the stub to the target
+ system, and you can put it somewhere in memory where it won't get
+ clobbered by the download.
+
+`target sim [SIMARGS] ...'
+ Builtin CPU simulator. GDB includes simulators for most
+ architectures. In general,
+ target sim
+ load
+ run
+ works; however, you cannot assume that a specific memory map,
+ device drivers, or even basic I/O is available, although some
+ simulators do provide these. For info about any
+ processor-specific simulator details, see the appropriate section
+ in *note Embedded Processors: Embedded Processors.
+
+
+ Some configurations may include these targets as well:
+
+`target nrom DEV'
+ NetROM ROM emulator. This target only supports downloading.
+
+
+ Different targets are available on different configurations of GDB;
+your configuration may have more or fewer targets.
+
+ Many remote targets require you to download the executable's code
+once you've successfully established a connection. You may wish to
+control various aspects of this process.
+
+`set hash'
+ This command controls whether a hash mark `#' is displayed while
+ downloading a file to the remote monitor. If on, a hash mark is
+ displayed after each S-record is successfully downloaded to the
+ monitor.
+
+`show hash'
+ Show the current status of displaying the hash mark.
+
+`set debug monitor'
+ Enable or disable display of communications messages between GDB
+ and the remote monitor.
+
+`show debug monitor'
+ Show the current status of displaying communications between GDB
+ and the remote monitor.
+
+`load FILENAME'
+ Depending on what remote debugging facilities are configured into
+ GDB, the `load' command may be available. Where it exists, it is
+ meant to make FILENAME (an executable) available for debugging on
+ the remote system--by downloading, or dynamic linking, for example.
+ `load' also records the FILENAME symbol table in GDB, like the
+ `add-symbol-file' command.
+
+ If your GDB does not have a `load' command, attempting to execute
+ it gets the error message "`You can't do that when your target is
+ ...'"
+
+ The file is loaded at whatever address is specified in the
+ executable. For some object file formats, you can specify the
+ load address when you link the program; for other formats, like
+ a.out, the object file format specifies a fixed address.
+
+ Depending on the remote side capabilities, GDB may be able to load
+ programs into flash memory.
+
+ `load' does not repeat if you press <RET> again after using it.
+
+
+File: gdb.info, Node: Byte Order, Prev: Target Commands, Up: Targets
+
+19.3 Choosing Target Byte Order
+===============================
+
+Some types of processors, such as the MIPS, PowerPC, and Renesas SH,
+offer the ability to run either big-endian or little-endian byte
+orders. Usually the executable or symbol will include a bit to
+designate the endian-ness, and you will not need to worry about which
+to use. However, you may still find it useful to adjust GDB's idea of
+processor endian-ness manually.
+
+`set endian big'
+ Instruct GDB to assume the target is big-endian.
+
+`set endian little'
+ Instruct GDB to assume the target is little-endian.
+
+`set endian auto'
+ Instruct GDB to use the byte order associated with the executable.
+
+`show endian'
+ Display GDB's current idea of the target byte order.
+
+
+ Note that these commands merely adjust interpretation of symbolic
+data on the host, and that they have absolutely no effect on the target
+system.
+
+
+File: gdb.info, Node: Remote Debugging, Next: Configurations, Prev: Targets, Up: Top
+
+20 Debugging Remote Programs
+****************************
+
+If you are trying to debug a program running on a machine that cannot
+run GDB in the usual way, it is often useful to use remote debugging.
+For example, you might use remote debugging on an operating system
+kernel, or on a small system which does not have a general purpose
+operating system powerful enough to run a full-featured debugger.
+
+ Some configurations of GDB have special serial or TCP/IP interfaces
+to make this work with particular debugging targets. In addition, GDB
+comes with a generic serial protocol (specific to GDB, but not specific
+to any particular target system) which you can use if you write the
+remote stubs--the code that runs on the remote system to communicate
+with GDB.
+
+ Other remote targets may be available in your configuration of GDB;
+use `help target' to list them.
+
+* Menu:
+
+* Connecting:: Connecting to a remote target
+* File Transfer:: Sending files to a remote system
+* Server:: Using the gdbserver program
+* Remote Configuration:: Remote configuration
+* Remote Stub:: Implementing a remote stub
+
+
+File: gdb.info, Node: Connecting, Next: File Transfer, Up: Remote Debugging
+
+20.1 Connecting to a Remote Target
+==================================
+
+On the GDB host machine, you will need an unstripped copy of your
+program, since GDB needs symbol and debugging information. Start up
+GDB as usual, using the name of the local copy of your program as the
+first argument.
+
+ GDB can communicate with the target over a serial line, or over an
+IP network using TCP or UDP. In each case, GDB uses the same protocol
+for debugging your program; only the medium carrying the debugging
+packets varies. The `target remote' command establishes a connection
+to the target. Its arguments indicate which medium to use:
+
+`target remote SERIAL-DEVICE'
+ Use SERIAL-DEVICE to communicate with the target. For example, to
+ use a serial line connected to the device named `/dev/ttyb':
+
+ target remote /dev/ttyb
+
+ If you're using a serial line, you may want to give GDB the
+ `--baud' option, or use the `set remotebaud' command (*note set
+ remotebaud: Remote Configuration.) before the `target' command.
+
+`target remote `HOST:PORT''
+`target remote `tcp:HOST:PORT''
+ Debug using a TCP connection to PORT on HOST. The HOST may be
+ either a host name or a numeric IP address; PORT must be a decimal
+ number. The HOST could be the target machine itself, if it is
+ directly connected to the net, or it might be a terminal server
+ which in turn has a serial line to the target.
+
+ For example, to connect to port 2828 on a terminal server named
+ `manyfarms':
+
+ target remote manyfarms:2828
+
+ If your remote target is actually running on the same machine as
+ your debugger session (e.g. a simulator for your target running on
+ the same host), you can omit the hostname. For example, to
+ connect to port 1234 on your local machine:
+
+ target remote :1234
+ Note that the colon is still required here.
+
+`target remote `udp:HOST:PORT''
+ Debug using UDP packets to PORT on HOST. For example, to connect
+ to UDP port 2828 on a terminal server named `manyfarms':
+
+ target remote udp:manyfarms:2828
+
+ When using a UDP connection for remote debugging, you should keep
+ in mind that the `U' stands for "Unreliable". UDP can silently
+ drop packets on busy or unreliable networks, which will cause
+ havoc with your debugging session.
+
+`target remote | COMMAND'
+ Run COMMAND in the background and communicate with it using a
+ pipe. The COMMAND is a shell command, to be parsed and expanded
+ by the system's command shell, `/bin/sh'; it should expect remote
+ protocol packets on its standard input, and send replies on its
+ standard output. You could use this to run a stand-alone simulator
+ that speaks the remote debugging protocol, to make net connections
+ using programs like `ssh', or for other similar tricks.
+
+ If COMMAND closes its standard output (perhaps by exiting), GDB
+ will try to send it a `SIGTERM' signal. (If the program has
+ already exited, this will have no effect.)
+
+
+ Once the connection has been established, you can use all the usual
+commands to examine and change data. The remote program is already
+running; you can use `step' and `continue', and you do not need to use
+`run'.
+
+ Whenever GDB is waiting for the remote program, if you type the
+interrupt character (often `Ctrl-c'), GDB attempts to stop the program.
+This may or may not succeed, depending in part on the hardware and the
+serial drivers the remote system uses. If you type the interrupt
+character once again, GDB displays this prompt:
+
+ Interrupted while waiting for the program.
+ Give up (and stop debugging it)? (y or n)
+
+ If you type `y', GDB abandons the remote debugging session. (If you
+decide you want to try again later, you can use `target remote' again
+to connect once more.) If you type `n', GDB goes back to waiting.
+
+`detach'
+ When you have finished debugging the remote program, you can use
+ the `detach' command to release it from GDB control. Detaching
+ from the target normally resumes its execution, but the results
+ will depend on your particular remote stub. After the `detach'
+ command, GDB is free to connect to another target.
+
+`disconnect'
+ The `disconnect' command behaves like `detach', except that the
+ target is generally not resumed. It will wait for GDB (this
+ instance or another one) to connect and continue debugging. After
+ the `disconnect' command, GDB is again free to connect to another
+ target.
+
+`monitor CMD'
+ This command allows you to send arbitrary commands directly to the
+ remote monitor. Since GDB doesn't care about the commands it
+ sends like this, this command is the way to extend GDB--you can
+ add new commands that only the external monitor will understand
+ and implement.
+
+
+File: gdb.info, Node: File Transfer, Next: Server, Prev: Connecting, Up: Remote Debugging
+
+20.2 Sending files to a remote system
+=====================================
+
+Some remote targets offer the ability to transfer files over the same
+connection used to communicate with GDB. This is convenient for
+targets accessible through other means, e.g. GNU/Linux systems running
+`gdbserver' over a network interface. For other targets, e.g. embedded
+devices with only a single serial port, this may be the only way to
+upload or download files.
+
+ Not all remote targets support these commands.
+
+`remote put HOSTFILE TARGETFILE'
+ Copy file HOSTFILE from the host system (the machine running GDB)
+ to TARGETFILE on the target system.
+
+`remote get TARGETFILE HOSTFILE'
+ Copy file TARGETFILE from the target system to HOSTFILE on the
+ host system.
+
+`remote delete TARGETFILE'
+ Delete TARGETFILE from the target system.
+
+
+
+File: gdb.info, Node: Server, Next: Remote Configuration, Prev: File Transfer, Up: Remote Debugging
+
+20.3 Using the `gdbserver' Program
+==================================
+
+`gdbserver' is a control program for Unix-like systems, which allows
+you to connect your program with a remote GDB via `target remote'--but
+without linking in the usual debugging stub.
+
+ `gdbserver' is not a complete replacement for the debugging stubs,
+because it requires essentially the same operating-system facilities
+that GDB itself does. In fact, a system that can run `gdbserver' to
+connect to a remote GDB could also run GDB locally! `gdbserver' is
+sometimes useful nevertheless, because it is a much smaller program
+than GDB itself. It is also easier to port than all of GDB, so you may
+be able to get started more quickly on a new system by using
+`gdbserver'. Finally, if you develop code for real-time systems, you
+may find that the tradeoffs involved in real-time operation make it
+more convenient to do as much development work as possible on another
+system, for example by cross-compiling. You can use `gdbserver' to
+make a similar choice for debugging.
+
+ GDB and `gdbserver' communicate via either a serial line or a TCP
+connection, using the standard GDB remote serial protocol.
+
+ _Warning:_ `gdbserver' does not have any built-in security. Do
+ not run `gdbserver' connected to any public network; a GDB
+ connection to `gdbserver' provides access to the target system
+ with the same privileges as the user running `gdbserver'.
+
+20.3.1 Running `gdbserver'
+--------------------------
+
+Run `gdbserver' on the target system. You need a copy of the program
+you want to debug, including any libraries it requires. `gdbserver'
+does not need your program's symbol table, so you can strip the program
+if necessary to save space. GDB on the host system does all the symbol
+handling.
+
+ To use the server, you must tell it how to communicate with GDB; the
+name of your program; and the arguments for your program. The usual
+syntax is:
+
+ target> gdbserver COMM PROGRAM [ ARGS ... ]
+
+ COMM is either a device name (to use a serial line) or a TCP
+hostname and portnumber. For example, to debug Emacs with the argument
+`foo.txt' and communicate with GDB over the serial port `/dev/com1':
+
+ target> gdbserver /dev/com1 emacs foo.txt
+
+ `gdbserver' waits passively for the host GDB to communicate with it.
+
+ To use a TCP connection instead of a serial line:
+
+ target> gdbserver host:2345 emacs foo.txt
+
+ The only difference from the previous example is the first argument,
+specifying that you are communicating with the host GDB via TCP. The
+`host:2345' argument means that `gdbserver' is to expect a TCP
+connection from machine `host' to local TCP port 2345. (Currently, the
+`host' part is ignored.) You can choose any number you want for the
+port number as long as it does not conflict with any TCP ports already
+in use on the target system (for example, `23' is reserved for
+`telnet').(1) You must use the same port number with the host GDB
+`target remote' command.
+
+20.3.1.1 Attaching to a Running Program
+.......................................
+
+On some targets, `gdbserver' can also attach to running programs. This
+is accomplished via the `--attach' argument. The syntax is:
+
+ target> gdbserver --attach COMM PID
+
+ PID is the process ID of a currently running process. It isn't
+necessary to point `gdbserver' at a binary for the running process.
+
+ You can debug processes by name instead of process ID if your target
+has the `pidof' utility:
+
+ target> gdbserver --attach COMM `pidof PROGRAM`
+
+ In case more than one copy of PROGRAM is running, or PROGRAM has
+multiple threads, most versions of `pidof' support the `-s' option to
+only return the first process ID.
+
+20.3.1.2 Multi-Process Mode for `gdbserver'
+...........................................
+
+When you connect to `gdbserver' using `target remote', `gdbserver'
+debugs the specified program only once. When the program exits, or you
+detach from it, GDB closes the connection and `gdbserver' exits.
+
+ If you connect using `target extended-remote', `gdbserver' enters
+multi-process mode. When the debugged program exits, or you detach
+from it, GDB stays connected to `gdbserver' even though no program is
+running. The `run' and `attach' commands instruct `gdbserver' to run
+or attach to a new program. The `run' command uses `set remote
+exec-file' (*note set remote exec-file::) to select the program to run.
+Command line arguments are supported, except for wildcard expansion and
+I/O redirection (*note Arguments::).
+
+ To start `gdbserver' without supplying an initial command to run or
+process ID to attach, use the `--multi' command line option. Then you
+can connect using `target extended-remote' and start the program you
+want to debug.
+
+ `gdbserver' does not automatically exit in multi-process mode. You
+can terminate it by using `monitor exit' (*note Monitor Commands for
+gdbserver::).
+
+20.3.1.3 Other Command-Line Arguments for `gdbserver'
+.....................................................
+
+The `--debug' option tells `gdbserver' to display extra status
+information about the debugging process. The `--remote-debug' option
+tells `gdbserver' to display remote protocol debug output. These
+options are intended for `gdbserver' development and for bug reports to
+the developers.
+
+ The `--wrapper' option specifies a wrapper to launch programs for
+debugging. The option should be followed by the name of the wrapper,
+then any command-line arguments to pass to the wrapper, then `--'
+indicating the end of the wrapper arguments.
+
+ `gdbserver' runs the specified wrapper program with a combined
+command line including the wrapper arguments, then the name of the
+program to debug, then any arguments to the program. The wrapper runs
+until it executes your program, and then GDB gains control.
+
+ You can use any program that eventually calls `execve' with its
+arguments as a wrapper. Several standard Unix utilities do this, e.g.
+`env' and `nohup'. Any Unix shell script ending with `exec "$@"' will
+also work.
+
+ For example, you can use `env' to pass an environment variable to
+the debugged program, without setting the variable in `gdbserver''s
+environment:
+
+ $ gdbserver --wrapper env LD_PRELOAD=libtest.so -- :2222 ./testprog
+
+20.3.2 Connecting to `gdbserver'
+--------------------------------
+
+Run GDB on the host system.
+
+ First make sure you have the necessary symbol files. Load symbols
+for your application using the `file' command before you connect. Use
+`set sysroot' to locate target libraries (unless your GDB was compiled
+with the correct sysroot using `--with-sysroot').
+
+ The symbol file and target libraries must exactly match the
+executable and libraries on the target, with one exception: the files
+on the host system should not be stripped, even if the files on the
+target system are. Mismatched or missing files will lead to confusing
+results during debugging. On GNU/Linux targets, mismatched or missing
+files may also prevent `gdbserver' from debugging multi-threaded
+programs.
+
+ Connect to your target (*note Connecting to a Remote Target:
+Connecting.). For TCP connections, you must start up `gdbserver' prior
+to using the `target remote' command. Otherwise you may get an error
+whose text depends on the host system, but which usually looks
+something like `Connection refused'. Don't use the `load' command in
+GDB when using `gdbserver', since the program is already on the target.
+
+20.3.3 Monitor Commands for `gdbserver'
+---------------------------------------
+
+During a GDB session using `gdbserver', you can use the `monitor'
+command to send special requests to `gdbserver'. Here are the
+available commands.
+
+`monitor help'
+ List the available monitor commands.
+
+`monitor set debug 0'
+`monitor set debug 1'
+ Disable or enable general debugging messages.
+
+`monitor set remote-debug 0'
+`monitor set remote-debug 1'
+ Disable or enable specific debugging messages associated with the
+ remote protocol (*note Remote Protocol::).
+
+`monitor set libthread-db-search-path [PATH]'
+ When this command is issued, PATH is a colon-separated list of
+ directories to search for `libthread_db' (*note set
+ libthread-db-search-path: Threads.). If you omit PATH,
+ `libthread-db-search-path' will be reset to its default value.
+
+ The special entry `$pdir' for `libthread-db-search-path' is not
+ supported in `gdbserver'.
+
+`monitor exit'
+ Tell gdbserver to exit immediately. This command should be
+ followed by `disconnect' to close the debugging session.
+ `gdbserver' will detach from any attached processes and kill any
+ processes it created. Use `monitor exit' to terminate `gdbserver'
+ at the end of a multi-process mode debug session.
+
+
+20.3.4 Tracepoints support in `gdbserver'
+-----------------------------------------
+
+On some targets, `gdbserver' supports tracepoints, fast tracepoints and
+static tracepoints.
+
+ For fast or static tracepoints to work, a special library called the
+"in-process agent" (IPA), must be loaded in the inferior process. This
+library is built and distributed as an integral part of `gdbserver'.
+In addition, support for static tracepoints requires building the
+in-process agent library with static tracepoints support. At present,
+the UST (LTTng Userspace Tracer, `http://lttng.org/ust') tracing engine
+is supported. This support is automatically available if UST
+development headers are found in the standard include path when
+`gdbserver' is built, or if `gdbserver' was explicitly configured using
+`--with-ust' to point at such headers. You can explicitly disable the
+support using `--with-ust=no'.
+
+ There are several ways to load the in-process agent in your program:
+
+`Specifying it as dependency at link time'
+ You can link your program dynamically with the in-process agent
+ library. On most systems, this is accomplished by adding
+ `-linproctrace' to the link command.
+
+`Using the system's preloading mechanisms'
+ You can force loading the in-process agent at startup time by using
+ your system's support for preloading shared libraries. Many Unixes
+ support the concept of preloading user defined libraries. In most
+ cases, you do that by specifying `LD_PRELOAD=libinproctrace.so' in
+ the environment. See also the description of `gdbserver''s
+ `--wrapper' command line option.
+
+`Using GDB to force loading the agent at run time'
+ On some systems, you can force the inferior to load a shared
+ library, by calling a dynamic loader function in the inferior that
+ takes care of dynamically looking up and loading a shared library.
+ On most Unix systems, the function is `dlopen'. You'll use the
+ `call' command for that. For example:
+
+ (gdb) call dlopen ("libinproctrace.so", ...)
+
+ Note that on most Unix systems, for the `dlopen' function to be
+ available, the program needs to be linked with `-ldl'.
+
+ On systems that have a userspace dynamic loader, like most Unix
+systems, when you connect to `gdbserver' using `target remote', you'll
+find that the program is stopped at the dynamic loader's entry point,
+and no shared library has been loaded in the program's address space
+yet, including the in-process agent. In that case, before being able
+to use any of the fast or static tracepoints features, you need to let
+the loader run and load the shared libraries. The simplest way to do
+that is to run the program to the main procedure. E.g., if debugging a
+C or C++ program, start `gdbserver' like so:
+
+ $ gdbserver :9999 myprogram
+
+ Start GDB and connect to `gdbserver' like so, and run to main:
+
+ $ gdb myprogram
+ (gdb) target remote myhost:9999
+ 0x00007f215893ba60 in ?? () from /lib64/ld-linux-x86-64.so.2
+ (gdb) b main
+ (gdb) continue
+
+ The in-process tracing agent library should now be loaded into the
+process; you can confirm it with the `info sharedlibrary' command,
+which will list `libinproctrace.so' as loaded in the process. You are
+now ready to install fast tracepoints, list static tracepoint markers,
+probe static tracepoints markers, and start tracing.
+
+ ---------- Footnotes ----------
+
+ (1) If you choose a port number that conflicts with another service,
+`gdbserver' prints an error message and exits.
+
+
+File: gdb.info, Node: Remote Configuration, Next: Remote Stub, Prev: Server, Up: Remote Debugging
+
+20.4 Remote Configuration
+=========================
+
+This section documents the configuration options available when
+debugging remote programs. For the options related to the File I/O
+extensions of the remote protocol, see *note system-call-allowed:
+system.
+
+`set remoteaddresssize BITS'
+ Set the maximum size of address in a memory packet to the specified
+ number of bits. GDB will mask off the address bits above that
+ number, when it passes addresses to the remote target. The
+ default value is the number of bits in the target's address.
+
+`show remoteaddresssize'
+ Show the current value of remote address size in bits.
+
+`set remotebaud N'
+ Set the baud rate for the remote serial I/O to N baud. The value
+ is used to set the speed of the serial port used for debugging
+ remote targets.
+
+`show remotebaud'
+ Show the current speed of the remote connection.
+
+`set remotebreak'
+ If set to on, GDB sends a `BREAK' signal to the remote when you
+ type `Ctrl-c' to interrupt the program running on the remote. If
+ set to off, GDB sends the `Ctrl-C' character instead. The default
+ is off, since most remote systems expect to see `Ctrl-C' as the
+ interrupt signal.
+
+`show remotebreak'
+ Show whether GDB sends `BREAK' or `Ctrl-C' to interrupt the remote
+ program.
+
+`set remoteflow on'
+`set remoteflow off'
+ Enable or disable hardware flow control (`RTS'/`CTS') on the
+ serial port used to communicate to the remote target.
+
+`show remoteflow'
+ Show the current setting of hardware flow control.
+
+`set remotelogbase BASE'
+ Set the base (a.k.a. radix) of logging serial protocol
+ communications to BASE. Supported values of BASE are: `ascii',
+ `octal', and `hex'. The default is `ascii'.
+
+`show remotelogbase'
+ Show the current setting of the radix for logging remote serial
+ protocol.
+
+`set remotelogfile FILE'
+ Record remote serial communications on the named FILE. The
+ default is not to record at all.
+
+`show remotelogfile.'
+ Show the current setting of the file name on which to record the
+ serial communications.
+
+`set remotetimeout NUM'
+ Set the timeout limit to wait for the remote target to respond to
+ NUM seconds. The default is 2 seconds.
+
+`show remotetimeout'
+ Show the current number of seconds to wait for the remote target
+ responses.
+
+`set remote hardware-watchpoint-limit LIMIT'
+`set remote hardware-breakpoint-limit LIMIT'
+ Restrict GDB to using LIMIT remote hardware breakpoint or
+ watchpoints. A limit of -1, the default, is treated as unlimited.
+
+`set remote exec-file FILENAME'
+`show remote exec-file'
+ Select the file used for `run' with `target extended-remote'.
+ This should be set to a filename valid on the target system. If
+ it is not set, the target will use a default filename (e.g. the
+ last program run).
+
+`set remote interrupt-sequence'
+ Allow the user to select one of `Ctrl-C', a `BREAK' or `BREAK-g'
+ as the sequence to the remote target in order to interrupt the
+ execution. `Ctrl-C' is a default. Some system prefers `BREAK'
+ which is high level of serial line for some certain time. Linux
+ kernel prefers `BREAK-g', a.k.a Magic SysRq g. It is `BREAK'
+ signal followed by character `g'.
+
+`show interrupt-sequence'
+ Show which of `Ctrl-C', `BREAK' or `BREAK-g' is sent by GDB to
+ interrupt the remote program. `BREAK-g' is BREAK signal followed
+ by `g' and also known as Magic SysRq g.
+
+`set remote interrupt-on-connect'
+ Specify whether interrupt-sequence is sent to remote target when
+ GDB connects to it. This is mostly needed when you debug Linux
+ kernel. Linux kernel expects `BREAK' followed by `g' which is
+ known as Magic SysRq g in order to connect GDB.
+
+`show interrupt-on-connect'
+ Show whether interrupt-sequence is sent to remote target when GDB
+ connects to it.
+
+`set tcp auto-retry on'
+ Enable auto-retry for remote TCP connections. This is useful if
+ the remote debugging agent is launched in parallel with GDB; there
+ is a race condition because the agent may not become ready to
+ accept the connection before GDB attempts to connect. When
+ auto-retry is enabled, if the initial attempt to connect fails,
+ GDB reattempts to establish the connection using the timeout
+ specified by `set tcp connect-timeout'.
+
+`set tcp auto-retry off'
+ Do not auto-retry failed TCP connections.
+
+`show tcp auto-retry'
+ Show the current auto-retry setting.
+
+`set tcp connect-timeout SECONDS'
+ Set the timeout for establishing a TCP connection to the remote
+ target to SECONDS. The timeout affects both polling to retry
+ failed connections (enabled by `set tcp auto-retry on') and
+ waiting for connections that are merely slow to complete, and
+ represents an approximate cumulative value.
+
+`show tcp connect-timeout'
+ Show the current connection timeout setting.
+
+ The GDB remote protocol autodetects the packets supported by your
+debugging stub. If you need to override the autodetection, you can use
+these commands to enable or disable individual packets. Each packet
+can be set to `on' (the remote target supports this packet), `off' (the
+remote target does not support this packet), or `auto' (detect remote
+target support for this packet). They all default to `auto'. For more
+information about each packet, see *note Remote Protocol::.
+
+ During normal use, you should not have to use any of these commands.
+If you do, that may be a bug in your remote debugging stub, or a bug in
+GDB. You may want to report the problem to the GDB developers.
+
+ For each packet NAME, the command to enable or disable the packet is
+`set remote NAME-packet'. The available settings are:
+
+Command Name Remote Packet Related Features
+`fetch-register' `p' `info registers'
+`set-register' `P' `set'
+`binary-download' `X' `load', `set'
+`read-aux-vector' `qXfer:auxv:read' `info auxv'
+`symbol-lookup' `qSymbol' Detecting
+ multiple threads
+`attach' `vAttach' `attach'
+`verbose-resume' `vCont' Stepping or
+ resuming multiple
+ threads
+`run' `vRun' `run'
+`software-breakpoint'`Z0' `break'
+`hardware-breakpoint'`Z1' `hbreak'
+`write-watchpoint' `Z2' `watch'
+`read-watchpoint' `Z3' `rwatch'
+`access-watchpoint' `Z4' `awatch'
+`target-features' `qXfer:features:read' `set architecture'
+`library-info' `qXfer:libraries:read' `info
+ sharedlibrary'
+`memory-map' `qXfer:memory-map:read' `info mem'
+`read-sdata-object' `qXfer:sdata:read' `print $_sdata'
+`read-spu-object' `qXfer:spu:read' `info spu'
+`write-spu-object' `qXfer:spu:write' `info spu'
+`read-siginfo-object'`qXfer:siginfo:read' `print $_siginfo'
+`write-siginfo-object'`qXfer:siginfo:write' `set $_siginfo'
+`threads' `qXfer:threads:read' `info threads'
+`get-thread-local- `qGetTLSAddr' Displaying
+storage-address' `__thread'
+ variables
+`get-thread-information-block-address'`qGetTIBAddr' Display
+ MS-Windows Thread
+ Information Block.
+`search-memory' `qSearch:memory' `find'
+`supported-packets' `qSupported' Remote
+ communications
+ parameters
+`pass-signals' `QPassSignals' `handle SIGNAL'
+`hostio-close-packet'`vFile:close' `remote get',
+ `remote put'
+`hostio-open-packet' `vFile:open' `remote get',
+ `remote put'
+`hostio-pread-packet'`vFile:pread' `remote get',
+ `remote put'
+`hostio-pwrite-packet'`vFile:pwrite' `remote get',
+ `remote put'
+`hostio-unlink-packet'`vFile:unlink' `remote delete'
+`noack-packet' `QStartNoAckMode' Packet
+ acknowledgment
+`osdata' `qXfer:osdata:read' `info os'
+`query-attached' `qAttached' Querying remote
+ process attach
+ state.
+`traceframe-info' `qXfer:traceframe-info:read'Traceframe info
+
+
+File: gdb.info, Node: Remote Stub, Prev: Remote Configuration, Up: Remote Debugging
+
+20.5 Implementing a Remote Stub
+===============================
+
+The stub files provided with GDB implement the target side of the
+communication protocol, and the GDB side is implemented in the GDB
+source file `remote.c'. Normally, you can simply allow these
+subroutines to communicate, and ignore the details. (If you're
+implementing your own stub file, you can still ignore the details: start
+with one of the existing stub files. `sparc-stub.c' is the best
+organized, and therefore the easiest to read.)
+
+ To debug a program running on another machine (the debugging
+"target" machine), you must first arrange for all the usual
+prerequisites for the program to run by itself. For example, for a C
+program, you need:
+
+ 1. A startup routine to set up the C runtime environment; these
+ usually have a name like `crt0'. The startup routine may be
+ supplied by your hardware supplier, or you may have to write your
+ own.
+
+ 2. A C subroutine library to support your program's subroutine calls,
+ notably managing input and output.
+
+ 3. A way of getting your program to the other machine--for example, a
+ download program. These are often supplied by the hardware
+ manufacturer, but you may have to write your own from hardware
+ documentation.
+
+ The next step is to arrange for your program to use a serial port to
+communicate with the machine where GDB is running (the "host" machine).
+In general terms, the scheme looks like this:
+
+_On the host,_
+ GDB already understands how to use this protocol; when everything
+ else is set up, you can simply use the `target remote' command
+ (*note Specifying a Debugging Target: Targets.).
+
+_On the target,_
+ you must link with your program a few special-purpose subroutines
+ that implement the GDB remote serial protocol. The file
+ containing these subroutines is called a "debugging stub".
+
+ On certain remote targets, you can use an auxiliary program
+ `gdbserver' instead of linking a stub into your program. *Note
+ Using the `gdbserver' Program: Server, for details.
+
+ The debugging stub is specific to the architecture of the remote
+machine; for example, use `sparc-stub.c' to debug programs on SPARC
+boards.
+
+ These working remote stubs are distributed with GDB:
+
+`i386-stub.c'
+ For Intel 386 and compatible architectures.
+
+`m68k-stub.c'
+ For Motorola 680x0 architectures.
+
+`sh-stub.c'
+ For Renesas SH architectures.
+
+`sparc-stub.c'
+ For SPARC architectures.
+
+`sparcl-stub.c'
+ For Fujitsu SPARCLITE architectures.
+
+
+ The `README' file in the GDB distribution may list other recently
+added stubs.
+
+* Menu:
+
+* Stub Contents:: What the stub can do for you
+* Bootstrapping:: What you must do for the stub
+* Debug Session:: Putting it all together
+
+
+File: gdb.info, Node: Stub Contents, Next: Bootstrapping, Up: Remote Stub
+
+20.5.1 What the Stub Can Do for You
+-----------------------------------
+
+The debugging stub for your architecture supplies these three
+subroutines:
+
+`set_debug_traps'
+ This routine arranges for `handle_exception' to run when your
+ program stops. You must call this subroutine explicitly near the
+ beginning of your program.
+
+`handle_exception'
+ This is the central workhorse, but your program never calls it
+ explicitly--the setup code arranges for `handle_exception' to run
+ when a trap is triggered.
+
+ `handle_exception' takes control when your program stops during
+ execution (for example, on a breakpoint), and mediates
+ communications with GDB on the host machine. This is where the
+ communications protocol is implemented; `handle_exception' acts as
+ the GDB representative on the target machine. It begins by
+ sending summary information on the state of your program, then
+ continues to execute, retrieving and transmitting any information
+ GDB needs, until you execute a GDB command that makes your program
+ resume; at that point, `handle_exception' returns control to your
+ own code on the target machine.
+
+`breakpoint'
+ Use this auxiliary subroutine to make your program contain a
+ breakpoint. Depending on the particular situation, this may be
+ the only way for GDB to get control. For instance, if your target
+ machine has some sort of interrupt button, you won't need to call
+ this; pressing the interrupt button transfers control to
+ `handle_exception'--in effect, to GDB. On some machines, simply
+ receiving characters on the serial port may also trigger a trap;
+ again, in that situation, you don't need to call `breakpoint' from
+ your own program--simply running `target remote' from the host GDB
+ session gets control.
+
+ Call `breakpoint' if none of these is true, or if you simply want
+ to make certain your program stops at a predetermined point for the
+ start of your debugging session.
+
+
+File: gdb.info, Node: Bootstrapping, Next: Debug Session, Prev: Stub Contents, Up: Remote Stub
+
+20.5.2 What You Must Do for the Stub
+------------------------------------
+
+The debugging stubs that come with GDB are set up for a particular chip
+architecture, but they have no information about the rest of your
+debugging target machine.
+
+ First of all you need to tell the stub how to communicate with the
+serial port.
+
+`int getDebugChar()'
+ Write this subroutine to read a single character from the serial
+ port. It may be identical to `getchar' for your target system; a
+ different name is used to allow you to distinguish the two if you
+ wish.
+
+`void putDebugChar(int)'
+ Write this subroutine to write a single character to the serial
+ port. It may be identical to `putchar' for your target system; a
+ different name is used to allow you to distinguish the two if you
+ wish.
+
+ If you want GDB to be able to stop your program while it is running,
+you need to use an interrupt-driven serial driver, and arrange for it
+to stop when it receives a `^C' (`\003', the control-C character).
+That is the character which GDB uses to tell the remote system to stop.
+
+ Getting the debugging target to return the proper status to GDB
+probably requires changes to the standard stub; one quick and dirty way
+is to just execute a breakpoint instruction (the "dirty" part is that
+GDB reports a `SIGTRAP' instead of a `SIGINT').
+
+ Other routines you need to supply are:
+
+`void exceptionHandler (int EXCEPTION_NUMBER, void *EXCEPTION_ADDRESS)'
+ Write this function to install EXCEPTION_ADDRESS in the exception
+ handling tables. You need to do this because the stub does not
+ have any way of knowing what the exception handling tables on your
+ target system are like (for example, the processor's table might
+ be in ROM, containing entries which point to a table in RAM).
+ EXCEPTION_NUMBER is the exception number which should be changed;
+ its meaning is architecture-dependent (for example, different
+ numbers might represent divide by zero, misaligned access, etc).
+ When this exception occurs, control should be transferred directly
+ to EXCEPTION_ADDRESS, and the processor state (stack, registers,
+ and so on) should be just as it is when a processor exception
+ occurs. So if you want to use a jump instruction to reach
+ EXCEPTION_ADDRESS, it should be a simple jump, not a jump to
+ subroutine.
+
+ For the 386, EXCEPTION_ADDRESS should be installed as an interrupt
+ gate so that interrupts are masked while the handler runs. The
+ gate should be at privilege level 0 (the most privileged level).
+ The SPARC and 68k stubs are able to mask interrupts themselves
+ without help from `exceptionHandler'.
+
+`void flush_i_cache()'
+ On SPARC and SPARCLITE only, write this subroutine to flush the
+ instruction cache, if any, on your target machine. If there is no
+ instruction cache, this subroutine may be a no-op.
+
+ On target machines that have instruction caches, GDB requires this
+ function to make certain that the state of your program is stable.
+
+You must also make sure this library routine is available:
+
+`void *memset(void *, int, int)'
+ This is the standard library function `memset' that sets an area of
+ memory to a known value. If you have one of the free versions of
+ `libc.a', `memset' can be found there; otherwise, you must either
+ obtain it from your hardware manufacturer, or write your own.
+
+ If you do not use the GNU C compiler, you may need other standard
+library subroutines as well; this varies from one stub to another, but
+in general the stubs are likely to use any of the common library
+subroutines which `GCC' generates as inline code.
+
+
+File: gdb.info, Node: Debug Session, Prev: Bootstrapping, Up: Remote Stub
+
+20.5.3 Putting it All Together
+------------------------------
+
+In summary, when your program is ready to debug, you must follow these
+steps.
+
+ 1. Make sure you have defined the supporting low-level routines
+ (*note What You Must Do for the Stub: Bootstrapping.):
+ `getDebugChar', `putDebugChar',
+ `flush_i_cache', `memset', `exceptionHandler'.
+
+ 2. Insert these lines near the top of your program:
+
+ set_debug_traps();
+ breakpoint();
+
+ 3. For the 680x0 stub only, you need to provide a variable called
+ `exceptionHook'. Normally you just use:
+
+ void (*exceptionHook)() = 0;
+
+ but if before calling `set_debug_traps', you set it to point to a
+ function in your program, that function is called when `GDB'
+ continues after stopping on a trap (for example, bus error). The
+ function indicated by `exceptionHook' is called with one
+ parameter: an `int' which is the exception number.
+
+ 4. Compile and link together: your program, the GDB debugging stub for
+ your target architecture, and the supporting subroutines.
+
+ 5. Make sure you have a serial connection between your target machine
+ and the GDB host, and identify the serial port on the host.
+
+ 6. Download your program to your target machine (or get it there by
+ whatever means the manufacturer provides), and start it.
+
+ 7. Start GDB on the host, and connect to the target (*note Connecting
+ to a Remote Target: Connecting.).
+
+
+
+File: gdb.info, Node: Configurations, Next: Controlling GDB, Prev: Remote Debugging, Up: Top
+
+21 Configuration-Specific Information
+*************************************
+
+While nearly all GDB commands are available for all native and cross
+versions of the debugger, there are some exceptions. This chapter
+describes things that are only available in certain configurations.
+
+ There are three major categories of configurations: native
+configurations, where the host and target are the same, embedded
+operating system configurations, which are usually the same for several
+different processor architectures, and bare embedded processors, which
+are quite different from each other.
+
+* Menu:
+
+* Native::
+* Embedded OS::
+* Embedded Processors::
+* Architectures::
+
+
+File: gdb.info, Node: Native, Next: Embedded OS, Up: Configurations
+
+21.1 Native
+===========
+
+This section describes details specific to particular native
+configurations.
+
+* Menu:
+
+* HP-UX:: HP-UX
+* BSD libkvm Interface:: Debugging BSD kernel memory images
+* SVR4 Process Information:: SVR4 process information
+* DJGPP Native:: Features specific to the DJGPP port
+* Cygwin Native:: Features specific to the Cygwin port
+* Hurd Native:: Features specific to GNU Hurd
+* Neutrino:: Features specific to QNX Neutrino
+* Darwin:: Features specific to Darwin
+
+
+File: gdb.info, Node: HP-UX, Next: BSD libkvm Interface, Up: Native
+
+21.1.1 HP-UX
+------------
+
+On HP-UX systems, if you refer to a function or variable name that
+begins with a dollar sign, GDB searches for a user or system name
+first, before it searches for a convenience variable.
+
+
+File: gdb.info, Node: BSD libkvm Interface, Next: SVR4 Process Information, Prev: HP-UX, Up: Native
+
+21.1.2 BSD libkvm Interface
+---------------------------
+
+BSD-derived systems (FreeBSD/NetBSD/OpenBSD) have a kernel memory
+interface that provides a uniform interface for accessing kernel virtual
+memory images, including live systems and crash dumps. GDB uses this
+interface to allow you to debug live kernels and kernel crash dumps on
+many native BSD configurations. This is implemented as a special `kvm'
+debugging target. For debugging a live system, load the currently
+running kernel into GDB and connect to the `kvm' target:
+
+ (gdb) target kvm
+
+ For debugging crash dumps, provide the file name of the crash dump
+as an argument:
+
+ (gdb) target kvm /var/crash/bsd.0
+
+ Once connected to the `kvm' target, the following commands are
+available:
+
+`kvm pcb'
+ Set current context from the "Process Control Block" (PCB) address.
+
+`kvm proc'
+ Set current context from proc address. This command isn't
+ available on modern FreeBSD systems.
+
+
+File: gdb.info, Node: SVR4 Process Information, Next: DJGPP Native, Prev: BSD libkvm Interface, Up: Native
+
+21.1.3 SVR4 Process Information
+-------------------------------
+
+Many versions of SVR4 and compatible systems provide a facility called
+`/proc' that can be used to examine the image of a running process
+using file-system subroutines. If GDB is configured for an operating
+system with this facility, the command `info proc' is available to
+report information about the process running your program, or about any
+process running on your system. `info proc' works only on SVR4 systems
+that include the `procfs' code. This includes, as of this writing,
+GNU/Linux, OSF/1 (Digital Unix), Solaris, Irix, and Unixware, but not
+HP-UX, for example.
+
+`info proc'
+`info proc PROCESS-ID'
+ Summarize available information about any running process. If a
+ process ID is specified by PROCESS-ID, display information about
+ that process; otherwise display information about the program being
+ debugged. The summary includes the debugged process ID, the
+ command line used to invoke it, its current working directory, and
+ its executable file's absolute file name.
+
+ On some systems, PROCESS-ID can be of the form `[PID]/TID' which
+ specifies a certain thread ID within a process. If the optional
+ PID part is missing, it means a thread from the process being
+ debugged (the leading `/' still needs to be present, or else GDB
+ will interpret the number as a process ID rather than a thread ID).
+
+`info proc mappings'
+ Report the memory address space ranges accessible in the program,
+ with information on whether the process has read, write, or
+ execute access rights to each range. On GNU/Linux systems, each
+ memory range includes the object file which is mapped to that
+ range, instead of the memory access rights to that range.
+
+`info proc stat'
+`info proc status'
+ These subcommands are specific to GNU/Linux systems. They show
+ the process-related information, including the user ID and group
+ ID; how many threads are there in the process; its virtual memory
+ usage; the signals that are pending, blocked, and ignored; its
+ TTY; its consumption of system and user time; its stack size; its
+ `nice' value; etc. For more information, see the `proc' man page
+ (type `man 5 proc' from your shell prompt).
+
+`info proc all'
+ Show all the information about the process described under all of
+ the above `info proc' subcommands.
+
+`set procfs-trace'
+ This command enables and disables tracing of `procfs' API calls.
+
+`show procfs-trace'
+ Show the current state of `procfs' API call tracing.
+
+`set procfs-file FILE'
+ Tell GDB to write `procfs' API trace to the named FILE. GDB
+ appends the trace info to the previous contents of the file. The
+ default is to display the trace on the standard output.
+
+`show procfs-file'
+ Show the file to which `procfs' API trace is written.
+
+`proc-trace-entry'
+`proc-trace-exit'
+`proc-untrace-entry'
+`proc-untrace-exit'
+ These commands enable and disable tracing of entries into and exits
+ from the `syscall' interface.
+
+`info pidlist'
+ For QNX Neutrino only, this command displays the list of all the
+ processes and all the threads within each process.
+
+`info meminfo'
+ For QNX Neutrino only, this command displays the list of all
+ mapinfos.
+
+
+File: gdb.info, Node: DJGPP Native, Next: Cygwin Native, Prev: SVR4 Process Information, Up: Native
+
+21.1.4 Features for Debugging DJGPP Programs
+--------------------------------------------
+
+DJGPP is a port of the GNU development tools to MS-DOS and MS-Windows.
+DJGPP programs are 32-bit protected-mode programs that use the "DPMI"
+(DOS Protected-Mode Interface) API to run on top of real-mode DOS
+systems and their emulations.
+
+ GDB supports native debugging of DJGPP programs, and defines a few
+commands specific to the DJGPP port. This subsection describes those
+commands.
+
+`info dos'
+ This is a prefix of DJGPP-specific commands which print
+ information about the target system and important OS structures.
+
+`info dos sysinfo'
+ This command displays assorted information about the underlying
+ platform: the CPU type and features, the OS version and flavor, the
+ DPMI version, and the available conventional and DPMI memory.
+
+`info dos gdt'
+`info dos ldt'
+`info dos idt'
+ These 3 commands display entries from, respectively, Global, Local,
+ and Interrupt Descriptor Tables (GDT, LDT, and IDT). The
+ descriptor tables are data structures which store a descriptor for
+ each segment that is currently in use. The segment's selector is
+ an index into a descriptor table; the table entry for that index
+ holds the descriptor's base address and limit, and its attributes
+ and access rights.
+
+ A typical DJGPP program uses 3 segments: a code segment, a data
+ segment (used for both data and the stack), and a DOS segment
+ (which allows access to DOS/BIOS data structures and absolute
+ addresses in conventional memory). However, the DPMI host will
+ usually define additional segments in order to support the DPMI
+ environment.
+
+ These commands allow to display entries from the descriptor tables.
+ Without an argument, all entries from the specified table are
+ displayed. An argument, which should be an integer expression,
+ means display a single entry whose index is given by the argument.
+ For example, here's a convenient way to display information about
+ the debugged program's data segment:
+
+ `(gdb) info dos ldt $ds'
+ `0x13f: base=0x11970000 limit=0x0009ffff 32-Bit Data (Read/Write, Exp-up)'
+
+
+ This comes in handy when you want to see whether a pointer is
+ outside the data segment's limit (i.e. "garbled").
+
+`info dos pde'
+`info dos pte'
+ These two commands display entries from, respectively, the Page
+ Directory and the Page Tables. Page Directories and Page Tables
+ are data structures which control how virtual memory addresses are
+ mapped into physical addresses. A Page Table includes an entry
+ for every page of memory that is mapped into the program's address
+ space; there may be several Page Tables, each one holding up to
+ 4096 entries. A Page Directory has up to 4096 entries, one each
+ for every Page Table that is currently in use.
+
+ Without an argument, `info dos pde' displays the entire Page
+ Directory, and `info dos pte' displays all the entries in all of
+ the Page Tables. An argument, an integer expression, given to the
+ `info dos pde' command means display only that entry from the Page
+ Directory table. An argument given to the `info dos pte' command
+ means display entries from a single Page Table, the one pointed to
+ by the specified entry in the Page Directory.
+
+ These commands are useful when your program uses "DMA" (Direct
+ Memory Access), which needs physical addresses to program the DMA
+ controller.
+
+ These commands are supported only with some DPMI servers.
+
+`info dos address-pte ADDR'
+ This command displays the Page Table entry for a specified linear
+ address. The argument ADDR is a linear address which should
+ already have the appropriate segment's base address added to it,
+ because this command accepts addresses which may belong to _any_
+ segment. For example, here's how to display the Page Table entry
+ for the page where a variable `i' is stored:
+
+ `(gdb) info dos address-pte __djgpp_base_address + (char *)&i'
+ `Page Table entry for address 0x11a00d30:'
+ `Base=0x02698000 Dirty Acc. Not-Cached Write-Back Usr Read-Write +0xd30'
+
+
+ This says that `i' is stored at offset `0xd30' from the page whose
+ physical base address is `0x02698000', and shows all the
+ attributes of that page.
+
+ Note that you must cast the addresses of variables to a `char *',
+ since otherwise the value of `__djgpp_base_address', the base
+ address of all variables and functions in a DJGPP program, will be
+ added using the rules of C pointer arithmetics: if `i' is declared
+ an `int', GDB will add 4 times the value of `__djgpp_base_address'
+ to the address of `i'.
+
+ Here's another example, it displays the Page Table entry for the
+ transfer buffer:
+
+ `(gdb) info dos address-pte *((unsigned *)&_go32_info_block + 3)'
+ `Page Table entry for address 0x29110:'
+ `Base=0x00029000 Dirty Acc. Not-Cached Write-Back Usr Read-Write +0x110'
+
+
+ (The `+ 3' offset is because the transfer buffer's address is the
+ 3rd member of the `_go32_info_block' structure.) The output
+ clearly shows that this DPMI server maps the addresses in
+ conventional memory 1:1, i.e. the physical (`0x00029000' +
+ `0x110') and linear (`0x29110') addresses are identical.
+
+ This command is supported only with some DPMI servers.
+
+ In addition to native debugging, the DJGPP port supports remote
+debugging via a serial data link. The following commands are specific
+to remote serial debugging in the DJGPP port of GDB.
+
+`set com1base ADDR'
+ This command sets the base I/O port address of the `COM1' serial
+ port.
+
+`set com1irq IRQ'
+ This command sets the "Interrupt Request" (`IRQ') line to use for
+ the `COM1' serial port.
+
+ There are similar commands `set com2base', `set com3irq', etc. for
+ setting the port address and the `IRQ' lines for the other 3 COM
+ ports.
+
+ The related commands `show com1base', `show com1irq' etc. display
+ the current settings of the base address and the `IRQ' lines used
+ by the COM ports.
+
+`info serial'
+ This command prints the status of the 4 DOS serial ports. For each
+ port, it prints whether it's active or not, its I/O base address
+ and IRQ number, whether it uses a 16550-style FIFO, its baudrate,
+ and the counts of various errors encountered so far.
+
+
+File: gdb.info, Node: Cygwin Native, Next: Hurd Native, Prev: DJGPP Native, Up: Native
+
+21.1.5 Features for Debugging MS Windows PE Executables
+-------------------------------------------------------
+
+GDB supports native debugging of MS Windows programs, including DLLs
+with and without symbolic debugging information.
+
+ MS-Windows programs that call `SetConsoleMode' to switch off the
+special meaning of the `Ctrl-C' keystroke cannot be interrupted by
+typing `C-c'. For this reason, GDB on MS-Windows supports `C-<BREAK>'
+as an alternative interrupt key sequence, which can be used to
+interrupt the debuggee even if it ignores `C-c'.
+
+ There are various additional Cygwin-specific commands, described in
+this section. Working with DLLs that have no debugging symbols is
+described in *note Non-debug DLL Symbols::.
+
+`info w32'
+ This is a prefix of MS Windows-specific commands which print
+ information about the target system and important OS structures.
+
+`info w32 selector'
+ This command displays information returned by the Win32 API
+ `GetThreadSelectorEntry' function. It takes an optional argument
+ that is evaluated to a long value to give the information about
+ this given selector. Without argument, this command displays
+ information about the six segment registers.
+
+`info w32 thread-information-block'
+ This command displays thread specific information stored in the
+ Thread Information Block (readable on the X86 CPU family using
+ `$fs' selector for 32-bit programs and `$gs' for 64-bit programs).
+
+`info dll'
+ This is a Cygwin-specific alias of `info shared'.
+
+`dll-symbols'
+ This command loads symbols from a dll similarly to add-sym command
+ but without the need to specify a base address.
+
+`set cygwin-exceptions MODE'
+ If MODE is `on', GDB will break on exceptions that happen inside
+ the Cygwin DLL. If MODE is `off', GDB will delay recognition of
+ exceptions, and may ignore some exceptions which seem to be caused
+ by internal Cygwin DLL "bookkeeping". This option is meant
+ primarily for debugging the Cygwin DLL itself; the default value
+ is `off' to avoid annoying GDB users with false `SIGSEGV' signals.
+
+`show cygwin-exceptions'
+ Displays whether GDB will break on exceptions that happen inside
+ the Cygwin DLL itself.
+
+`set new-console MODE'
+ If MODE is `on' the debuggee will be started in a new console on
+ next start. If MODE is `off', the debuggee will be started in the
+ same console as the debugger.
+
+`show new-console'
+ Displays whether a new console is used when the debuggee is
+ started.
+
+`set new-group MODE'
+ This boolean value controls whether the debuggee should start a
+ new group or stay in the same group as the debugger. This affects
+ the way the Windows OS handles `Ctrl-C'.
+
+`show new-group'
+ Displays current value of new-group boolean.
+
+`set debugevents'
+ This boolean value adds debug output concerning kernel events
+ related to the debuggee seen by the debugger. This includes
+ events that signal thread and process creation and exit, DLL
+ loading and unloading, console interrupts, and debugging messages
+ produced by the Windows `OutputDebugString' API call.
+
+`set debugexec'
+ This boolean value adds debug output concerning execute events
+ (such as resume thread) seen by the debugger.
+
+`set debugexceptions'
+ This boolean value adds debug output concerning exceptions in the
+ debuggee seen by the debugger.
+
+`set debugmemory'
+ This boolean value adds debug output concerning debuggee memory
+ reads and writes by the debugger.
+
+`set shell'
+ This boolean values specifies whether the debuggee is called via a
+ shell or directly (default value is on).
+
+`show shell'
+ Displays if the debuggee will be started with a shell.
+
+
+* Menu:
+
+* Non-debug DLL Symbols:: Support for DLLs without debugging symbols
+
+
+File: gdb.info, Node: Non-debug DLL Symbols, Up: Cygwin Native
+
+21.1.5.1 Support for DLLs without Debugging Symbols
+...................................................
+
+Very often on windows, some of the DLLs that your program relies on do
+not include symbolic debugging information (for example,
+`kernel32.dll'). When GDB doesn't recognize any debugging symbols in a
+DLL, it relies on the minimal amount of symbolic information contained
+in the DLL's export table. This section describes working with such
+symbols, known internally to GDB as "minimal symbols".
+
+ Note that before the debugged program has started execution, no DLLs
+will have been loaded. The easiest way around this problem is simply to
+start the program -- either by setting a breakpoint or letting the
+program run once to completion. It is also possible to force GDB to
+load a particular DLL before starting the executable -- see the shared
+library information in *note Files::, or the `dll-symbols' command in
+*note Cygwin Native::. Currently, explicitly loading symbols from a
+DLL with no debugging information will cause the symbol names to be
+duplicated in GDB's lookup table, which may adversely affect symbol
+lookup performance.
+
+21.1.5.2 DLL Name Prefixes
+..........................
+
+In keeping with the naming conventions used by the Microsoft debugging
+tools, DLL export symbols are made available with a prefix based on the
+DLL name, for instance `KERNEL32!CreateFileA'. The plain name is also
+entered into the symbol table, so `CreateFileA' is often sufficient.
+In some cases there will be name clashes within a program (particularly
+if the executable itself includes full debugging symbols) necessitating
+the use of the fully qualified name when referring to the contents of
+the DLL. Use single-quotes around the name to avoid the exclamation
+mark ("!") being interpreted as a language operator.
+
+ Note that the internal name of the DLL may be all upper-case, even
+though the file name of the DLL is lower-case, or vice-versa. Since
+symbols within GDB are _case-sensitive_ this may cause some confusion.
+If in doubt, try the `info functions' and `info variables' commands or
+even `maint print msymbols' (*note Symbols::). Here's an example:
+
+ (gdb) info function CreateFileA
+ All functions matching regular expression "CreateFileA":
+
+ Non-debugging symbols:
+ 0x77e885f4 CreateFileA
+ 0x77e885f4 KERNEL32!CreateFileA
+
+ (gdb) info function !
+ All functions matching regular expression "!":
+
+ Non-debugging symbols:
+ 0x6100114c cygwin1!__assert
+ 0x61004034 cygwin1!_dll_crt0@0
+ 0x61004240 cygwin1!dll_crt0(per_process *)
+ [etc...]
+
+21.1.5.3 Working with Minimal Symbols
+.....................................
+
+Symbols extracted from a DLL's export table do not contain very much
+type information. All that GDB can do is guess whether a symbol refers
+to a function or variable depending on the linker section that contains
+the symbol. Also note that the actual contents of the memory contained
+in a DLL are not available unless the program is running. This means
+that you cannot examine the contents of a variable or disassemble a
+function within a DLL without a running program.
+
+ Variables are generally treated as pointers and dereferenced
+automatically. For this reason, it is often necessary to prefix a
+variable name with the address-of operator ("&") and provide explicit
+type information in the command. Here's an example of the type of
+problem:
+
+ (gdb) print 'cygwin1!__argv'
+ $1 = 268572168
+
+ (gdb) x 'cygwin1!__argv'
+ 0x10021610: "\230y\""
+
+ And two possible solutions:
+
+ (gdb) print ((char **)'cygwin1!__argv')[0]
+ $2 = 0x22fd98 "/cygdrive/c/mydirectory/myprogram"
+
+ (gdb) x/2x &'cygwin1!__argv'
+ 0x610c0aa8 <cygwin1!__argv>: 0x10021608 0x00000000
+ (gdb) x/x 0x10021608
+ 0x10021608: 0x0022fd98
+ (gdb) x/s 0x0022fd98
+ 0x22fd98: "/cygdrive/c/mydirectory/myprogram"
+
+ Setting a break point within a DLL is possible even before the
+program starts execution. However, under these circumstances, GDB can't
+examine the initial instructions of the function in order to skip the
+function's frame set-up code. You can work around this by using "*&" to
+set the breakpoint at a raw memory address:
+
+ (gdb) break *&'python22!PyOS_Readline'
+ Breakpoint 1 at 0x1e04eff0
+
+ The author of these extensions is not entirely convinced that
+setting a break point within a shared DLL like `kernel32.dll' is
+completely safe.
+
+
+File: gdb.info, Node: Hurd Native, Next: Neutrino, Prev: Cygwin Native, Up: Native
+
+21.1.6 Commands Specific to GNU Hurd Systems
+--------------------------------------------
+
+This subsection describes GDB commands specific to the GNU Hurd native
+debugging.
+
+`set signals'
+`set sigs'
+ This command toggles the state of inferior signal interception by
+ GDB. Mach exceptions, such as breakpoint traps, are not affected
+ by this command. `sigs' is a shorthand alias for `signals'.
+
+`show signals'
+`show sigs'
+ Show the current state of intercepting inferior's signals.
+
+`set signal-thread'
+`set sigthread'
+ This command tells GDB which thread is the `libc' signal thread.
+ That thread is run when a signal is delivered to a running
+ process. `set sigthread' is the shorthand alias of `set
+ signal-thread'.
+
+`show signal-thread'
+`show sigthread'
+ These two commands show which thread will run when the inferior is
+ delivered a signal.
+
+`set stopped'
+ This commands tells GDB that the inferior process is stopped, as
+ with the `SIGSTOP' signal. The stopped process can be continued
+ by delivering a signal to it.
+
+`show stopped'
+ This command shows whether GDB thinks the debuggee is stopped.
+
+`set exceptions'
+ Use this command to turn off trapping of exceptions in the
+ inferior. When exception trapping is off, neither breakpoints nor
+ single-stepping will work. To restore the default, set exception
+ trapping on.
+
+`show exceptions'
+ Show the current state of trapping exceptions in the inferior.
+
+`set task pause'
+ This command toggles task suspension when GDB has control.
+ Setting it to on takes effect immediately, and the task is
+ suspended whenever GDB gets control. Setting it to off will take
+ effect the next time the inferior is continued. If this option is
+ set to off, you can use `set thread default pause on' or `set
+ thread pause on' (see below) to pause individual threads.
+
+`show task pause'
+ Show the current state of task suspension.
+
+`set task detach-suspend-count'
+ This command sets the suspend count the task will be left with when
+ GDB detaches from it.
+
+`show task detach-suspend-count'
+ Show the suspend count the task will be left with when detaching.
+
+`set task exception-port'
+`set task excp'
+ This command sets the task exception port to which GDB will
+ forward exceptions. The argument should be the value of the "send
+ rights" of the task. `set task excp' is a shorthand alias.
+
+`set noninvasive'
+ This command switches GDB to a mode that is the least invasive as
+ far as interfering with the inferior is concerned. This is the
+ same as using `set task pause', `set exceptions', and `set
+ signals' to values opposite to the defaults.
+
+`info send-rights'
+`info receive-rights'
+`info port-rights'
+`info port-sets'
+`info dead-names'
+`info ports'
+`info psets'
+ These commands display information about, respectively, send
+ rights, receive rights, port rights, port sets, and dead names of
+ a task. There are also shorthand aliases: `info ports' for `info
+ port-rights' and `info psets' for `info port-sets'.
+
+`set thread pause'
+ This command toggles current thread suspension when GDB has
+ control. Setting it to on takes effect immediately, and the
+ current thread is suspended whenever GDB gets control. Setting it
+ to off will take effect the next time the inferior is continued.
+ Normally, this command has no effect, since when GDB has control,
+ the whole task is suspended. However, if you used `set task pause
+ off' (see above), this command comes in handy to suspend only the
+ current thread.
+
+`show thread pause'
+ This command shows the state of current thread suspension.
+
+`set thread run'
+ This command sets whether the current thread is allowed to run.
+
+`show thread run'
+ Show whether the current thread is allowed to run.
+
+`set thread detach-suspend-count'
+ This command sets the suspend count GDB will leave on a thread
+ when detaching. This number is relative to the suspend count
+ found by GDB when it notices the thread; use `set thread
+ takeover-suspend-count' to force it to an absolute value.
+
+`show thread detach-suspend-count'
+ Show the suspend count GDB will leave on the thread when detaching.
+
+`set thread exception-port'
+`set thread excp'
+ Set the thread exception port to which to forward exceptions. This
+ overrides the port set by `set task exception-port' (see above).
+ `set thread excp' is the shorthand alias.
+
+`set thread takeover-suspend-count'
+ Normally, GDB's thread suspend counts are relative to the value
+ GDB finds when it notices each thread. This command changes the
+ suspend counts to be absolute instead.
+
+`set thread default'
+`show thread default'
+ Each of the above `set thread' commands has a `set thread default'
+ counterpart (e.g., `set thread default pause', `set thread default
+ exception-port', etc.). The `thread default' variety of commands
+ sets the default thread properties for all threads; you can then
+ change the properties of individual threads with the non-default
+ commands.
+
+
+File: gdb.info, Node: Neutrino, Next: Darwin, Prev: Hurd Native, Up: Native
+
+21.1.7 QNX Neutrino
+-------------------
+
+GDB provides the following commands specific to the QNX Neutrino target:
+
+`set debug nto-debug'
+ When set to on, enables debugging messages specific to the QNX
+ Neutrino support.
+
+`show debug nto-debug'
+ Show the current state of QNX Neutrino messages.
+
+
+File: gdb.info, Node: Darwin, Prev: Neutrino, Up: Native
+
+21.1.8 Darwin
+-------------
+
+GDB provides the following commands specific to the Darwin target:
+
+`set debug darwin NUM'
+ When set to a non zero value, enables debugging messages specific
+ to the Darwin support. Higher values produce more verbose output.
+
+`show debug darwin'
+ Show the current state of Darwin messages.
+
+`set debug mach-o NUM'
+ When set to a non zero value, enables debugging messages while GDB
+ is reading Darwin object files. ("Mach-O" is the file format used
+ on Darwin for object and executable files.) Higher values produce
+ more verbose output. This is a command to diagnose problems
+ internal to GDB and should not be needed in normal usage.
+
+`show debug mach-o'
+ Show the current state of Mach-O file messages.
+
+`set mach-exceptions on'
+`set mach-exceptions off'
+ On Darwin, faults are first reported as a Mach exception and are
+ then mapped to a Posix signal. Use this command to turn on
+ trapping of Mach exceptions in the inferior. This might be
+ sometimes useful to better understand the cause of a fault. The
+ default is off.
+
+`show mach-exceptions'
+ Show the current state of exceptions trapping.
+
+
+File: gdb.info, Node: Embedded OS, Next: Embedded Processors, Prev: Native, Up: Configurations
+
+21.2 Embedded Operating Systems
+===============================
+
+This section describes configurations involving the debugging of
+embedded operating systems that are available for several different
+architectures.
+
+* Menu:
+
+* VxWorks:: Using GDB with VxWorks
+
+ GDB includes the ability to debug programs running on various
+real-time operating systems.
+
+
+File: gdb.info, Node: VxWorks, Up: Embedded OS
+
+21.2.1 Using GDB with VxWorks
+-----------------------------
+
+`target vxworks MACHINENAME'
+ A VxWorks system, attached via TCP/IP. The argument MACHINENAME
+ is the target system's machine name or IP address.
+
+
+ On VxWorks, `load' links FILENAME dynamically on the current target
+system as well as adding its symbols in GDB.
+
+ GDB enables developers to spawn and debug tasks running on networked
+VxWorks targets from a Unix host. Already-running tasks spawned from
+the VxWorks shell can also be debugged. GDB uses code that runs on
+both the Unix host and on the VxWorks target. The program `gdb' is
+installed and executed on the Unix host. (It may be installed with the
+name `vxgdb', to distinguish it from a GDB for debugging programs on
+the host itself.)
+
+`VxWorks-timeout ARGS'
+ All VxWorks-based targets now support the option `vxworks-timeout'.
+ This option is set by the user, and ARGS represents the number of
+ seconds GDB waits for responses to rpc's. You might use this if
+ your VxWorks target is a slow software simulator or is on the far
+ side of a thin network line.
+
+ The following information on connecting to VxWorks was current when
+this manual was produced; newer releases of VxWorks may use revised
+procedures.
+
+ To use GDB with VxWorks, you must rebuild your VxWorks kernel to
+include the remote debugging interface routines in the VxWorks library
+`rdb.a'. To do this, define `INCLUDE_RDB' in the VxWorks configuration
+file `configAll.h' and rebuild your VxWorks kernel. The resulting
+kernel contains `rdb.a', and spawns the source debugging task
+`tRdbTask' when VxWorks is booted. For more information on configuring
+and remaking VxWorks, see the manufacturer's manual.
+
+ Once you have included `rdb.a' in your VxWorks system image and set
+your Unix execution search path to find GDB, you are ready to run GDB.
+From your Unix host, run `gdb' (or `vxgdb', depending on your
+installation).
+
+ GDB comes up showing the prompt:
+
+ (vxgdb)
+
+* Menu:
+
+* VxWorks Connection:: Connecting to VxWorks
+* VxWorks Download:: VxWorks download
+* VxWorks Attach:: Running tasks
+
+
+File: gdb.info, Node: VxWorks Connection, Next: VxWorks Download, Up: VxWorks
+
+21.2.1.1 Connecting to VxWorks
+..............................
+
+The GDB command `target' lets you connect to a VxWorks target on the
+network. To connect to a target whose host name is "`tt'", type:
+
+ (vxgdb) target vxworks tt
+
+ GDB displays messages like these:
+
+ Attaching remote machine across net...
+ Connected to tt.
+
+ GDB then attempts to read the symbol tables of any object modules
+loaded into the VxWorks target since it was last booted. GDB locates
+these files by searching the directories listed in the command search
+path (*note Your Program's Environment: Environment.); if it fails to
+find an object file, it displays a message such as:
+
+ prog.o: No such file or directory.
+
+ When this happens, add the appropriate directory to the search path
+with the GDB command `path', and execute the `target' command again.
+
+
+File: gdb.info, Node: VxWorks Download, Next: VxWorks Attach, Prev: VxWorks Connection, Up: VxWorks
+
+21.2.1.2 VxWorks Download
+.........................
+
+If you have connected to the VxWorks target and you want to debug an
+object that has not yet been loaded, you can use the GDB `load' command
+to download a file from Unix to VxWorks incrementally. The object file
+given as an argument to the `load' command is actually opened twice:
+first by the VxWorks target in order to download the code, then by GDB
+in order to read the symbol table. This can lead to problems if the
+current working directories on the two systems differ. If both systems
+have NFS mounted the same filesystems, you can avoid these problems by
+using absolute paths. Otherwise, it is simplest to set the working
+directory on both systems to the directory in which the object file
+resides, and then to reference the file by its name, without any path.
+For instance, a program `prog.o' may reside in `VXPATH/vw/demo/rdb' in
+VxWorks and in `HOSTPATH/vw/demo/rdb' on the host. To load this
+program, type this on VxWorks:
+
+ -> cd "VXPATH/vw/demo/rdb"
+
+Then, in GDB, type:
+
+ (vxgdb) cd HOSTPATH/vw/demo/rdb
+ (vxgdb) load prog.o
+
+ GDB displays a response similar to this:
+
+ Reading symbol data from wherever/vw/demo/rdb/prog.o... done.
+
+ You can also use the `load' command to reload an object module after
+editing and recompiling the corresponding source file. Note that this
+makes GDB delete all currently-defined breakpoints, auto-displays, and
+convenience variables, and to clear the value history. (This is
+necessary in order to preserve the integrity of debugger's data
+structures that reference the target system's symbol table.)
+
+
+File: gdb.info, Node: VxWorks Attach, Prev: VxWorks Download, Up: VxWorks
+
+21.2.1.3 Running Tasks
+......................
+
+You can also attach to an existing task using the `attach' command as
+follows:
+
+ (vxgdb) attach TASK
+
+where TASK is the VxWorks hexadecimal task ID. The task can be running
+or suspended when you attach to it. Running tasks are suspended at the
+time of attachment.
+
+
+File: gdb.info, Node: Embedded Processors, Next: Architectures, Prev: Embedded OS, Up: Configurations
+
+21.3 Embedded Processors
+========================
+
+This section goes into details specific to particular embedded
+configurations.
+
+ Whenever a specific embedded processor has a simulator, GDB allows
+to send an arbitrary command to the simulator.
+
+`sim COMMAND'
+ Send an arbitrary COMMAND string to the simulator. Consult the
+ documentation for the specific simulator in use for information
+ about acceptable commands.
+
+* Menu:
+
+* ARM:: ARM RDI
+* M32R/D:: Renesas M32R/D
+* M68K:: Motorola M68K
+* MicroBlaze:: Xilinx MicroBlaze
+* MIPS Embedded:: MIPS Embedded
+* OpenRISC 1000:: OpenRisc 1000
+* PA:: HP PA Embedded
+* PowerPC Embedded:: PowerPC Embedded
+* Sparclet:: Tsqware Sparclet
+* Sparclite:: Fujitsu Sparclite
+* Z8000:: Zilog Z8000
+* AVR:: Atmel AVR
+* CRIS:: CRIS
+* Super-H:: Renesas Super-H
+
+
+File: gdb.info, Node: ARM, Next: M32R/D, Up: Embedded Processors
+
+21.3.1 ARM
+----------
+
+`target rdi DEV'
+ ARM Angel monitor, via RDI library interface to ADP protocol. You
+ may use this target to communicate with both boards running the
+ Angel monitor, or with the EmbeddedICE JTAG debug device.
+
+`target rdp DEV'
+ ARM Demon monitor.
+
+
+ GDB provides the following ARM-specific commands:
+
+`set arm disassembler'
+ This commands selects from a list of disassembly styles. The
+ `"std"' style is the standard style.
+
+`show arm disassembler'
+ Show the current disassembly style.
+
+`set arm apcs32'
+ This command toggles ARM operation mode between 32-bit and 26-bit.
+
+`show arm apcs32'
+ Display the current usage of the ARM 32-bit mode.
+
+`set arm fpu FPUTYPE'
+ This command sets the ARM floating-point unit (FPU) type. The
+ argument FPUTYPE can be one of these:
+
+ `auto'
+ Determine the FPU type by querying the OS ABI.
+
+ `softfpa'
+ Software FPU, with mixed-endian doubles on little-endian ARM
+ processors.
+
+ `fpa'
+ GCC-compiled FPA co-processor.
+
+ `softvfp'
+ Software FPU with pure-endian doubles.
+
+ `vfp'
+ VFP co-processor.
+
+`show arm fpu'
+ Show the current type of the FPU.
+
+`set arm abi'
+ This command forces GDB to use the specified ABI.
+
+`show arm abi'
+ Show the currently used ABI.
+
+`set arm fallback-mode (arm|thumb|auto)'
+ GDB uses the symbol table, when available, to determine whether
+ instructions are ARM or Thumb. This command controls GDB's
+ default behavior when the symbol table is not available. The
+ default is `auto', which causes GDB to use the current execution
+ mode (from the `T' bit in the `CPSR' register).
+
+`show arm fallback-mode'
+ Show the current fallback instruction mode.
+
+`set arm force-mode (arm|thumb|auto)'
+ This command overrides use of the symbol table to determine whether
+ instructions are ARM or Thumb. The default is `auto', which
+ causes GDB to use the symbol table and then the setting of `set
+ arm fallback-mode'.
+
+`show arm force-mode'
+ Show the current forced instruction mode.
+
+`set debug arm'
+ Toggle whether to display ARM-specific debugging messages from the
+ ARM target support subsystem.
+
+`show debug arm'
+ Show whether ARM-specific debugging messages are enabled.
+
+ The following commands are available when an ARM target is debugged
+using the RDI interface:
+
+`rdilogfile [FILE]'
+ Set the filename for the ADP (Angel Debugger Protocol) packet log.
+ With an argument, sets the log file to the specified FILE. With
+ no argument, show the current log file name. The default log file
+ is `rdi.log'.
+
+`rdilogenable [ARG]'
+ Control logging of ADP packets. With an argument of 1 or `"yes"'
+ enables logging, with an argument 0 or `"no"' disables it. With
+ no arguments displays the current setting. When logging is
+ enabled, ADP packets exchanged between GDB and the RDI target
+ device are logged to a file.
+
+`set rdiromatzero'
+ Tell GDB whether the target has ROM at address 0. If on, vector
+ catching is disabled, so that zero address can be used. If off
+ (the default), vector catching is enabled. For this command to
+ take effect, it needs to be invoked prior to the `target rdi'
+ command.
+
+`show rdiromatzero'
+ Show the current setting of ROM at zero address.
+
+`set rdiheartbeat'
+ Enable or disable RDI heartbeat packets. It is not recommended to
+ turn on this option, since it confuses ARM and EPI JTAG interface,
+ as well as the Angel monitor.
+
+`show rdiheartbeat'
+ Show the setting of RDI heartbeat packets.
+
+`target sim [SIMARGS] ...'
+ The GDB ARM simulator accepts the following optional arguments.
+
+ `--swi-support=TYPE'
+ Tell the simulator which SWI interfaces to support. TYPE may
+ be a comma separated list of the following values. The
+ default value is `all'.
+
+ `none'
+
+ `demon'
+
+ `angel'
+
+ `redboot'
+
+ `all'
+
+
+File: gdb.info, Node: M32R/D, Next: M68K, Prev: ARM, Up: Embedded Processors
+
+21.3.2 Renesas M32R/D and M32R/SDI
+----------------------------------
+
+`target m32r DEV'
+ Renesas M32R/D ROM monitor.
+
+`target m32rsdi DEV'
+ Renesas M32R SDI server, connected via parallel port to the board.
+
+ The following GDB commands are specific to the M32R monitor:
+
+`set download-path PATH'
+ Set the default path for finding downloadable SREC files.
+
+`show download-path'
+ Show the default path for downloadable SREC files.
+
+`set board-address ADDR'
+ Set the IP address for the M32R-EVA target board.
+
+`show board-address'
+ Show the current IP address of the target board.
+
+`set server-address ADDR'
+ Set the IP address for the download server, which is the GDB's
+ host machine.
+
+`show server-address'
+ Display the IP address of the download server.
+
+`upload [FILE]'
+ Upload the specified SREC FILE via the monitor's Ethernet upload
+ capability. If no FILE argument is given, the current executable
+ file is uploaded.
+
+`tload [FILE]'
+ Test the `upload' command.
+
+ The following commands are available for M32R/SDI:
+
+`sdireset'
+ This command resets the SDI connection.
+
+`sdistatus'
+ This command shows the SDI connection status.
+
+`debug_chaos'
+ Instructs the remote that M32R/Chaos debugging is to be used.
+
+`use_debug_dma'
+ Instructs the remote to use the DEBUG_DMA method of accessing
+ memory.
+
+`use_mon_code'
+ Instructs the remote to use the MON_CODE method of accessing
+ memory.
+
+`use_ib_break'
+ Instructs the remote to set breakpoints by IB break.
+
+`use_dbt_break'
+ Instructs the remote to set breakpoints by DBT.
+
+
+File: gdb.info, Node: M68K, Next: MicroBlaze, Prev: M32R/D, Up: Embedded Processors
+
+21.3.3 M68k
+-----------
+
+The Motorola m68k configuration includes ColdFire support, and a target
+command for the following ROM monitor.
+
+`target dbug DEV'
+ dBUG ROM monitor for Motorola ColdFire.
+
+
+
+File: gdb.info, Node: MicroBlaze, Next: MIPS Embedded, Prev: M68K, Up: Embedded Processors
+
+21.3.4 MicroBlaze
+-----------------
+
+The MicroBlaze is a soft-core processor supported on various Xilinx
+FPGAs, such as Spartan or Virtex series. Boards with these processors
+usually have JTAG ports which connect to a host system running the
+Xilinx Embedded Development Kit (EDK) or Software Development Kit (SDK).
+This host system is used to download the configuration bitstream to the
+target FPGA. The Xilinx Microprocessor Debugger (XMD) program
+communicates with the target board using the JTAG interface and
+presents a `gdbserver' interface to the board. By default `xmd' uses
+port `1234'. (While it is possible to change this default port, it
+requires the use of undocumented `xmd' commands. Contact Xilinx
+support if you need to do this.)
+
+ Use these GDB commands to connect to the MicroBlaze target processor.
+
+`target remote :1234'
+ Use this command to connect to the target if you are running GDB
+ on the same system as `xmd'.
+
+`target remote XMD-HOST:1234'
+ Use this command to connect to the target if it is connected to
+ `xmd' running on a different system named XMD-HOST.
+
+`load'
+ Use this command to download a program to the MicroBlaze target.
+
+`set debug microblaze N'
+ Enable MicroBlaze-specific debugging messages if non-zero.
+
+`show debug microblaze N'
+ Show MicroBlaze-specific debugging level.
+
+
+File: gdb.info, Node: MIPS Embedded, Next: OpenRISC 1000, Prev: MicroBlaze, Up: Embedded Processors
+
+21.3.5 MIPS Embedded
+--------------------
+
+GDB can use the MIPS remote debugging protocol to talk to a MIPS board
+attached to a serial line. This is available when you configure GDB
+with `--target=mips-idt-ecoff'.
+
+ Use these GDB commands to specify the connection to your target
+board:
+
+`target mips PORT'
+ To run a program on the board, start up `gdb' with the name of
+ your program as the argument. To connect to the board, use the
+ command `target mips PORT', where PORT is the name of the serial
+ port connected to the board. If the program has not already been
+ downloaded to the board, you may use the `load' command to
+ download it. You can then use all the usual GDB commands.
+
+ For example, this sequence connects to the target board through a
+ serial port, and loads and runs a program called PROG through the
+ debugger:
+
+ host$ gdb PROG
+ GDB is free software and ...
+ (gdb) target mips /dev/ttyb
+ (gdb) load PROG
+ (gdb) run
+
+`target mips HOSTNAME:PORTNUMBER'
+ On some GDB host configurations, you can specify a TCP connection
+ (for instance, to a serial line managed by a terminal
+ concentrator) instead of a serial port, using the syntax
+ `HOSTNAME:PORTNUMBER'.
+
+`target pmon PORT'
+ PMON ROM monitor.
+
+`target ddb PORT'
+ NEC's DDB variant of PMON for Vr4300.
+
+`target lsi PORT'
+ LSI variant of PMON.
+
+`target r3900 DEV'
+ Densan DVE-R3900 ROM monitor for Toshiba R3900 Mips.
+
+`target array DEV'
+ Array Tech LSI33K RAID controller board.
+
+
+GDB also supports these special commands for MIPS targets:
+
+`set mipsfpu double'
+`set mipsfpu single'
+`set mipsfpu none'
+`set mipsfpu auto'
+`show mipsfpu'
+ If your target board does not support the MIPS floating point
+ coprocessor, you should use the command `set mipsfpu none' (if you
+ need this, you may wish to put the command in your GDB init file).
+ This tells GDB how to find the return value of functions which
+ return floating point values. It also allows GDB to avoid saving
+ the floating point registers when calling functions on the board.
+ If you are using a floating point coprocessor with only single
+ precision floating point support, as on the R4650 processor, use
+ the command `set mipsfpu single'. The default double precision
+ floating point coprocessor may be selected using `set mipsfpu
+ double'.
+
+ In previous versions the only choices were double precision or no
+ floating point, so `set mipsfpu on' will select double precision
+ and `set mipsfpu off' will select no floating point.
+
+ As usual, you can inquire about the `mipsfpu' variable with `show
+ mipsfpu'.
+
+`set timeout SECONDS'
+`set retransmit-timeout SECONDS'
+`show timeout'
+`show retransmit-timeout'
+ You can control the timeout used while waiting for a packet, in
+ the MIPS remote protocol, with the `set timeout SECONDS' command.
+ The default is 5 seconds. Similarly, you can control the timeout
+ used while waiting for an acknowledgment of a packet with the `set
+ retransmit-timeout SECONDS' command. The default is 3 seconds.
+ You can inspect both values with `show timeout' and `show
+ retransmit-timeout'. (These commands are _only_ available when
+ GDB is configured for `--target=mips-idt-ecoff'.)
+
+ The timeout set by `set timeout' does not apply when GDB is
+ waiting for your program to stop. In that case, GDB waits forever
+ because it has no way of knowing how long the program is going to
+ run before stopping.
+
+`set syn-garbage-limit NUM'
+ Limit the maximum number of characters GDB should ignore when it
+ tries to synchronize with the remote target. The default is 10
+ characters. Setting the limit to -1 means there's no limit.
+
+`show syn-garbage-limit'
+ Show the current limit on the number of characters to ignore when
+ trying to synchronize with the remote system.
+
+`set monitor-prompt PROMPT'
+ Tell GDB to expect the specified PROMPT string from the remote
+ monitor. The default depends on the target:
+ pmon target
+ `PMON'
+
+ ddb target
+ `NEC010'
+
+ lsi target
+ `PMON>'
+
+`show monitor-prompt'
+ Show the current strings GDB expects as the prompt from the remote
+ monitor.
+
+`set monitor-warnings'
+ Enable or disable monitor warnings about hardware breakpoints.
+ This has effect only for the `lsi' target. When on, GDB will
+ display warning messages whose codes are returned by the `lsi'
+ PMON monitor for breakpoint commands.
+
+`show monitor-warnings'
+ Show the current setting of printing monitor warnings.
+
+`pmon COMMAND'
+ This command allows sending an arbitrary COMMAND string to the
+ monitor. The monitor must be in debug mode for this to work.
+
+
+File: gdb.info, Node: OpenRISC 1000, Next: PA, Prev: MIPS Embedded, Up: Embedded Processors
+
+21.3.6 OpenRISC 1000
+--------------------
+
+See OR1k Architecture document (`www.opencores.org') for more
+information about platform and commands.
+
+`target jtag jtag://HOST:PORT'
+ Connects to remote JTAG server. JTAG remote server can be either
+ an or1ksim or JTAG server, connected via parallel port to the
+ board.
+
+ Example: `target jtag jtag://localhost:9999'
+
+`or1ksim COMMAND'
+ If connected to `or1ksim' OpenRISC 1000 Architectural Simulator,
+ proprietary commands can be executed.
+
+`info or1k spr'
+ Displays spr groups.
+
+`info or1k spr GROUP'
+`info or1k spr GROUPNO'
+ Displays register names in selected group.
+
+`info or1k spr GROUP REGISTER'
+`info or1k spr REGISTER'
+`info or1k spr GROUPNO REGISTERNO'
+`info or1k spr REGISTERNO'
+ Shows information about specified spr register.
+
+`spr GROUP REGISTER VALUE'
+`spr REGISTER VALUE'
+`spr GROUPNO REGISTERNO VALUE'
+`spr REGISTERNO VALUE'
+ Writes VALUE to specified spr register.
+
+ Some implementations of OpenRISC 1000 Architecture also have
+hardware trace. It is very similar to GDB trace, except it does not
+interfere with normal program execution and is thus much faster.
+Hardware breakpoints/watchpoint triggers can be set using:
+`$LEA/$LDATA'
+ Load effective address/data
+
+`$SEA/$SDATA'
+ Store effective address/data
+
+`$AEA/$ADATA'
+ Access effective address ($SEA or $LEA) or data ($SDATA/$LDATA)
+
+`$FETCH'
+ Fetch data
+
+ When triggered, it can capture low level data, like: `PC', `LSEA',
+`LDATA', `SDATA', `READSPR', `WRITESPR', `INSTR'.
+
+ `htrace' commands:
+`hwatch CONDITIONAL'
+ Set hardware watchpoint on combination of Load/Store Effective
+ Address(es) or Data. For example:
+
+ `hwatch ($LEA == my_var) && ($LDATA < 50) || ($SEA == my_var) &&
+ ($SDATA >= 50)'
+
+ `hwatch ($LEA == my_var) && ($LDATA < 50) || ($SEA == my_var) &&
+ ($SDATA >= 50)'
+
+`htrace info'
+ Display information about current HW trace configuration.
+
+`htrace trigger CONDITIONAL'
+ Set starting criteria for HW trace.
+
+`htrace qualifier CONDITIONAL'
+ Set acquisition qualifier for HW trace.
+
+`htrace stop CONDITIONAL'
+ Set HW trace stopping criteria.
+
+`htrace record [DATA]*'
+ Selects the data to be recorded, when qualifier is met and HW
+ trace was triggered.
+
+`htrace enable'
+`htrace disable'
+ Enables/disables the HW trace.
+
+`htrace rewind [FILENAME]'
+ Clears currently recorded trace data.
+
+ If filename is specified, new trace file is made and any newly
+ collected data will be written there.
+
+`htrace print [START [LEN]]'
+ Prints trace buffer, using current record configuration.
+
+`htrace mode continuous'
+ Set continuous trace mode.
+
+`htrace mode suspend'
+ Set suspend trace mode.
+
+
+
+File: gdb.info, Node: PowerPC Embedded, Next: Sparclet, Prev: PA, Up: Embedded Processors
+
+21.3.7 PowerPC Embedded
+-----------------------
+
+GDB supports using the DVC (Data Value Compare) register to implement
+in hardware simple hardware watchpoint conditions of the form:
+
+ (gdb) watch ADDRESS|VARIABLE \
+ if ADDRESS|VARIABLE == CONSTANT EXPRESSION
+
+ The DVC register will be automatically used when GDB detects such
+pattern in a condition expression, and the created watchpoint uses one
+debug register (either the `exact-watchpoints' option is on and the
+variable is scalar, or the variable has a length of one byte). This
+feature is available in native GDB running on a Linux kernel version
+2.6.34 or newer.
+
+ When running on PowerPC embedded processors, GDB automatically uses
+ranged hardware watchpoints, unless the `exact-watchpoints' option is
+on, in which case watchpoints using only one debug register are created
+when watching variables of scalar types.
+
+ You can create an artificial array to watch an arbitrary memory
+region using one of the following commands (*note Expressions::):
+
+ (gdb) watch *((char *) ADDRESS)@LENGTH
+ (gdb) watch {char[LENGTH]} ADDRESS
+
+ PowerPC embedded processors support hardware accelerated "ranged
+breakpoints". A ranged breakpoint stops execution of the inferior
+whenever it executes an instruction at any address within the range it
+specifies. To set a ranged breakpoint in GDB, use the `break-range'
+command.
+
+ GDB provides the following PowerPC-specific commands:
+
+`break-range START-LOCATION, END-LOCATION'
+ Set a breakpoint for an address range. START-LOCATION and
+ END-LOCATION can specify a function name, a line number, an offset
+ of lines from the current line or from the start location, or an
+ address of an instruction (see *note Specify Location::, for a
+ list of all the possible ways to specify a LOCATION.) The
+ breakpoint will stop execution of the inferior whenever it
+ executes an instruction at any address within the specified range,
+ (including START-LOCATION and END-LOCATION.)
+
+`set powerpc soft-float'
+`show powerpc soft-float'
+ Force GDB to use (or not use) a software floating point calling
+ convention. By default, GDB selects the calling convention based
+ on the selected architecture and the provided executable file.
+
+`set powerpc vector-abi'
+`show powerpc vector-abi'
+ Force GDB to use the specified calling convention for vector
+ arguments and return values. The valid options are `auto';
+ `generic', to avoid vector registers even if they are present;
+ `altivec', to use AltiVec registers; and `spe' to use SPE
+ registers. By default, GDB selects the calling convention based
+ on the selected architecture and the provided executable file.
+
+`set powerpc exact-watchpoints'
+`show powerpc exact-watchpoints'
+ Allow GDB to use only one debug register when watching a variable
+ of scalar type, thus assuming that the variable is accessed
+ through the address of its first byte.
+
+`target dink32 DEV'
+ DINK32 ROM monitor.
+
+`target ppcbug DEV'
+
+`target ppcbug1 DEV'
+ PPCBUG ROM monitor for PowerPC.
+
+`target sds DEV'
+ SDS monitor, running on a PowerPC board (such as Motorola's ADS).
+
+ The following commands specific to the SDS protocol are supported by
+GDB:
+
+`set sdstimeout NSEC'
+ Set the timeout for SDS protocol reads to be NSEC seconds. The
+ default is 2 seconds.
+
+`show sdstimeout'
+ Show the current value of the SDS timeout.
+
+`sds COMMAND'
+ Send the specified COMMAND string to the SDS monitor.
+
+
+File: gdb.info, Node: PA, Next: PowerPC Embedded, Prev: OpenRISC 1000, Up: Embedded Processors
+
+21.3.8 HP PA Embedded
+---------------------
+
+`target op50n DEV'
+ OP50N monitor, running on an OKI HPPA board.
+
+`target w89k DEV'
+ W89K monitor, running on a Winbond HPPA board.
+
+
+
+File: gdb.info, Node: Sparclet, Next: Sparclite, Prev: PowerPC Embedded, Up: Embedded Processors
+
+21.3.9 Tsqware Sparclet
+-----------------------
+
+GDB enables developers to debug tasks running on Sparclet targets from
+a Unix host. GDB uses code that runs on both the Unix host and on the
+Sparclet target. The program `gdb' is installed and executed on the
+Unix host.
+
+`remotetimeout ARGS'
+ GDB supports the option `remotetimeout'. This option is set by
+ the user, and ARGS represents the number of seconds GDB waits for
+ responses.
+
+ When compiling for debugging, include the options `-g' to get debug
+information and `-Ttext' to relocate the program to where you wish to
+load it on the target. You may also want to add the options `-n' or
+`-N' in order to reduce the size of the sections. Example:
+
+ sparclet-aout-gcc prog.c -Ttext 0x12010000 -g -o prog -N
+
+ You can use `objdump' to verify that the addresses are what you
+intended:
+
+ sparclet-aout-objdump --headers --syms prog
+
+ Once you have set your Unix execution search path to find GDB, you
+are ready to run GDB. From your Unix host, run `gdb' (or
+`sparclet-aout-gdb', depending on your installation).
+
+ GDB comes up showing the prompt:
+
+ (gdbslet)
+
+* Menu:
+
+* Sparclet File:: Setting the file to debug
+* Sparclet Connection:: Connecting to Sparclet
+* Sparclet Download:: Sparclet download
+* Sparclet Execution:: Running and debugging
+
+
+File: gdb.info, Node: Sparclet File, Next: Sparclet Connection, Up: Sparclet
+
+21.3.9.1 Setting File to Debug
+..............................
+
+The GDB command `file' lets you choose with program to debug.
+
+ (gdbslet) file prog
+
+ GDB then attempts to read the symbol table of `prog'. GDB locates
+the file by searching the directories listed in the command search path.
+If the file was compiled with debug information (option `-g'), source
+files will be searched as well. GDB locates the source files by
+searching the directories listed in the directory search path (*note
+Your Program's Environment: Environment.). If it fails to find a file,
+it displays a message such as:
+
+ prog: No such file or directory.
+
+ When this happens, add the appropriate directories to the search
+paths with the GDB commands `path' and `dir', and execute the `target'
+command again.
+
+
+File: gdb.info, Node: Sparclet Connection, Next: Sparclet Download, Prev: Sparclet File, Up: Sparclet
+
+21.3.9.2 Connecting to Sparclet
+...............................
+
+The GDB command `target' lets you connect to a Sparclet target. To
+connect to a target on serial port "`ttya'", type:
+
+ (gdbslet) target sparclet /dev/ttya
+ Remote target sparclet connected to /dev/ttya
+ main () at ../prog.c:3
+
+ GDB displays messages like these:
+
+ Connected to ttya.
+
+
+File: gdb.info, Node: Sparclet Download, Next: Sparclet Execution, Prev: Sparclet Connection, Up: Sparclet
+
+21.3.9.3 Sparclet Download
+..........................
+
+Once connected to the Sparclet target, you can use the GDB `load'
+command to download the file from the host to the target. The file
+name and load offset should be given as arguments to the `load' command.
+Since the file format is aout, the program must be loaded to the
+starting address. You can use `objdump' to find out what this value
+is. The load offset is an offset which is added to the VMA (virtual
+memory address) of each of the file's sections. For instance, if the
+program `prog' was linked to text address 0x1201000, with data at
+0x12010160 and bss at 0x12010170, in GDB, type:
+
+ (gdbslet) load prog 0x12010000
+ Loading section .text, size 0xdb0 vma 0x12010000
+
+ If the code is loaded at a different address then what the program
+was linked to, you may need to use the `section' and `add-symbol-file'
+commands to tell GDB where to map the symbol table.
+
+
+File: gdb.info, Node: Sparclet Execution, Prev: Sparclet Download, Up: Sparclet
+
+21.3.9.4 Running and Debugging
+..............................
+
+You can now begin debugging the task using GDB's execution control
+commands, `b', `step', `run', etc. See the GDB manual for the list of
+commands.
+
+ (gdbslet) b main
+ Breakpoint 1 at 0x12010000: file prog.c, line 3.
+ (gdbslet) run
+ Starting program: prog
+ Breakpoint 1, main (argc=1, argv=0xeffff21c) at prog.c:3
+ 3 char *symarg = 0;
+ (gdbslet) step
+ 4 char *execarg = "hello!";
+ (gdbslet)
+
+
+File: gdb.info, Node: Sparclite, Next: Z8000, Prev: Sparclet, Up: Embedded Processors
+
+21.3.10 Fujitsu Sparclite
+-------------------------
+
+`target sparclite DEV'
+ Fujitsu sparclite boards, used only for the purpose of loading.
+ You must use an additional command to debug the program. For
+ example: target remote DEV using GDB standard remote protocol.
+
+
+
+File: gdb.info, Node: Z8000, Next: AVR, Prev: Sparclite, Up: Embedded Processors
+
+21.3.11 Zilog Z8000
+-------------------
+
+When configured for debugging Zilog Z8000 targets, GDB includes a Z8000
+simulator.
+
+ For the Z8000 family, `target sim' simulates either the Z8002 (the
+unsegmented variant of the Z8000 architecture) or the Z8001 (the
+segmented variant). The simulator recognizes which architecture is
+appropriate by inspecting the object code.
+
+`target sim ARGS'
+ Debug programs on a simulated CPU. If the simulator supports setup
+ options, specify them via ARGS.
+
+After specifying this target, you can debug programs for the simulated
+CPU in the same style as programs for your host computer; use the
+`file' command to load a new program image, the `run' command to run
+your program, and so on.
+
+ As well as making available all the usual machine registers (*note
+Registers: Registers.), the Z8000 simulator provides three additional
+items of information as specially named registers:
+
+`cycles'
+ Counts clock-ticks in the simulator.
+
+`insts'
+ Counts instructions run in the simulator.
+
+`time'
+ Execution time in 60ths of a second.
+
+
+ You can refer to these values in GDB expressions with the usual
+conventions; for example, `b fputc if $cycles>5000' sets a conditional
+breakpoint that suspends only after at least 5000 simulated clock ticks.
+
+
+File: gdb.info, Node: AVR, Next: CRIS, Prev: Z8000, Up: Embedded Processors
+
+21.3.12 Atmel AVR
+-----------------
+
+When configured for debugging the Atmel AVR, GDB supports the following
+AVR-specific commands:
+
+`info io_registers'
+ This command displays information about the AVR I/O registers. For
+ each register, GDB prints its number and value.
+
+
+File: gdb.info, Node: CRIS, Next: Super-H, Prev: AVR, Up: Embedded Processors
+
+21.3.13 CRIS
+------------
+
+When configured for debugging CRIS, GDB provides the following
+CRIS-specific commands:
+
+`set cris-version VER'
+ Set the current CRIS version to VER, either `10' or `32'. The
+ CRIS version affects register names and sizes. This command is
+ useful in case autodetection of the CRIS version fails.
+
+`show cris-version'
+ Show the current CRIS version.
+
+`set cris-dwarf2-cfi'
+ Set the usage of DWARF-2 CFI for CRIS debugging. The default is
+ `on'. Change to `off' when using `gcc-cris' whose version is below
+ `R59'.
+
+`show cris-dwarf2-cfi'
+ Show the current state of using DWARF-2 CFI.
+
+`set cris-mode MODE'
+ Set the current CRIS mode to MODE. It should only be changed when
+ debugging in guru mode, in which case it should be set to `guru'
+ (the default is `normal').
+
+`show cris-mode'
+ Show the current CRIS mode.
+
+
+File: gdb.info, Node: Super-H, Prev: CRIS, Up: Embedded Processors
+
+21.3.14 Renesas Super-H
+-----------------------
+
+For the Renesas Super-H processor, GDB provides these commands:
+
+`regs'
+ Show the values of all Super-H registers.
+
+`set sh calling-convention CONVENTION'
+ Set the calling-convention used when calling functions from GDB.
+ Allowed values are `gcc', which is the default setting, and
+ `renesas'. With the `gcc' setting, functions are called using the
+ GCC calling convention. If the DWARF-2 information of the called
+ function specifies that the function follows the Renesas calling
+ convention, the function is called using the Renesas calling
+ convention. If the calling convention is set to `renesas', the
+ Renesas calling convention is always used, regardless of the
+ DWARF-2 information. This can be used to override the default of
+ `gcc' if debug information is missing, or the compiler does not
+ emit the DWARF-2 calling convention entry for a function.
+
+`show sh calling-convention'
+ Show the current calling convention setting.
+
+
+
+File: gdb.info, Node: Architectures, Prev: Embedded Processors, Up: Configurations
+
+21.4 Architectures
+==================
+
+This section describes characteristics of architectures that affect all
+uses of GDB with the architecture, both native and cross.
+
+* Menu:
+
+* i386::
+* A29K::
+* Alpha::
+* MIPS::
+* HPPA:: HP PA architecture
+* SPU:: Cell Broadband Engine SPU architecture
+* PowerPC::
+
+
+File: gdb.info, Node: i386, Next: A29K, Up: Architectures
+
+21.4.1 x86 Architecture-specific Issues
+---------------------------------------
+
+`set struct-convention MODE'
+ Set the convention used by the inferior to return `struct's and
+ `union's from functions to MODE. Possible values of MODE are
+ `"pcc"', `"reg"', and `"default"' (the default). `"default"' or
+ `"pcc"' means that `struct's are returned on the stack, while
+ `"reg"' means that a `struct' or a `union' whose size is 1, 2, 4,
+ or 8 bytes will be returned in a register.
+
+`show struct-convention'
+ Show the current setting of the convention to return `struct's
+ from functions.
+
+
+File: gdb.info, Node: A29K, Next: Alpha, Prev: i386, Up: Architectures
+
+21.4.2 A29K
+-----------
+
+`set rstack_high_address ADDRESS'
+ On AMD 29000 family processors, registers are saved in a separate
+ "register stack". There is no way for GDB to determine the extent
+ of this stack. Normally, GDB just assumes that the stack is
+ "large enough". This may result in GDB referencing memory
+ locations that do not exist. If necessary, you can get around
+ this problem by specifying the ending address of the register
+ stack with the `set rstack_high_address' command. The argument
+ should be an address, which you probably want to precede with `0x'
+ to specify in hexadecimal.
+
+`show rstack_high_address'
+ Display the current limit of the register stack, on AMD 29000
+ family processors.
+
+
+
+File: gdb.info, Node: Alpha, Next: MIPS, Prev: A29K, Up: Architectures
+
+21.4.3 Alpha
+------------
+
+See the following section.
+
+
+File: gdb.info, Node: MIPS, Next: HPPA, Prev: Alpha, Up: Architectures
+
+21.4.4 MIPS
+-----------
+
+Alpha- and MIPS-based computers use an unusual stack frame, which
+sometimes requires GDB to search backward in the object code to find
+the beginning of a function.
+
+ To improve response time (especially for embedded applications, where
+GDB may be restricted to a slow serial line for this search) you may
+want to limit the size of this search, using one of these commands:
+
+`set heuristic-fence-post LIMIT'
+ Restrict GDB to examining at most LIMIT bytes in its search for
+ the beginning of a function. A value of 0 (the default) means
+ there is no limit. However, except for 0, the larger the limit
+ the more bytes `heuristic-fence-post' must search and therefore
+ the longer it takes to run. You should only need to use this
+ command when debugging a stripped executable.
+
+`show heuristic-fence-post'
+ Display the current limit.
+
+These commands are available _only_ when GDB is configured for
+debugging programs on Alpha or MIPS processors.
+
+ Several MIPS-specific commands are available when debugging MIPS
+programs:
+
+`set mips abi ARG'
+ Tell GDB which MIPS ABI is used by the inferior. Possible values
+ of ARG are:
+
+ `auto'
+ The default ABI associated with the current binary (this is
+ the default).
+
+ `o32'
+
+ `o64'
+
+ `n32'
+
+ `n64'
+
+ `eabi32'
+
+ `eabi64'
+
+ `auto'
+
+`show mips abi'
+ Show the MIPS ABI used by GDB to debug the inferior.
+
+`set mipsfpu'
+`show mipsfpu'
+ *Note set mipsfpu: MIPS Embedded.
+
+`set mips mask-address ARG'
+ This command determines whether the most-significant 32 bits of
+ 64-bit MIPS addresses are masked off. The argument ARG can be
+ `on', `off', or `auto'. The latter is the default setting, which
+ lets GDB determine the correct value.
+
+`show mips mask-address'
+ Show whether the upper 32 bits of MIPS addresses are masked off or
+ not.
+
+`set remote-mips64-transfers-32bit-regs'
+ This command controls compatibility with 64-bit MIPS targets that
+ transfer data in 32-bit quantities. If you have an old MIPS 64
+ target that transfers 32 bits for some registers, like SR and FSR,
+ and 64 bits for other registers, set this option to `on'.
+
+`show remote-mips64-transfers-32bit-regs'
+ Show the current setting of compatibility with older MIPS 64
+ targets.
+
+`set debug mips'
+ This command turns on and off debugging messages for the
+ MIPS-specific target code in GDB.
+
+`show debug mips'
+ Show the current setting of MIPS debugging messages.
+
+
+File: gdb.info, Node: HPPA, Next: SPU, Prev: MIPS, Up: Architectures
+
+21.4.5 HPPA
+-----------
+
+When GDB is debugging the HP PA architecture, it provides the following
+special commands:
+
+`set debug hppa'
+ This command determines whether HPPA architecture-specific
+ debugging messages are to be displayed.
+
+`show debug hppa'
+ Show whether HPPA debugging messages are displayed.
+
+`maint print unwind ADDRESS'
+ This command displays the contents of the unwind table entry at the
+ given ADDRESS.
+
+
+
+File: gdb.info, Node: SPU, Next: PowerPC, Prev: HPPA, Up: Architectures
+
+21.4.6 Cell Broadband Engine SPU architecture
+---------------------------------------------
+
+When GDB is debugging the Cell Broadband Engine SPU architecture, it
+provides the following special commands:
+
+`info spu event'
+ Display SPU event facility status. Shows current event mask and
+ pending event status.
+
+`info spu signal'
+ Display SPU signal notification facility status. Shows pending
+ signal-control word and signal notification mode of both signal
+ notification channels.
+
+`info spu mailbox'
+ Display SPU mailbox facility status. Shows all pending entries,
+ in order of processing, in each of the SPU Write Outbound, SPU
+ Write Outbound Interrupt, and SPU Read Inbound mailboxes.
+
+`info spu dma'
+ Display MFC DMA status. Shows all pending commands in the MFC DMA
+ queue. For each entry, opcode, tag, class IDs, effective and
+ local store addresses and transfer size are shown.
+
+`info spu proxydma'
+ Display MFC Proxy-DMA status. Shows all pending commands in the
+ MFC Proxy-DMA queue. For each entry, opcode, tag, class IDs,
+ effective and local store addresses and transfer size are shown.
+
+
+ When GDB is debugging a combined PowerPC/SPU application on the Cell
+Broadband Engine, it provides in addition the following special
+commands:
+
+`set spu stop-on-load ARG'
+ Set whether to stop for new SPE threads. When set to `on', GDB
+ will give control to the user when a new SPE thread enters its
+ `main' function. The default is `off'.
+
+`show spu stop-on-load'
+ Show whether to stop for new SPE threads.
+
+`set spu auto-flush-cache ARG'
+ Set whether to automatically flush the software-managed cache.
+ When set to `on', GDB will automatically cause the SPE
+ software-managed cache to be flushed whenever SPE execution stops.
+ This provides a consistent view of PowerPC memory that is accessed
+ via the cache. If an application does not use the
+ software-managed cache, this option has no effect.
+
+`show spu auto-flush-cache'
+ Show whether to automatically flush the software-managed cache.
+
+
+
+File: gdb.info, Node: PowerPC, Prev: SPU, Up: Architectures
+
+21.4.7 PowerPC
+--------------
+
+When GDB is debugging the PowerPC architecture, it provides a set of
+pseudo-registers to enable inspection of 128-bit wide Decimal Floating
+Point numbers stored in the floating point registers. These values must
+be stored in two consecutive registers, always starting at an even
+register like `f0' or `f2'.
+
+ The pseudo-registers go from `$dl0' through `$dl15', and are formed
+by joining the even/odd register pairs `f0' and `f1' for `$dl0', `f2'
+and `f3' for `$dl1' and so on.
+
+ For POWER7 processors, GDB provides a set of pseudo-registers, the
+64-bit wide Extended Floating Point Registers (`f32' through `f63').
+
+
+File: gdb.info, Node: Controlling GDB, Next: Extending GDB, Prev: Configurations, Up: Top
+
+22 Controlling GDB
+******************
+
+You can alter the way GDB interacts with you by using the `set'
+command. For commands controlling how GDB displays data, see *note
+Print Settings: Print Settings. Other settings are described here.
+
+* Menu:
+
+* Prompt:: Prompt
+* Editing:: Command editing
+* Command History:: Command history
+* Screen Size:: Screen size
+* Numbers:: Numbers
+* ABI:: Configuring the current ABI
+* Messages/Warnings:: Optional warnings and messages
+* Debugging Output:: Optional messages about internal happenings
+* Other Misc Settings:: Other Miscellaneous Settings
+
+
+File: gdb.info, Node: Prompt, Next: Editing, Up: Controlling GDB
+
+22.1 Prompt
+===========
+
+GDB indicates its readiness to read a command by printing a string
+called the "prompt". This string is normally `(gdb)'. You can change
+the prompt string with the `set prompt' command. For instance, when
+debugging GDB with GDB, it is useful to change the prompt in one of the
+GDB sessions so that you can always tell which one you are talking to.
+
+ _Note:_ `set prompt' does not add a space for you after the prompt
+you set. This allows you to set a prompt which ends in a space or a
+prompt that does not.
+
+`set prompt NEWPROMPT'
+ Directs GDB to use NEWPROMPT as its prompt string henceforth.
+
+`show prompt'
+ Prints a line of the form: `Gdb's prompt is: YOUR-PROMPT'
+
+
+File: gdb.info, Node: Editing, Next: Command History, Prev: Prompt, Up: Controlling GDB
+
+22.2 Command Editing
+====================
+
+GDB reads its input commands via the "Readline" interface. This GNU
+library provides consistent behavior for programs which provide a
+command line interface to the user. Advantages are GNU Emacs-style or
+"vi"-style inline editing of commands, `csh'-like history substitution,
+and a storage and recall of command history across debugging sessions.
+
+ You may control the behavior of command line editing in GDB with the
+command `set'.
+
+`set editing'
+`set editing on'
+ Enable command line editing (enabled by default).
+
+`set editing off'
+ Disable command line editing.
+
+`show editing'
+ Show whether command line editing is enabled.
+
+ *Note Command Line Editing::, for more details about the Readline
+interface. Users unfamiliar with GNU Emacs or `vi' are encouraged to
+read that chapter.
+
+
+File: gdb.info, Node: Command History, Next: Screen Size, Prev: Editing, Up: Controlling GDB
+
+22.3 Command History
+====================
+
+GDB can keep track of the commands you type during your debugging
+sessions, so that you can be certain of precisely what happened. Use
+these commands to manage the GDB command history facility.
+
+ GDB uses the GNU History library, a part of the Readline package, to
+provide the history facility. *Note Using History Interactively::, for
+the detailed description of the History library.
+
+ To issue a command to GDB without affecting certain aspects of the
+state which is seen by users, prefix it with `server ' (*note Server
+Prefix::). This means that this command will not affect the command
+history, nor will it affect GDB's notion of which command to repeat if
+<RET> is pressed on a line by itself.
+
+ The server prefix does not affect the recording of values into the
+value history; to print a value without recording it into the value
+history, use the `output' command instead of the `print' command.
+
+ Here is the description of GDB commands related to command history.
+
+`set history filename FNAME'
+ Set the name of the GDB command history file to FNAME. This is
+ the file where GDB reads an initial command history list, and
+ where it writes the command history from this session when it
+ exits. You can access this list through history expansion or
+ through the history command editing characters listed below. This
+ file defaults to the value of the environment variable
+ `GDBHISTFILE', or to `./.gdb_history' (`./_gdb_history' on MS-DOS)
+ if this variable is not set.
+
+`set history save'
+`set history save on'
+ Record command history in a file, whose name may be specified with
+ the `set history filename' command. By default, this option is
+ disabled.
+
+`set history save off'
+ Stop recording command history in a file.
+
+`set history size SIZE'
+ Set the number of commands which GDB keeps in its history list.
+ This defaults to the value of the environment variable `HISTSIZE',
+ or to 256 if this variable is not set.
+
+ History expansion assigns special meaning to the character `!'.
+*Note Event Designators::, for more details.
+
+ Since `!' is also the logical not operator in C, history expansion
+is off by default. If you decide to enable history expansion with the
+`set history expansion on' command, you may sometimes need to follow
+`!' (when it is used as logical not, in an expression) with a space or
+a tab to prevent it from being expanded. The readline history
+facilities do not attempt substitution on the strings `!=' and `!(',
+even when history expansion is enabled.
+
+ The commands to control history expansion are:
+
+`set history expansion on'
+`set history expansion'
+ Enable history expansion. History expansion is off by default.
+
+`set history expansion off'
+ Disable history expansion.
+
+`show history'
+`show history filename'
+`show history save'
+`show history size'
+`show history expansion'
+ These commands display the state of the GDB history parameters.
+ `show history' by itself displays all four states.
+
+`show commands'
+ Display the last ten commands in the command history.
+
+`show commands N'
+ Print ten commands centered on command number N.
+
+`show commands +'
+ Print ten commands just after the commands last printed.
+
+
+File: gdb.info, Node: Screen Size, Next: Numbers, Prev: Command History, Up: Controlling GDB
+
+22.4 Screen Size
+================
+
+Certain commands to GDB may produce large amounts of information output
+to the screen. To help you read all of it, GDB pauses and asks you for
+input at the end of each page of output. Type <RET> when you want to
+continue the output, or `q' to discard the remaining output. Also, the
+screen width setting determines when to wrap lines of output.
+Depending on what is being printed, GDB tries to break the line at a
+readable place, rather than simply letting it overflow onto the
+following line.
+
+ Normally GDB knows the size of the screen from the terminal driver
+software. For example, on Unix GDB uses the termcap data base together
+with the value of the `TERM' environment variable and the `stty rows'
+and `stty cols' settings. If this is not correct, you can override it
+with the `set height' and `set width' commands:
+
+`set height LPP'
+`show height'
+`set width CPL'
+`show width'
+ These `set' commands specify a screen height of LPP lines and a
+ screen width of CPL characters. The associated `show' commands
+ display the current settings.
+
+ If you specify a height of zero lines, GDB does not pause during
+ output no matter how long the output is. This is useful if output
+ is to a file or to an editor buffer.
+
+ Likewise, you can specify `set width 0' to prevent GDB from
+ wrapping its output.
+
+`set pagination on'
+`set pagination off'
+ Turn the output pagination on or off; the default is on. Turning
+ pagination off is the alternative to `set height 0'. Note that
+ running GDB with the `--batch' option (*note -batch: Mode
+ Options.) also automatically disables pagination.
+
+`show pagination'
+ Show the current pagination mode.
+
+
+File: gdb.info, Node: Numbers, Next: ABI, Prev: Screen Size, Up: Controlling GDB
+
+22.5 Numbers
+============
+
+You can always enter numbers in octal, decimal, or hexadecimal in GDB
+by the usual conventions: octal numbers begin with `0', decimal numbers
+end with `.', and hexadecimal numbers begin with `0x'. Numbers that
+neither begin with `0' or `0x', nor end with a `.' are, by default,
+entered in base 10; likewise, the default display for numbers--when no
+particular format is specified--is base 10. You can change the default
+base for both input and output with the commands described below.
+
+`set input-radix BASE'
+ Set the default base for numeric input. Supported choices for
+ BASE are decimal 8, 10, or 16. BASE must itself be specified
+ either unambiguously or using the current input radix; for
+ example, any of
+
+ set input-radix 012
+ set input-radix 10.
+ set input-radix 0xa
+
+ sets the input base to decimal. On the other hand, `set
+ input-radix 10' leaves the input radix unchanged, no matter what
+ it was, since `10', being without any leading or trailing signs of
+ its base, is interpreted in the current radix. Thus, if the
+ current radix is 16, `10' is interpreted in hex, i.e. as 16
+ decimal, which doesn't change the radix.
+
+`set output-radix BASE'
+ Set the default base for numeric display. Supported choices for
+ BASE are decimal 8, 10, or 16. BASE must itself be specified
+ either unambiguously or using the current input radix.
+
+`show input-radix'
+ Display the current default base for numeric input.
+
+`show output-radix'
+ Display the current default base for numeric display.
+
+`set radix [BASE]'
+`show radix'
+ These commands set and show the default base for both input and
+ output of numbers. `set radix' sets the radix of input and output
+ to the same base; without an argument, it resets the radix back to
+ its default value of 10.
+
+
+
+File: gdb.info, Node: ABI, Next: Messages/Warnings, Prev: Numbers, Up: Controlling GDB
+
+22.6 Configuring the Current ABI
+================================
+
+GDB can determine the "ABI" (Application Binary Interface) of your
+application automatically. However, sometimes you need to override its
+conclusions. Use these commands to manage GDB's view of the current
+ABI.
+
+ One GDB configuration can debug binaries for multiple operating
+system targets, either via remote debugging or native emulation. GDB
+will autodetect the "OS ABI" (Operating System ABI) in use, but you can
+override its conclusion using the `set osabi' command. One example
+where this is useful is in debugging of binaries which use an alternate
+C library (e.g. UCLIBC for GNU/Linux) which does not have the same
+identifying marks that the standard C library for your platform
+provides.
+
+`show osabi'
+ Show the OS ABI currently in use.
+
+`set osabi'
+ With no argument, show the list of registered available OS ABI's.
+
+`set osabi ABI'
+ Set the current OS ABI to ABI.
+
+ Generally, the way that an argument of type `float' is passed to a
+function depends on whether the function is prototyped. For a
+prototyped (i.e. ANSI/ISO style) function, `float' arguments are passed
+unchanged, according to the architecture's convention for `float'. For
+unprototyped (i.e. K&R style) functions, `float' arguments are first
+promoted to type `double' and then passed.
+
+ Unfortunately, some forms of debug information do not reliably
+indicate whether a function is prototyped. If GDB calls a function
+that is not marked as prototyped, it consults `set
+coerce-float-to-double'.
+
+`set coerce-float-to-double'
+`set coerce-float-to-double on'
+ Arguments of type `float' will be promoted to `double' when passed
+ to an unprototyped function. This is the default setting.
+
+`set coerce-float-to-double off'
+ Arguments of type `float' will be passed directly to unprototyped
+ functions.
+
+`show coerce-float-to-double'
+ Show the current setting of promoting `float' to `double'.
+
+ GDB needs to know the ABI used for your program's C++ objects. The
+correct C++ ABI depends on which C++ compiler was used to build your
+application. GDB only fully supports programs with a single C++ ABI;
+if your program contains code using multiple C++ ABI's or if GDB can
+not identify your program's ABI correctly, you can tell GDB which ABI
+to use. Currently supported ABI's include "gnu-v2", for `g++' versions
+before 3.0, "gnu-v3", for `g++' versions 3.0 and later, and "hpaCC" for
+the HP ANSI C++ compiler. Other C++ compilers may use the "gnu-v2" or
+"gnu-v3" ABI's as well. The default setting is "auto".
+
+`show cp-abi'
+ Show the C++ ABI currently in use.
+
+`set cp-abi'
+ With no argument, show the list of supported C++ ABI's.
+
+`set cp-abi ABI'
+`set cp-abi auto'
+ Set the current C++ ABI to ABI, or return to automatic detection.
+
+
+File: gdb.info, Node: Messages/Warnings, Next: Debugging Output, Prev: ABI, Up: Controlling GDB
+
+22.7 Optional Warnings and Messages
+===================================
+
+By default, GDB is silent about its inner workings. If you are running
+on a slow machine, you may want to use the `set verbose' command. This
+makes GDB tell you when it does a lengthy internal operation, so you
+will not think it has crashed.
+
+ Currently, the messages controlled by `set verbose' are those which
+announce that the symbol table for a source file is being read; see
+`symbol-file' in *note Commands to Specify Files: Files.
+
+`set verbose on'
+ Enables GDB output of certain informational messages.
+
+`set verbose off'
+ Disables GDB output of certain informational messages.
+
+`show verbose'
+ Displays whether `set verbose' is on or off.
+
+ By default, if GDB encounters bugs in the symbol table of an object
+file, it is silent; but if you are debugging a compiler, you may find
+this information useful (*note Errors Reading Symbol Files: Symbol
+Errors.).
+
+`set complaints LIMIT'
+ Permits GDB to output LIMIT complaints about each type of unusual
+ symbols before becoming silent about the problem. Set LIMIT to
+ zero to suppress all complaints; set it to a large number to
+ prevent complaints from being suppressed.
+
+`show complaints'
+ Displays how many symbol complaints GDB is permitted to produce.
+
+
+ By default, GDB is cautious, and asks what sometimes seems to be a
+lot of stupid questions to confirm certain commands. For example, if
+you try to run a program which is already running:
+
+ (gdb) run
+ The program being debugged has been started already.
+ Start it from the beginning? (y or n)
+
+ If you are willing to unflinchingly face the consequences of your own
+commands, you can disable this "feature":
+
+`set confirm off'
+ Disables confirmation requests. Note that running GDB with the
+ `--batch' option (*note -batch: Mode Options.) also automatically
+ disables confirmation requests.
+
+`set confirm on'
+ Enables confirmation requests (the default).
+
+`show confirm'
+ Displays state of confirmation requests.
+
+
+ If you need to debug user-defined commands or sourced files you may
+find it useful to enable "command tracing". In this mode each command
+will be printed as it is executed, prefixed with one or more `+'
+symbols, the quantity denoting the call depth of each command.
+
+`set trace-commands on'
+ Enable command tracing.
+
+`set trace-commands off'
+ Disable command tracing.
+
+`show trace-commands'
+ Display the current state of command tracing.
+
+
+File: gdb.info, Node: Debugging Output, Next: Other Misc Settings, Prev: Messages/Warnings, Up: Controlling GDB
+
+22.8 Optional Messages about Internal Happenings
+================================================
+
+GDB has commands that enable optional debugging messages from various
+GDB subsystems; normally these commands are of interest to GDB
+maintainers, or when reporting a bug. This section documents those
+commands.
+
+`set exec-done-display'
+ Turns on or off the notification of asynchronous commands'
+ completion. When on, GDB will print a message when an
+ asynchronous command finishes its execution. The default is off.
+
+`show exec-done-display'
+ Displays the current setting of asynchronous command completion
+ notification.
+
+`set debug arch'
+ Turns on or off display of gdbarch debugging info. The default is
+ off
+
+`show debug arch'
+ Displays the current state of displaying gdbarch debugging info.
+
+`set debug aix-thread'
+ Display debugging messages about inner workings of the AIX thread
+ module.
+
+`show debug aix-thread'
+ Show the current state of AIX thread debugging info display.
+
+`set debug check-physname'
+ Check the results of the "physname" computation. When reading
+ DWARF debugging information for C++, GDB attempts to compute each
+ entity's name. GDB can do this computation in two different ways,
+ depending on exactly what information is present. When enabled,
+ this setting causes GDB to compute the names both ways and display
+ any discrepancies.
+
+`show debug check-physname'
+ Show the current state of "physname" checking.
+
+`set debug dwarf2-die'
+ Dump DWARF2 DIEs after they are read in. The value is the number
+ of nesting levels to print. A value of zero turns off the display.
+
+`show debug dwarf2-die'
+ Show the current state of DWARF2 DIE debugging.
+
+`set debug displaced'
+ Turns on or off display of GDB debugging info for the displaced
+ stepping support. The default is off.
+
+`show debug displaced'
+ Displays the current state of displaying GDB debugging info
+ related to displaced stepping.
+
+`set debug event'
+ Turns on or off display of GDB event debugging info. The default
+ is off.
+
+`show debug event'
+ Displays the current state of displaying GDB event debugging info.
+
+`set debug expression'
+ Turns on or off display of debugging info about GDB expression
+ parsing. The default is off.
+
+`show debug expression'
+ Displays the current state of displaying debugging info about GDB
+ expression parsing.
+
+`set debug frame'
+ Turns on or off display of GDB frame debugging info. The default
+ is off.
+
+`show debug frame'
+ Displays the current state of displaying GDB frame debugging info.
+
+`set debug gnu-nat'
+ Turns on or off debugging messages from the GNU/Hurd debug support.
+
+`show debug gnu-nat'
+ Show the current state of GNU/Hurd debugging messages.
+
+`set debug infrun'
+ Turns on or off display of GDB debugging info for running the
+ inferior. The default is off. `infrun.c' contains GDB's runtime
+ state machine used for implementing operations such as
+ single-stepping the inferior.
+
+`show debug infrun'
+ Displays the current state of GDB inferior debugging.
+
+`set debug jit'
+ Turns on or off debugging messages from JIT debug support.
+
+`show debug jit'
+ Displays the current state of GDB JIT debugging.
+
+`set debug lin-lwp'
+ Turns on or off debugging messages from the Linux LWP debug
+ support.
+
+`show debug lin-lwp'
+ Show the current state of Linux LWP debugging messages.
+
+`set debug lin-lwp-async'
+ Turns on or off debugging messages from the Linux LWP async debug
+ support.
+
+`show debug lin-lwp-async'
+ Show the current state of Linux LWP async debugging messages.
+
+`set debug observer'
+ Turns on or off display of GDB observer debugging. This includes
+ info such as the notification of observable events.
+
+`show debug observer'
+ Displays the current state of observer debugging.
+
+`set debug overload'
+ Turns on or off display of GDB C++ overload debugging info. This
+ includes info such as ranking of functions, etc. The default is
+ off.
+
+`show debug overload'
+ Displays the current state of displaying GDB C++ overload
+ debugging info.
+
+`set debug parser'
+ Turns on or off the display of expression parser debugging output.
+ Internally, this sets the `yydebug' variable in the expression
+ parser. *Note Tracing Your Parser: (bison)Tracing, for details.
+ The default is off.
+
+`show debug parser'
+ Show the current state of expression parser debugging.
+
+`set debug remote'
+ Turns on or off display of reports on all packets sent back and
+ forth across the serial line to the remote machine. The info is
+ printed on the GDB standard output stream. The default is off.
+
+`show debug remote'
+ Displays the state of display of remote packets.
+
+`set debug serial'
+ Turns on or off display of GDB serial debugging info. The default
+ is off.
+
+`show debug serial'
+ Displays the current state of displaying GDB serial debugging info.
+
+`set debug solib-frv'
+ Turns on or off debugging messages for FR-V shared-library code.
+
+`show debug solib-frv'
+ Display the current state of FR-V shared-library code debugging
+ messages.
+
+`set debug target'
+ Turns on or off display of GDB target debugging info. This info
+ includes what is going on at the target level of GDB, as it
+ happens. The default is 0. Set it to 1 to track events, and to 2
+ to also track the value of large memory transfers. Changes to
+ this flag do not take effect until the next time you connect to a
+ target or use the `run' command.
+
+`show debug target'
+ Displays the current state of displaying GDB target debugging info.
+
+`set debug timestamp'
+ Turns on or off display of timestamps with GDB debugging info.
+ When enabled, seconds and microseconds are displayed before each
+ debugging message.
+
+`show debug timestamp'
+ Displays the current state of displaying timestamps with GDB
+ debugging info.
+
+`set debugvarobj'
+ Turns on or off display of GDB variable object debugging info. The
+ default is off.
+
+`show debugvarobj'
+ Displays the current state of displaying GDB variable object
+ debugging info.
+
+`set debug xml'
+ Turns on or off debugging messages for built-in XML parsers.
+
+`show debug xml'
+ Displays the current state of XML debugging messages.
+
+
+File: gdb.info, Node: Other Misc Settings, Prev: Debugging Output, Up: Controlling GDB
+
+22.9 Other Miscellaneous Settings
+=================================
+
+`set interactive-mode'
+ If `on', forces GDB to assume that GDB was started in a terminal.
+ In practice, this means that GDB should wait for the user to
+ answer queries generated by commands entered at the command
+ prompt. If `off', forces GDB to operate in the opposite mode, and
+ it uses the default answers to all queries. If `auto' (the
+ default), GDB tries to determine whether its standard input is a
+ terminal, and works in interactive-mode if it is,
+ non-interactively otherwise.
+
+ In the vast majority of cases, the debugger should be able to guess
+ correctly which mode should be used. But this setting can be
+ useful in certain specific cases, such as running a MinGW GDB
+ inside a cygwin window.
+
+`show interactive-mode'
+ Displays whether the debugger is operating in interactive mode or
+ not.
+
+
+File: gdb.info, Node: Extending GDB, Next: Interpreters, Prev: Controlling GDB, Up: Top
+
+23 Extending GDB
+****************
+
+GDB provides two mechanisms for extension. The first is based on
+composition of GDB commands, and the second is based on the Python
+scripting language.
+
+ To facilitate the use of these extensions, GDB is capable of
+evaluating the contents of a file. When doing so, GDB can recognize
+which scripting language is being used by looking at the filename
+extension. Files with an unrecognized filename extension are always
+treated as a GDB Command Files. *Note Command files: Command Files.
+
+ You can control how GDB evaluates these files with the following
+setting:
+
+`set script-extension off'
+ All scripts are always evaluated as GDB Command Files.
+
+`set script-extension soft'
+ The debugger determines the scripting language based on filename
+ extension. If this scripting language is supported, GDB evaluates
+ the script using that language. Otherwise, it evaluates the file
+ as a GDB Command File.
+
+`set script-extension strict'
+ The debugger determines the scripting language based on filename
+ extension, and evaluates the script using that language. If the
+ language is not supported, then the evaluation fails.
+
+`show script-extension'
+ Display the current value of the `script-extension' option.
+
+
+* Menu:
+
+* Sequences:: Canned Sequences of Commands
+* Python:: Scripting GDB using Python
+
+
+File: gdb.info, Node: Sequences, Next: Python, Up: Extending GDB
+
+23.1 Canned Sequences of Commands
+=================================
+
+Aside from breakpoint commands (*note Breakpoint Command Lists: Break
+Commands.), GDB provides two ways to store sequences of commands for
+execution as a unit: user-defined commands and command files.
+
+* Menu:
+
+* Define:: How to define your own commands
+* Hooks:: Hooks for user-defined commands
+* Command Files:: How to write scripts of commands to be stored in a file
+* Output:: Commands for controlled output
+
+
+File: gdb.info, Node: Define, Next: Hooks, Up: Sequences
+
+23.1.1 User-defined Commands
+----------------------------
+
+A "user-defined command" is a sequence of GDB commands to which you
+assign a new name as a command. This is done with the `define'
+command. User commands may accept up to 10 arguments separated by
+whitespace. Arguments are accessed within the user command via
+`$arg0...$arg9'. A trivial example:
+
+ define adder
+ print $arg0 + $arg1 + $arg2
+ end
+
+To execute the command use:
+
+ adder 1 2 3
+
+This defines the command `adder', which prints the sum of its three
+arguments. Note the arguments are text substitutions, so they may
+reference variables, use complex expressions, or even perform inferior
+functions calls.
+
+ In addition, `$argc' may be used to find out how many arguments have
+been passed. This expands to a number in the range 0...10.
+
+ define adder
+ if $argc == 2
+ print $arg0 + $arg1
+ end
+ if $argc == 3
+ print $arg0 + $arg1 + $arg2
+ end
+ end
+
+`define COMMANDNAME'
+ Define a command named COMMANDNAME. If there is already a command
+ by that name, you are asked to confirm that you want to redefine
+ it. COMMANDNAME may be a bare command name consisting of letters,
+ numbers, dashes, and underscores. It may also start with any
+ predefined prefix command. For example, `define target my-target'
+ creates a user-defined `target my-target' command.
+
+ The definition of the command is made up of other GDB command
+ lines, which are given following the `define' command. The end of
+ these commands is marked by a line containing `end'.
+
+`document COMMANDNAME'
+ Document the user-defined command COMMANDNAME, so that it can be
+ accessed by `help'. The command COMMANDNAME must already be
+ defined. This command reads lines of documentation just as
+ `define' reads the lines of the command definition, ending with
+ `end'. After the `document' command is finished, `help' on command
+ COMMANDNAME displays the documentation you have written.
+
+ You may use the `document' command again to change the
+ documentation of a command. Redefining the command with `define'
+ does not change the documentation.
+
+`dont-repeat'
+ Used inside a user-defined command, this tells GDB that this
+ command should not be repeated when the user hits <RET> (*note
+ repeat last command: Command Syntax.).
+
+`help user-defined'
+ List all user-defined commands, with the first line of the
+ documentation (if any) for each.
+
+`show user'
+`show user COMMANDNAME'
+ Display the GDB commands used to define COMMANDNAME (but not its
+ documentation). If no COMMANDNAME is given, display the
+ definitions for all user-defined commands.
+
+`show max-user-call-depth'
+`set max-user-call-depth'
+ The value of `max-user-call-depth' controls how many recursion
+ levels are allowed in user-defined commands before GDB suspects an
+ infinite recursion and aborts the command.
+
+ In addition to the above commands, user-defined commands frequently
+use control flow commands, described in *note Command Files::.
+
+ When user-defined commands are executed, the commands of the
+definition are not printed. An error in any command stops execution of
+the user-defined command.
+
+ If used interactively, commands that would ask for confirmation
+proceed without asking when used inside a user-defined command. Many
+GDB commands that normally print messages to say what they are doing
+omit the messages when used in a user-defined command.
+
+
+File: gdb.info, Node: Hooks, Next: Command Files, Prev: Define, Up: Sequences
+
+23.1.2 User-defined Command Hooks
+---------------------------------
+
+You may define "hooks", which are a special kind of user-defined
+command. Whenever you run the command `foo', if the user-defined
+command `hook-foo' exists, it is executed (with no arguments) before
+that command.
+
+ A hook may also be defined which is run after the command you
+executed. Whenever you run the command `foo', if the user-defined
+command `hookpost-foo' exists, it is executed (with no arguments) after
+that command. Post-execution hooks may exist simultaneously with
+pre-execution hooks, for the same command.
+
+ It is valid for a hook to call the command which it hooks. If this
+occurs, the hook is not re-executed, thereby avoiding infinite
+recursion.
+
+ In addition, a pseudo-command, `stop' exists. Defining
+(`hook-stop') makes the associated commands execute every time
+execution stops in your program: before breakpoint commands are run,
+displays are printed, or the stack frame is printed.
+
+ For example, to ignore `SIGALRM' signals while single-stepping, but
+treat them normally during normal execution, you could define:
+
+ define hook-stop
+ handle SIGALRM nopass
+ end
+
+ define hook-run
+ handle SIGALRM pass
+ end
+
+ define hook-continue
+ handle SIGALRM pass
+ end
+
+ As a further example, to hook at the beginning and end of the `echo'
+command, and to add extra text to the beginning and end of the message,
+you could define:
+
+ define hook-echo
+ echo <<<---
+ end
+
+ define hookpost-echo
+ echo --->>>\n
+ end
+
+ (gdb) echo Hello World
+ <<<---Hello World--->>>
+ (gdb)
+
+ You can define a hook for any single-word command in GDB, but not
+for command aliases; you should define a hook for the basic command
+name, e.g. `backtrace' rather than `bt'. You can hook a multi-word
+command by adding `hook-' or `hookpost-' to the last word of the
+command, e.g. `define target hook-remote' to add a hook to `target
+remote'.
+
+ If an error occurs during the execution of your hook, execution of
+GDB commands stops and GDB issues a prompt (before the command that you
+actually typed had a chance to run).
+
+ If you try to define a hook which does not match any known command,
+you get a warning from the `define' command.
+
+
+File: gdb.info, Node: Command Files, Next: Output, Prev: Hooks, Up: Sequences
+
+23.1.3 Command Files
+--------------------
+
+A command file for GDB is a text file made of lines that are GDB
+commands. Comments (lines starting with `#') may also be included. An
+empty line in a command file does nothing; it does not mean to repeat
+the last command, as it would from the terminal.
+
+ You can request the execution of a command file with the `source'
+command. Note that the `source' command is also used to evaluate
+scripts that are not Command Files. The exact behavior can be
+configured using the `script-extension' setting. *Note Extending GDB:
+Extending GDB.
+
+`source [-s] [-v] FILENAME'
+ Execute the command file FILENAME.
+
+ The lines in a command file are generally executed sequentially,
+unless the order of execution is changed by one of the _flow-control
+commands_ described below. The commands are not printed as they are
+executed. An error in any command terminates execution of the command
+file and control is returned to the console.
+
+ GDB first searches for FILENAME in the current directory. If the
+file is not found there, and FILENAME does not specify a directory,
+then GDB also looks for the file on the source search path (specified
+with the `directory' command); except that `$cdir' is not searched
+because the compilation directory is not relevant to scripts.
+
+ If `-s' is specified, then GDB searches for FILENAME on the search
+path even if FILENAME specifies a directory. The search is done by
+appending FILENAME to each element of the search path. So, for
+example, if FILENAME is `mylib/myscript' and the search path contains
+`/home/user' then GDB will look for the script
+`/home/user/mylib/myscript'. The search is also done if FILENAME is an
+absolute path. For example, if FILENAME is `/tmp/myscript' and the
+search path contains `/home/user' then GDB will look for the script
+`/home/user/tmp/myscript'. For DOS-like systems, if FILENAME contains
+a drive specification, it is stripped before concatenation. For
+example, if FILENAME is `d:myscript' and the search path contains
+`c:/tmp' then GDB will look for the script `c:/tmp/myscript'.
+
+ If `-v', for verbose mode, is given then GDB displays each command
+as it is executed. The option must be given before FILENAME, and is
+interpreted as part of the filename anywhere else.
+
+ Commands that would ask for confirmation if used interactively
+proceed without asking when used in a command file. Many GDB commands
+that normally print messages to say what they are doing omit the
+messages when called from command files.
+
+ GDB also accepts command input from standard input. In this mode,
+normal output goes to standard output and error output goes to standard
+error. Errors in a command file supplied on standard input do not
+terminate execution of the command file--execution continues with the
+next command.
+
+ gdb < cmds > log 2>&1
+
+ (The syntax above will vary depending on the shell used.) This
+example will execute commands from the file `cmds'. All output and
+errors would be directed to `log'.
+
+ Since commands stored on command files tend to be more general than
+commands typed interactively, they frequently need to deal with
+complicated situations, such as different or unexpected values of
+variables and symbols, changes in how the program being debugged is
+built, etc. GDB provides a set of flow-control commands to deal with
+these complexities. Using these commands, you can write complex
+scripts that loop over data structures, execute commands conditionally,
+etc.
+
+`if'
+`else'
+ This command allows to include in your script conditionally
+ executed commands. The `if' command takes a single argument, which
+ is an expression to evaluate. It is followed by a series of
+ commands that are executed only if the expression is true (its
+ value is nonzero). There can then optionally be an `else' line,
+ followed by a series of commands that are only executed if the
+ expression was false. The end of the list is marked by a line
+ containing `end'.
+
+`while'
+ This command allows to write loops. Its syntax is similar to
+ `if': the command takes a single argument, which is an expression
+ to evaluate, and must be followed by the commands to execute, one
+ per line, terminated by an `end'. These commands are called the
+ "body" of the loop. The commands in the body of `while' are
+ executed repeatedly as long as the expression evaluates to true.
+
+`loop_break'
+ This command exits the `while' loop in whose body it is included.
+ Execution of the script continues after that `while's `end' line.
+
+`loop_continue'
+ This command skips the execution of the rest of the body of
+ commands in the `while' loop in whose body it is included.
+ Execution branches to the beginning of the `while' loop, where it
+ evaluates the controlling expression.
+
+`end'
+ Terminate the block of commands that are the body of `if', `else',
+ or `while' flow-control commands.
+
+
+File: gdb.info, Node: Output, Prev: Command Files, Up: Sequences
+
+23.1.4 Commands for Controlled Output
+-------------------------------------
+
+During the execution of a command file or a user-defined command, normal
+GDB output is suppressed; the only output that appears is what is
+explicitly printed by the commands in the definition. This section
+describes three commands useful for generating exactly the output you
+want.
+
+`echo TEXT'
+ Print TEXT. Nonprinting characters can be included in TEXT using
+ C escape sequences, such as `\n' to print a newline. *No newline
+ is printed unless you specify one.* In addition to the standard C
+ escape sequences, a backslash followed by a space stands for a
+ space. This is useful for displaying a string with spaces at the
+ beginning or the end, since leading and trailing spaces are
+ otherwise trimmed from all arguments. To print ` and foo = ', use
+ the command `echo \ and foo = \ '.
+
+ A backslash at the end of TEXT can be used, as in C, to continue
+ the command onto subsequent lines. For example,
+
+ echo This is some text\n\
+ which is continued\n\
+ onto several lines.\n
+
+ produces the same output as
+
+ echo This is some text\n
+ echo which is continued\n
+ echo onto several lines.\n
+
+`output EXPRESSION'
+ Print the value of EXPRESSION and nothing but that value: no
+ newlines, no `$NN = '. The value is not entered in the value
+ history either. *Note Expressions: Expressions, for more
+ information on expressions.
+
+`output/FMT EXPRESSION'
+ Print the value of EXPRESSION in format FMT. You can use the same
+ formats as for `print'. *Note Output Formats: Output Formats, for
+ more information.
+
+`printf TEMPLATE, EXPRESSIONS...'
+ Print the values of one or more EXPRESSIONS under the control of
+ the string TEMPLATE. To print several values, make EXPRESSIONS be
+ a comma-separated list of individual expressions, which may be
+ either numbers or pointers. Their values are printed as specified
+ by TEMPLATE, exactly as a C program would do by executing the code
+ below:
+
+ printf (TEMPLATE, EXPRESSIONS...);
+
+ As in `C' `printf', ordinary characters in TEMPLATE are printed
+ verbatim, while "conversion specification" introduced by the `%'
+ character cause subsequent EXPRESSIONS to be evaluated, their
+ values converted and formatted according to type and style
+ information encoded in the conversion specifications, and then
+ printed.
+
+ For example, you can print two values in hex like this:
+
+ printf "foo, bar-foo = 0x%x, 0x%x\n", foo, bar-foo
+
+ `printf' supports all the standard `C' conversion specifications,
+ including the flags and modifiers between the `%' character and
+ the conversion letter, with the following exceptions:
+
+ * The argument-ordering modifiers, such as `2$', are not
+ supported.
+
+ * The modifier `*' is not supported for specifying precision or
+ width.
+
+ * The `'' flag (for separation of digits into groups according
+ to `LC_NUMERIC'') is not supported.
+
+ * The type modifiers `hh', `j', `t', and `z' are not supported.
+
+ * The conversion letter `n' (as in `%n') is not supported.
+
+ * The conversion letters `a' and `A' are not supported.
+
+ Note that the `ll' type modifier is supported only if the
+ underlying `C' implementation used to build GDB supports the `long
+ long int' type, and the `L' type modifier is supported only if
+ `long double' type is available.
+
+ As in `C', `printf' supports simple backslash-escape sequences,
+ such as `\n', `\t', `\\', `\"', `\a', and `\f', that consist of
+ backslash followed by a single character. Octal and hexadecimal
+ escape sequences are not supported.
+
+ Additionally, `printf' supports conversion specifications for DFP
+ ("Decimal Floating Point") types using the following length
+ modifiers together with a floating point specifier. letters:
+
+ * `H' for printing `Decimal32' types.
+
+ * `D' for printing `Decimal64' types.
+
+ * `DD' for printing `Decimal128' types.
+
+ If the underlying `C' implementation used to build GDB has support
+ for the three length modifiers for DFP types, other modifiers such
+ as width and precision will also be available for GDB to use.
+
+ In case there is no such `C' support, no additional modifiers will
+ be available and the value will be printed in the standard way.
+
+ Here's an example of printing DFP types using the above conversion
+ letters:
+ printf "D32: %Hf - D64: %Df - D128: %DDf\n",1.2345df,1.2E10dd,1.2E1dl
+
+`eval TEMPLATE, EXPRESSIONS...'
+ Convert the values of one or more EXPRESSIONS under the control of
+ the string TEMPLATE to a command line, and call it.
+
+
+
+File: gdb.info, Node: Python, Prev: Sequences, Up: Extending GDB
+
+23.2 Scripting GDB using Python
+===============================
+
+You can script GDB using the Python programming language
+(http://www.python.org/). This feature is available only if GDB was
+configured using `--with-python'.
+
+ Python scripts used by GDB should be installed in
+`DATA-DIRECTORY/python', where DATA-DIRECTORY is the data directory as
+determined at GDB startup (*note Data Files::). This directory, known
+as the "python directory", is automatically added to the Python Search
+Path in order to allow the Python interpreter to locate all scripts
+installed at this location.
+
+* Menu:
+
+* Python Commands:: Accessing Python from GDB.
+* Python API:: Accessing GDB from Python.
+* Auto-loading:: Automatically loading Python code.
+* Python modules:: Python modules provided by GDB.
+
+
+File: gdb.info, Node: Python Commands, Next: Python API, Up: Python
+
+23.2.1 Python Commands
+----------------------
+
+GDB provides one command for accessing the Python interpreter, and one
+related setting:
+
+`python [CODE]'
+ The `python' command can be used to evaluate Python code.
+
+ If given an argument, the `python' command will evaluate the
+ argument as a Python command. For example:
+
+ (gdb) python print 23
+ 23
+
+ If you do not provide an argument to `python', it will act as a
+ multi-line command, like `define'. In this case, the Python
+ script is made up of subsequent command lines, given after the
+ `python' command. This command list is terminated using a line
+ containing `end'. For example:
+
+ (gdb) python
+ Type python script
+ End with a line saying just "end".
+ >print 23
+ >end
+ 23
+
+`maint set python print-stack'
+ By default, GDB will print a stack trace when an error occurs in a
+ Python script. This can be controlled using `maint set python
+ print-stack': if `on', the default, then Python stack printing is
+ enabled; if `off', then Python stack printing is disabled.
+
+ It is also possible to execute a Python script from the GDB
+interpreter:
+
+`source `script-name''
+ The script name must end with `.py' and GDB must be configured to
+ recognize the script language based on filename extension using
+ the `script-extension' setting. *Note Extending GDB: Extending
+ GDB.
+
+`python execfile ("script-name")'
+ This method is based on the `execfile' Python built-in function,
+ and thus is always available.
+
+
+File: gdb.info, Node: Python API, Next: Auto-loading, Prev: Python Commands, Up: Python
+
+23.2.2 Python API
+-----------------
+
+At startup, GDB overrides Python's `sys.stdout' and `sys.stderr' to
+print using GDB's output-paging streams. A Python program which
+outputs to one of these streams may have its output interrupted by the
+user (*note Screen Size::). In this situation, a Python
+`KeyboardInterrupt' exception is thrown.
+
+* Menu:
+
+* Basic Python:: Basic Python Functions.
+* Exception Handling:: How Python exceptions are translated.
+* Values From Inferior:: Python representation of values.
+* Types In Python:: Python representation of types.
+* Pretty Printing API:: Pretty-printing values.
+* Selecting Pretty-Printers:: How GDB chooses a pretty-printer.
+* Writing a Pretty-Printer:: Writing a Pretty-Printer.
+* Inferiors In Python:: Python representation of inferiors (processes)
+* Events In Python:: Listening for events from GDB.
+* Threads In Python:: Accessing inferior threads from Python.
+* Commands In Python:: Implementing new commands in Python.
+* Parameters In Python:: Adding new GDB parameters.
+* Functions In Python:: Writing new convenience functions.
+* Progspaces In Python:: Program spaces.
+* Objfiles In Python:: Object files.
+* Frames In Python:: Accessing inferior stack frames from Python.
+* Blocks In Python:: Accessing frame blocks from Python.
+* Symbols In Python:: Python representation of symbols.
+* Symbol Tables In Python:: Python representation of symbol tables.
+* Lazy Strings In Python:: Python representation of lazy strings.
+* Breakpoints In Python:: Manipulating breakpoints using Python.
+
+
+File: gdb.info, Node: Basic Python, Next: Exception Handling, Up: Python API
+
+23.2.2.1 Basic Python
+.....................
+
+GDB introduces a new Python module, named `gdb'. All methods and
+classes added by GDB are placed in this module. GDB automatically
+`import's the `gdb' module for use in all scripts evaluated by the
+`python' command.
+
+ -- Variable: PYTHONDIR
+ A string containing the python directory (*note Python::).
+
+ -- Function: execute command [from_tty] [to_string]
+ Evaluate COMMAND, a string, as a GDB CLI command. If a GDB
+ exception happens while COMMAND runs, it is translated as
+ described in *note Exception Handling: Exception Handling.
+
+ FROM_TTY specifies whether GDB ought to consider this command as
+ having originated from the user invoking it interactively. It
+ must be a boolean value. If omitted, it defaults to `False'.
+
+ By default, any output produced by COMMAND is sent to GDB's
+ standard output. If the TO_STRING parameter is `True', then
+ output will be collected by `gdb.execute' and returned as a
+ string. The default is `False', in which case the return value is
+ `None'. If TO_STRING is `True', the GDB virtual terminal will be
+ temporarily set to unlimited width and height, and its pagination
+ will be disabled; *note Screen Size::.
+
+ -- Function: breakpoints
+ Return a sequence holding all of GDB's breakpoints. *Note
+ Breakpoints In Python::, for more information.
+
+ -- Function: parameter parameter
+ Return the value of a GDB parameter. PARAMETER is a string naming
+ the parameter to look up; PARAMETER may contain spaces if the
+ parameter has a multi-part name. For example, `print object' is a
+ valid parameter name.
+
+ If the named parameter does not exist, this function throws a
+ `gdb.error' (*note Exception Handling::). Otherwise, the
+ parameter's value is converted to a Python value of the appropriate
+ type, and returned.
+
+ -- Function: history number
+ Return a value from GDB's value history (*note Value History::).
+ NUMBER indicates which history element to return. If NUMBER is
+ negative, then GDB will take its absolute value and count backward
+ from the last element (i.e., the most recent element) to find the
+ value to return. If NUMBER is zero, then GDB will return the most
+ recent element. If the element specified by NUMBER doesn't exist
+ in the value history, a `gdb.error' exception will be raised.
+
+ If no exception is raised, the return value is always an instance
+ of `gdb.Value' (*note Values From Inferior::).
+
+ -- Function: parse_and_eval expression
+ Parse EXPRESSION as an expression in the current language,
+ evaluate it, and return the result as a `gdb.Value'. EXPRESSION
+ must be a string.
+
+ This function can be useful when implementing a new command (*note
+ Commands In Python::), as it provides a way to parse the command's
+ argument as an expression. It is also useful simply to compute
+ values, for example, it is the only way to get the value of a
+ convenience variable (*note Convenience Vars::) as a `gdb.Value'.
+
+ -- Function: post_event event
+ Put EVENT, a callable object taking no arguments, into GDB's
+ internal event queue. This callable will be invoked at some later
+ point, during GDB's event processing. Events posted using
+ `post_event' will be run in the order in which they were posted;
+ however, there is no way to know when they will be processed
+ relative to other events inside GDB.
+
+ GDB is not thread-safe. If your Python program uses multiple
+ threads, you must be careful to only call GDB-specific functions
+ in the main GDB thread. `post_event' ensures this. For example:
+
+ (gdb) python
+ >import threading
+ >
+ >class Writer():
+ > def __init__(self, message):
+ > self.message = message;
+ > def __call__(self):
+ > gdb.write(self.message)
+ >
+ >class MyThread1 (threading.Thread):
+ > def run (self):
+ > gdb.post_event(Writer("Hello "))
+ >
+ >class MyThread2 (threading.Thread):
+ > def run (self):
+ > gdb.post_event(Writer("World\n"))
+ >
+ >MyThread1().start()
+ >MyThread2().start()
+ >end
+ (gdb) Hello World
+
+ -- Function: write string [stream]
+ Print a string to GDB's paginated output stream. The optional
+ STREAM determines the stream to print to. The default stream is
+ GDB's standard output stream. Possible stream values are:
+
+ `STDOUT'
+ GDB's standard output stream.
+
+ `STDERR'
+ GDB's standard error stream.
+
+ `STDLOG'
+ GDB's log stream (*note Logging Output::).
+
+ Writing to `sys.stdout' or `sys.stderr' will automatically call
+ this function and will automatically direct the output to the
+ relevant stream.
+
+ -- Function: flush
+ Flush the buffer of a GDB paginated stream so that the contents
+ are displayed immediately. GDB will flush the contents of a
+ stream automatically when it encounters a newline in the buffer.
+ The optional STREAM determines the stream to flush. The default
+ stream is GDB's standard output stream. Possible stream values
+ are:
+
+ `STDOUT'
+ GDB's standard output stream.
+
+ `STDERR'
+ GDB's standard error stream.
+
+ `STDLOG'
+ GDB's log stream (*note Logging Output::).
+
+
+ Flushing `sys.stdout' or `sys.stderr' will automatically call this
+ function for the relevant stream.
+
+ -- Function: target_charset
+ Return the name of the current target character set (*note
+ Character Sets::). This differs from
+ `gdb.parameter('target-charset')' in that `auto' is never returned.
+
+ -- Function: target_wide_charset
+ Return the name of the current target wide character set (*note
+ Character Sets::). This differs from
+ `gdb.parameter('target-wide-charset')' in that `auto' is never
+ returned.
+
+ -- Function: solib_name address
+ Return the name of the shared library holding the given ADDRESS as
+ a string, or `None'.
+
+ -- Function: decode_line [expression]
+ Return locations of the line specified by EXPRESSION, or of the
+ current line if no argument was given. This function returns a
+ Python tuple containing two elements. The first element contains
+ a string holding any unparsed section of EXPRESSION (or `None' if
+ the expression has been fully parsed). The second element contains
+ either `None' or another tuple that contains all the locations
+ that match the expression represented as `gdb.Symtab_and_line'
+ objects (*note Symbol Tables In Python::). If EXPRESSION is
+ provided, it is decoded the way that GDB's inbuilt `break' or
+ `edit' commands do (*note Specify Location::).
+
+
+File: gdb.info, Node: Exception Handling, Next: Values From Inferior, Prev: Basic Python, Up: Python API
+
+23.2.2.2 Exception Handling
+...........................
+
+When executing the `python' command, Python exceptions uncaught within
+the Python code are translated to calls to GDB error-reporting
+mechanism. If the command that called `python' does not handle the
+error, GDB will terminate it and print an error message containing the
+Python exception name, the associated value, and the Python call stack
+backtrace at the point where the exception was raised. Example:
+
+ (gdb) python print foo
+ Traceback (most recent call last):
+ File "<string>", line 1, in <module>
+ NameError: name 'foo' is not defined
+
+ GDB errors that happen in GDB commands invoked by Python code are
+converted to Python exceptions. The type of the Python exception
+depends on the error.
+
+`gdb.error'
+ This is the base class for most exceptions generated by GDB. It
+ is derived from `RuntimeError', for compatibility with earlier
+ versions of GDB.
+
+ If an error occurring in GDB does not fit into some more specific
+ category, then the generated exception will have this type.
+
+`gdb.MemoryError'
+ This is a subclass of `gdb.error' which is thrown when an
+ operation tried to access invalid memory in the inferior.
+
+`KeyboardInterrupt'
+ User interrupt (via `C-c' or by typing `q' at a pagination prompt)
+ is translated to a Python `KeyboardInterrupt' exception.
+
+ In all cases, your exception handler will see the GDB error message
+as its value and the Python call stack backtrace at the Python
+statement closest to where the GDB error occured as the traceback.
+
+ When implementing GDB commands in Python via `gdb.Command', it is
+useful to be able to throw an exception that doesn't cause a traceback
+to be printed. For example, the user may have invoked the command
+incorrectly. Use the `gdb.GdbError' exception to handle this case.
+Example:
+
+ (gdb) python
+ >class HelloWorld (gdb.Command):
+ > """Greet the whole world."""
+ > def __init__ (self):
+ > super (HelloWorld, self).__init__ ("hello-world", gdb.COMMAND_OBSCURE)
+ > def invoke (self, args, from_tty):
+ > argv = gdb.string_to_argv (args)
+ > if len (argv) != 0:
+ > raise gdb.GdbError ("hello-world takes no arguments")
+ > print "Hello, World!"
+ >HelloWorld ()
+ >end
+ (gdb) hello-world 42
+ hello-world takes no arguments
+
+
+File: gdb.info, Node: Values From Inferior, Next: Types In Python, Prev: Exception Handling, Up: Python API
+
+23.2.2.3 Values From Inferior
+.............................
+
+GDB provides values it obtains from the inferior program in an object
+of type `gdb.Value'. GDB uses this object for its internal bookkeeping
+of the inferior's values, and for fetching values when necessary.
+
+ Inferior values that are simple scalars can be used directly in
+Python expressions that are valid for the value's data type. Here's an
+example for an integer or floating-point value `some_val':
+
+ bar = some_val + 2
+
+As result of this, `bar' will also be a `gdb.Value' object whose values
+are of the same type as those of `some_val'.
+
+ Inferior values that are structures or instances of some class can
+be accessed using the Python "dictionary syntax". For example, if
+`some_val' is a `gdb.Value' instance holding a structure, you can
+access its `foo' element with:
+
+ bar = some_val['foo']
+
+ Again, `bar' will also be a `gdb.Value' object.
+
+ A `gdb.Value' that represents a function can be executed via
+inferior function call. Any arguments provided to the call must match
+the function's prototype, and must be provided in the order specified
+by that prototype.
+
+ For example, `some_val' is a `gdb.Value' instance representing a
+function that takes two integers as arguments. To execute this
+function, call it like so:
+
+ result = some_val (10,20)
+
+ Any values returned from a function call will be stored as a
+`gdb.Value'.
+
+ The following attributes are provided:
+
+ -- Instance Variable of Value: address
+ If this object is addressable, this read-only attribute holds
+ a `gdb.Value' object representing the address. Otherwise,
+ this attribute holds `None'.
+
+ -- Instance Variable of Value: is_optimized_out
+ This read-only boolean attribute is true if the compiler
+ optimized out this value, thus it is not available for
+ fetching from the inferior.
+
+ -- Instance Variable of Value: type
+ The type of this `gdb.Value'. The value of this attribute is
+ a `gdb.Type' object (*note Types In Python::).
+
+ -- Instance Variable of Value: dynamic_type
+ The dynamic type of this `gdb.Value'. This uses C++ run-time
+ type information (RTTI) to determine the dynamic type of the
+ value. If this value is of class type, it will return the
+ class in which the value is embedded, if any. If this value
+ is of pointer or reference to a class type, it will compute
+ the dynamic type of the referenced object, and return a
+ pointer or reference to that type, respectively. In all
+ other cases, it will return the value's static type.
+
+ Note that this feature will only work when debugging a C++
+ program that includes RTTI for the object in question.
+ Otherwise, it will just return the static type of the value
+ as in `ptype foo' (*note ptype: Symbols.).
+
+ The following methods are provided:
+
+ -- Method on Value: __init__ VAL
+ Many Python values can be converted directly to a `gdb.Value'
+ via this object initializer. Specifically:
+
+ Python boolean
+ A Python boolean is converted to the boolean type from
+ the current language.
+
+ Python integer
+ A Python integer is converted to the C `long' type for
+ the current architecture.
+
+ Python long
+ A Python long is converted to the C `long long' type for
+ the current architecture.
+
+ Python float
+ A Python float is converted to the C `double' type for
+ the current architecture.
+
+ Python string
+ A Python string is converted to a target string, using
+ the current target encoding.
+
+ `gdb.Value'
+ If `val' is a `gdb.Value', then a copy of the value is
+ made.
+
+ `gdb.LazyString'
+ If `val' is a `gdb.LazyString' (*note Lazy Strings In
+ Python::), then the lazy string's `value' method is
+ called, and its result is used.
+
+ -- Method on Value: cast type
+ Return a new instance of `gdb.Value' that is the result of
+ casting this instance to the type described by TYPE, which
+ must be a `gdb.Type' object. If the cast cannot be performed
+ for some reason, this method throws an exception.
+
+ -- Method on Value: dereference
+ For pointer data types, this method returns a new `gdb.Value'
+ object whose contents is the object pointed to by the
+ pointer. For example, if `foo' is a C pointer to an `int',
+ declared in your C program as
+
+ int *foo;
+
+ then you can use the corresponding `gdb.Value' to access what
+ `foo' points to like this:
+
+ bar = foo.dereference ()
+
+ The result `bar' will be a `gdb.Value' object holding the
+ value pointed to by `foo'.
+
+ -- Method on Value: dynamic_cast type
+ Like `Value.cast', but works as if the C++ `dynamic_cast'
+ operator were used. Consult a C++ reference for details.
+
+ -- Method on Value: reinterpret_cast type
+ Like `Value.cast', but works as if the C++ `reinterpret_cast'
+ operator were used. Consult a C++ reference for details.
+
+ -- Method on Value: string [encoding] [errors] [length]
+ If this `gdb.Value' represents a string, then this method
+ converts the contents to a Python string. Otherwise, this
+ method will throw an exception.
+
+ Strings are recognized in a language-specific way; whether a
+ given `gdb.Value' represents a string is determined by the
+ current language.
+
+ For C-like languages, a value is a string if it is a pointer
+ to or an array of characters or ints. The string is assumed
+ to be terminated by a zero of the appropriate width. However
+ if the optional length argument is given, the string will be
+ converted to that given length, ignoring any embedded zeros
+ that the string may contain.
+
+ If the optional ENCODING argument is given, it must be a
+ string naming the encoding of the string in the `gdb.Value',
+ such as `"ascii"', `"iso-8859-6"' or `"utf-8"'. It accepts
+ the same encodings as the corresponding argument to Python's
+ `string.decode' method, and the Python codec machinery will
+ be used to convert the string. If ENCODING is not given, or
+ if ENCODING is the empty string, then either the
+ `target-charset' (*note Character Sets::) will be used, or a
+ language-specific encoding will be used, if the current
+ language is able to supply one.
+
+ The optional ERRORS argument is the same as the corresponding
+ argument to Python's `string.decode' method.
+
+ If the optional LENGTH argument is given, the string will be
+ fetched and converted to the given length.
+
+ -- Method on Value: lazy_string [encoding] [length]
+ If this `gdb.Value' represents a string, then this method
+ converts the contents to a `gdb.LazyString' (*note Lazy
+ Strings In Python::). Otherwise, this method will throw an
+ exception.
+
+ If the optional ENCODING argument is given, it must be a
+ string naming the encoding of the `gdb.LazyString'. Some
+ examples are: `ascii', `iso-8859-6' or `utf-8'. If the
+ ENCODING argument is an encoding that GDB does recognize, GDB
+ will raise an error.
+
+ When a lazy string is printed, the GDB encoding machinery is
+ used to convert the string during printing. If the optional
+ ENCODING argument is not provided, or is an empty string, GDB
+ will automatically select the encoding most suitable for the
+ string type. For further information on encoding in GDB
+ please see *note Character Sets::.
+
+ If the optional LENGTH argument is given, the string will be
+ fetched and encoded to the length of characters specified. If
+ the LENGTH argument is not provided, the string will be
+ fetched and encoded until a null of appropriate width is
+ found.
+
+
+File: gdb.info, Node: Types In Python, Next: Pretty Printing API, Prev: Values From Inferior, Up: Python API
+
+23.2.2.4 Types In Python
+........................
+
+GDB represents types from the inferior using the class `gdb.Type'.
+
+ The following type-related functions are available in the `gdb'
+module:
+
+ -- Function: lookup_type name [block]
+ This function looks up a type by name. NAME is the name of the
+ type to look up. It must be a string.
+
+ If BLOCK is given, then NAME is looked up in that scope.
+ Otherwise, it is searched for globally.
+
+ Ordinarily, this function will return an instance of `gdb.Type'.
+ If the named type cannot be found, it will throw an exception.
+
+ An instance of `Type' has the following attributes:
+
+ -- Instance Variable of Type: code
+ The type code for this type. The type code will be one of the
+ `TYPE_CODE_' constants defined below.
+
+ -- Instance Variable of Type: sizeof
+ The size of this type, in target `char' units. Usually, a
+ target's `char' type will be an 8-bit byte. However, on some
+ unusual platforms, this type may have a different size.
+
+ -- Instance Variable of Type: tag
+ The tag name for this type. The tag name is the name after
+ `struct', `union', or `enum' in C and C++; not all languages
+ have this concept. If this type has no tag name, then `None'
+ is returned.
+
+ The following methods are provided:
+
+ -- Method on Type: fields
+ For structure and union types, this method returns the
+ fields. Range types have two fields, the minimum and maximum
+ values. Enum types have one field per enum constant.
+ Function and method types have one field per parameter. The
+ base types of C++ classes are also represented as fields. If
+ the type has no fields, or does not fit into one of these
+ categories, an empty sequence will be returned.
+
+ Each field is an object, with some pre-defined attributes:
+ `bitpos'
+ This attribute is not available for `static' fields (as
+ in C++ or Java). For non-`static' fields, the value is
+ the bit position of the field.
+
+ `name'
+ The name of the field, or `None' for anonymous fields.
+
+ `artificial'
+ This is `True' if the field is artificial, usually
+ meaning that it was provided by the compiler and not the
+ user. This attribute is always provided, and is `False'
+ if the field is not artificial.
+
+ `is_base_class'
+ This is `True' if the field represents a base class of a
+ C++ structure. This attribute is always provided, and
+ is `False' if the field is not a base class of the type
+ that is the argument of `fields', or if that type was
+ not a C++ class.
+
+ `bitsize'
+ If the field is packed, or is a bitfield, then this will
+ have a non-zero value, which is the size of the field in
+ bits. Otherwise, this will be zero; in this case the
+ field's size is given by its type.
+
+ `type'
+ The type of the field. This is usually an instance of
+ `Type', but it can be `None' in some situations.
+
+ -- Method on Type: array N1 [N2]
+ Return a new `gdb.Type' object which represents an array of
+ this type. If one argument is given, it is the inclusive
+ upper bound of the array; in this case the lower bound is
+ zero. If two arguments are given, the first argument is the
+ lower bound of the array, and the second argument is the
+ upper bound of the array. An array's length must not be
+ negative, but the bounds can be.
+
+ -- Method on Type: const
+ Return a new `gdb.Type' object which represents a
+ `const'-qualified variant of this type.
+
+ -- Method on Type: volatile
+ Return a new `gdb.Type' object which represents a
+ `volatile'-qualified variant of this type.
+
+ -- Method on Type: unqualified
+ Return a new `gdb.Type' object which represents an unqualified
+ variant of this type. That is, the result is neither `const'
+ nor `volatile'.
+
+ -- Method on Type: range
+ Return a Python `Tuple' object that contains two elements: the
+ low bound of the argument type and the high bound of that
+ type. If the type does not have a range, GDB will raise a
+ `gdb.error' exception (*note Exception Handling::).
+
+ -- Method on Type: reference
+ Return a new `gdb.Type' object which represents a reference
+ to this type.
+
+ -- Method on Type: pointer
+ Return a new `gdb.Type' object which represents a pointer to
+ this type.
+
+ -- Method on Type: strip_typedefs
+ Return a new `gdb.Type' that represents the real type, after
+ removing all layers of typedefs.
+
+ -- Method on Type: target
+ Return a new `gdb.Type' object which represents the target
+ type of this type.
+
+ For a pointer type, the target type is the type of the
+ pointed-to object. For an array type (meaning C-like
+ arrays), the target type is the type of the elements of the
+ array. For a function or method type, the target type is the
+ type of the return value. For a complex type, the target
+ type is the type of the elements. For a typedef, the target
+ type is the aliased type.
+
+ If the type does not have a target, this method will throw an
+ exception.
+
+ -- Method on Type: template_argument n [block]
+ If this `gdb.Type' is an instantiation of a template, this
+ will return a new `gdb.Type' which represents the type of the
+ Nth template argument.
+
+ If this `gdb.Type' is not a template type, this will throw an
+ exception. Ordinarily, only C++ code will have template
+ types.
+
+ If BLOCK is given, then NAME is looked up in that scope.
+ Otherwise, it is searched for globally.
+
+ Each type has a code, which indicates what category this type falls
+into. The available type categories are represented by constants
+defined in the `gdb' module:
+
+`TYPE_CODE_PTR'
+ The type is a pointer.
+
+`TYPE_CODE_ARRAY'
+ The type is an array.
+
+`TYPE_CODE_STRUCT'
+ The type is a structure.
+
+`TYPE_CODE_UNION'
+ The type is a union.
+
+`TYPE_CODE_ENUM'
+ The type is an enum.
+
+`TYPE_CODE_FLAGS'
+ A bit flags type, used for things such as status registers.
+
+`TYPE_CODE_FUNC'
+ The type is a function.
+
+`TYPE_CODE_INT'
+ The type is an integer type.
+
+`TYPE_CODE_FLT'
+ A floating point type.
+
+`TYPE_CODE_VOID'
+ The special type `void'.
+
+`TYPE_CODE_SET'
+ A Pascal set type.
+
+`TYPE_CODE_RANGE'
+ A range type, that is, an integer type with bounds.
+
+`TYPE_CODE_STRING'
+ A string type. Note that this is only used for certain languages
+ with language-defined string types; C strings are not represented
+ this way.
+
+`TYPE_CODE_BITSTRING'
+ A string of bits.
+
+`TYPE_CODE_ERROR'
+ An unknown or erroneous type.
+
+`TYPE_CODE_METHOD'
+ A method type, as found in C++ or Java.
+
+`TYPE_CODE_METHODPTR'
+ A pointer-to-member-function.
+
+`TYPE_CODE_MEMBERPTR'
+ A pointer-to-member.
+
+`TYPE_CODE_REF'
+ A reference type.
+
+`TYPE_CODE_CHAR'
+ A character type.
+
+`TYPE_CODE_BOOL'
+ A boolean type.
+
+`TYPE_CODE_COMPLEX'
+ A complex float type.
+
+`TYPE_CODE_TYPEDEF'
+ A typedef to some other type.
+
+`TYPE_CODE_NAMESPACE'
+ A C++ namespace.
+
+`TYPE_CODE_DECFLOAT'
+ A decimal floating point type.
+
+`TYPE_CODE_INTERNAL_FUNCTION'
+ A function internal to GDB. This is the type used to represent
+ convenience functions.
+
+ Further support for types is provided in the `gdb.types' Python
+module (*note gdb.types::).
+
+
+File: gdb.info, Node: Pretty Printing API, Next: Selecting Pretty-Printers, Prev: Types In Python, Up: Python API
+
+23.2.2.5 Pretty Printing API
+............................
+
+An example output is provided (*note Pretty Printing::).
+
+ A pretty-printer is just an object that holds a value and implements
+a specific interface, defined here.
+
+ -- Operation on pretty printer: children (self)
+ GDB will call this method on a pretty-printer to compute the
+ children of the pretty-printer's value.
+
+ This method must return an object conforming to the Python iterator
+ protocol. Each item returned by the iterator must be a tuple
+ holding two elements. The first element is the "name" of the
+ child; the second element is the child's value. The value can be
+ any Python object which is convertible to a GDB value.
+
+ This method is optional. If it does not exist, GDB will act as
+ though the value has no children.
+
+ -- Operation on pretty printer: display_hint (self)
+ The CLI may call this method and use its result to change the
+ formatting of a value. The result will also be supplied to an MI
+ consumer as a `displayhint' attribute of the variable being
+ printed.
+
+ This method is optional. If it does exist, this method must
+ return a string.
+
+ Some display hints are predefined by GDB:
+
+ `array'
+ Indicate that the object being printed is "array-like". The
+ CLI uses this to respect parameters such as `set print
+ elements' and `set print array'.
+
+ `map'
+ Indicate that the object being printed is "map-like", and
+ that the children of this value can be assumed to alternate
+ between keys and values.
+
+ `string'
+ Indicate that the object being printed is "string-like". If
+ the printer's `to_string' method returns a Python string of
+ some kind, then GDB will call its internal language-specific
+ string-printing function to format the string. For the CLI
+ this means adding quotation marks, possibly escaping some
+ characters, respecting `set print elements', and the like.
+
+ -- Operation on pretty printer: to_string (self)
+ GDB will call this method to display the string representation of
+ the value passed to the object's constructor.
+
+ When printing from the CLI, if the `to_string' method exists, then
+ GDB will prepend its result to the values returned by `children'.
+ Exactly how this formatting is done is dependent on the display
+ hint, and may change as more hints are added. Also, depending on
+ the print settings (*note Print Settings::), the CLI may print
+ just the result of `to_string' in a stack trace, omitting the
+ result of `children'.
+
+ If this method returns a string, it is printed verbatim.
+
+ Otherwise, if this method returns an instance of `gdb.Value', then
+ GDB prints this value. This may result in a call to another
+ pretty-printer.
+
+ If instead the method returns a Python value which is convertible
+ to a `gdb.Value', then GDB performs the conversion and prints the
+ resulting value. Again, this may result in a call to another
+ pretty-printer. Python scalars (integers, floats, and booleans)
+ and strings are convertible to `gdb.Value'; other types are not.
+
+ Finally, if this method returns `None' then no further operations
+ are peformed in this method and nothing is printed.
+
+ If the result is not one of these types, an exception is raised.
+
+ GDB provides a function which can be used to look up the default
+pretty-printer for a `gdb.Value':
+
+ -- Function: default_visualizer value
+ This function takes a `gdb.Value' object as an argument. If a
+ pretty-printer for this value exists, then it is returned. If no
+ such printer exists, then this returns `None'.
+
+
+File: gdb.info, Node: Selecting Pretty-Printers, Next: Writing a Pretty-Printer, Prev: Pretty Printing API, Up: Python API
+
+23.2.2.6 Selecting Pretty-Printers
+..................................
+
+The Python list `gdb.pretty_printers' contains an array of functions or
+callable objects that have been registered via addition as a
+pretty-printer. Printers in this list are called `global' printers,
+they're available when debugging all inferiors. Each `gdb.Progspace'
+contains a `pretty_printers' attribute. Each `gdb.Objfile' also
+contains a `pretty_printers' attribute.
+
+ Each function on these lists is passed a single `gdb.Value' argument
+and should return a pretty-printer object conforming to the interface
+definition above (*note Pretty Printing API::). If a function cannot
+create a pretty-printer for the value, it should return `None'.
+
+ GDB first checks the `pretty_printers' attribute of each
+`gdb.Objfile' in the current program space and iteratively calls each
+enabled lookup routine in the list for that `gdb.Objfile' until it
+receives a pretty-printer object. If no pretty-printer is found in the
+objfile lists, GDB then searches the pretty-printer list of the current
+program space, calling each enabled function until an object is
+returned. After these lists have been exhausted, it tries the global
+`gdb.pretty_printers' list, again calling each enabled function until an
+object is returned.
+
+ The order in which the objfiles are searched is not specified. For a
+given list, functions are always invoked from the head of the list, and
+iterated over sequentially until the end of the list, or a printer
+object is returned.
+
+ For various reasons a pretty-printer may not work. For example, the
+underlying data structure may have changed and the pretty-printer is
+out of date.
+
+ The consequences of a broken pretty-printer are severe enough that
+GDB provides support for enabling and disabling individual printers.
+For example, if `print frame-arguments' is on, a backtrace can become
+highly illegible if any argument is printed with a broken printer.
+
+ Pretty-printers are enabled and disabled by attaching an `enabled'
+attribute to the registered function or callable object. If this
+attribute is present and its value is `False', the printer is disabled,
+otherwise the printer is enabled.
+
+
+File: gdb.info, Node: Writing a Pretty-Printer, Next: Inferiors In Python, Prev: Selecting Pretty-Printers, Up: Python API
+
+23.2.2.7 Writing a Pretty-Printer
+.................................
+
+A pretty-printer consists of two parts: a lookup function to detect if
+the type is supported, and the printer itself.
+
+ Here is an example showing how a `std::string' printer might be
+written. *Note Pretty Printing API::, for details on the API this class
+must provide.
+
+ class StdStringPrinter(object):
+ "Print a std::string"
+
+ def __init__(self, val):
+ self.val = val
+
+ def to_string(self):
+ return self.val['_M_dataplus']['_M_p']
+
+ def display_hint(self):
+ return 'string'
+
+ And here is an example showing how a lookup function for the printer
+example above might be written.
+
+ def str_lookup_function(val):
+ lookup_tag = val.type.tag
+ if lookup_tag == None:
+ return None
+ regex = re.compile("^std::basic_string<char,.*>$")
+ if regex.match(lookup_tag):
+ return StdStringPrinter(val)
+ return None
+
+ The example lookup function extracts the value's type, and attempts
+to match it to a type that it can pretty-print. If it is a type the
+printer can pretty-print, it will return a printer object. If not, it
+returns `None'.
+
+ We recommend that you put your core pretty-printers into a Python
+package. If your pretty-printers are for use with a library, we
+further recommend embedding a version number into the package name.
+This practice will enable GDB to load multiple versions of your
+pretty-printers at the same time, because they will have different
+names.
+
+ You should write auto-loaded code (*note Auto-loading::) such that it
+can be evaluated multiple times without changing its meaning. An ideal
+auto-load file will consist solely of `import's of your printer
+modules, followed by a call to a register pretty-printers with the
+current objfile.
+
+ Taken as a whole, this approach will scale nicely to multiple
+inferiors, each potentially using a different library version.
+Embedding a version number in the Python package name will ensure that
+GDB is able to load both sets of printers simultaneously. Then,
+because the search for pretty-printers is done by objfile, and because
+your auto-loaded code took care to register your library's printers
+with a specific objfile, GDB will find the correct printers for the
+specific version of the library used by each inferior.
+
+ To continue the `std::string' example (*note Pretty Printing API::),
+this code might appear in `gdb.libstdcxx.v6':
+
+ def register_printers(objfile):
+ objfile.pretty_printers.add(str_lookup_function)
+
+And then the corresponding contents of the auto-load file would be:
+
+ import gdb.libstdcxx.v6
+ gdb.libstdcxx.v6.register_printers(gdb.current_objfile())
+
+ The previous example illustrates a basic pretty-printer. There are
+a few things that can be improved on. The printer doesn't have a name,
+making it hard to identify in a list of installed printers. The lookup
+function has a name, but lookup functions can have arbitrary, even
+identical, names.
+
+ Second, the printer only handles one type, whereas a library
+typically has several types. One could install a lookup function for
+each desired type in the library, but one could also have a single
+lookup function recognize several types. The latter is the
+conventional way this is handled. If a pretty-printer can handle
+multiple data types, then its "subprinters" are the printers for the
+individual data types.
+
+ The `gdb.printing' module provides a formal way of solving these
+problems (*note gdb.printing::). Here is another example that handles
+multiple types.
+
+ These are the types we are going to pretty-print:
+
+ struct foo { int a, b; };
+ struct bar { struct foo x, y; };
+
+ Here are the printers:
+
+ class fooPrinter:
+ """Print a foo object."""
+
+ def __init__(self, val):
+ self.val = val
+
+ def to_string(self):
+ return ("a=<" + str(self.val["a"]) +
+ "> b=<" + str(self.val["b"]) + ">")
+
+ class barPrinter:
+ """Print a bar object."""
+
+ def __init__(self, val):
+ self.val = val
+
+ def to_string(self):
+ return ("x=<" + str(self.val["x"]) +
+ "> y=<" + str(self.val["y"]) + ">")
+
+ This example doesn't need a lookup function, that is handled by the
+`gdb.printing' module. Instead a function is provided to build up the
+object that handles the lookup.
+
+ import gdb.printing
+
+ def build_pretty_printer():
+ pp = gdb.printing.RegexpCollectionPrettyPrinter(
+ "my_library")
+ pp.add_printer('foo', '^foo$', fooPrinter)
+ pp.add_printer('bar', '^bar$', barPrinter)
+ return pp
+
+ And here is the autoload support:
+
+ import gdb.printing
+ import my_library
+ gdb.printing.register_pretty_printer(
+ gdb.current_objfile(),
+ my_library.build_pretty_printer())
+
+ Finally, when this printer is loaded into GDB, here is the
+corresponding output of `info pretty-printer':
+
+ (gdb) info pretty-printer
+ my_library.so:
+ my_library
+ foo
+ bar
+
+
+File: gdb.info, Node: Inferiors In Python, Next: Events In Python, Prev: Writing a Pretty-Printer, Up: Python API
+
+23.2.2.8 Inferiors In Python
+............................
+
+Programs which are being run under GDB are called inferiors (*note
+Inferiors and Programs::). Python scripts can access information about
+and manipulate inferiors controlled by GDB via objects of the
+`gdb.Inferior' class.
+
+ The following inferior-related functions are available in the `gdb'
+module:
+
+ -- Function: inferiors
+ Return a tuple containing all inferior objects.
+
+ A `gdb.Inferior' object has the following attributes:
+
+ -- Instance Variable of Inferior: num
+ ID of inferior, as assigned by GDB.
+
+ -- Instance Variable of Inferior: pid
+ Process ID of the inferior, as assigned by the underlying
+ operating system.
+
+ -- Instance Variable of Inferior: was_attached
+ Boolean signaling whether the inferior was created using
+ `attach', or started by GDB itself.
+
+ A `gdb.Inferior' object has the following methods:
+
+ -- Method on Inferior: is_valid
+ Returns `True' if the `gdb.Inferior' object is valid, `False'
+ if not. A `gdb.Inferior' object will become invalid if the
+ inferior no longer exists within GDB. All other
+ `gdb.Inferior' methods will throw an exception if it is
+ invalid at the time the method is called.
+
+ -- Method on Inferior: threads
+ This method returns a tuple holding all the threads which are
+ valid when it is called. If there are no valid threads, the
+ method will return an empty tuple.
+
+ -- Method on Inferior: read_memory address length
+ Read LENGTH bytes of memory from the inferior, starting at
+ ADDRESS. Returns a buffer object, which behaves much like an
+ array or a string. It can be modified and given to the
+ `gdb.write_memory' function.
+
+ -- Method on Inferior: write_memory address buffer [length]
+ Write the contents of BUFFER to the inferior, starting at
+ ADDRESS. The BUFFER parameter must be a Python object which
+ supports the buffer protocol, i.e., a string, an array or the
+ object returned from `gdb.read_memory'. If given, LENGTH
+ determines the number of bytes from BUFFER to be written.
+
+ -- Method on Inferior: search_memory address length pattern
+ Search a region of the inferior memory starting at ADDRESS
+ with the given LENGTH using the search pattern supplied in
+ PATTERN. The PATTERN parameter must be a Python object which
+ supports the buffer protocol, i.e., a string, an array or the
+ object returned from `gdb.read_memory'. Returns a Python
+ `Long' containing the address where the pattern was found, or
+ `None' if the pattern could not be found.
+
+
+File: gdb.info, Node: Events In Python, Next: Threads In Python, Prev: Inferiors In Python, Up: Python API
+
+23.2.2.9 Events In Python
+.........................
+
+GDB provides a general event facility so that Python code can be
+notified of various state changes, particularly changes that occur in
+the inferior.
+
+ An "event" is just an object that describes some state change. The
+type of the object and its attributes will vary depending on the details
+of the change. All the existing events are described below.
+
+ In order to be notified of an event, you must register an event
+handler with an "event registry". An event registry is an object in the
+`gdb.events' module which dispatches particular events. A registry
+provides methods to register and unregister event handlers:
+
+ -- Method on EventRegistry: connect object
+ Add the given callable OBJECT to the registry. This object
+ will be called when an event corresponding to this registry
+ occurs.
+
+ -- Method on EventRegistry: disconnect object
+ Remove the given OBJECT from the registry. Once removed, the
+ object will no longer receive notifications of events.
+
+ Here is an example:
+
+ def exit_handler (event):
+ print "event type: exit"
+ print "exit code: %d" % (event.exit_code)
+
+ gdb.events.exited.connect (exit_handler)
+
+ In the above example we connect our handler `exit_handler' to the
+registry `events.exited'. Once connected, `exit_handler' gets called
+when the inferior exits. The argument "event" in this example is of
+type `gdb.ExitedEvent'. As you can see in the example the
+`ExitedEvent' object has an attribute which indicates the exit code of
+the inferior.
+
+ The following is a listing of the event registries that are
+available and details of the events they emit:
+
+`events.cont'
+ Emits `gdb.ThreadEvent'.
+
+ Some events can be thread specific when GDB is running in non-stop
+ mode. When represented in Python, these events all extend
+ `gdb.ThreadEvent'. Note, this event is not emitted directly;
+ instead, events which are emitted by this or other modules might
+ extend this event. Examples of these events are
+ `gdb.BreakpointEvent' and `gdb.ContinueEvent'.
+
+ -- Instance Variable of ThreadEvent: inferior_thread
+ In non-stop mode this attribute will be set to the
+ specific thread which was involved in the emitted event.
+ Otherwise, it will be set to `None'.
+
+ Emits `gdb.ContinueEvent' which extends `gdb.ThreadEvent'.
+
+ This event indicates that the inferior has been continued after a
+ stop. For inherited attribute refer to `gdb.ThreadEvent' above.
+
+`events.exited'
+ Emits `events.ExitedEvent' which indicates that the inferior has
+ exited. `events.ExitedEvent' has one optional attribute. This
+ attribute will exist only in the case that the inferior exited
+ with some status.
+ -- Instance Variable of ExitedEvent: exit_code
+ An integer representing the exit code which the inferior
+ has returned.
+
+`events.stop'
+ Emits `gdb.StopEvent' which extends `gdb.ThreadEvent'.
+
+ Indicates that the inferior has stopped. All events emitted by
+ this registry extend StopEvent. As a child of `gdb.ThreadEvent',
+ `gdb.StopEvent' will indicate the stopped thread when GDB is
+ running in non-stop mode. Refer to `gdb.ThreadEvent' above for
+ more details.
+
+ Emits `gdb.SignalEvent' which extends `gdb.StopEvent'.
+
+ This event indicates that the inferior or one of its threads has
+ received as signal. `gdb.SignalEvent' has the following
+ attributes:
+
+ -- Instance Variable of SignalEvent: stop_signal
+ A string representing the signal received by the
+ inferior. A list of possible signal values can be
+ obtained by running the command `info signals' in the
+ GDB command prompt.
+
+ Also emits `gdb.BreakpointEvent' which extends `gdb.StopEvent'.
+
+ `gdb.BreakpointEvent' event indicates that a breakpoint has been
+ hit, and has the following attributes:
+
+ -- Instance Variable of BreakpointEvent: breakpoint
+ A reference to the breakpoint that was hit of type
+ `gdb.Breakpoint'. *Note Breakpoints In Python::, for
+ details of the `gdb.Breakpoint' object.
+
+
+
+File: gdb.info, Node: Threads In Python, Next: Commands In Python, Prev: Events In Python, Up: Python API
+
+23.2.2.10 Threads In Python
+...........................
+
+Python scripts can access information about, and manipulate inferior
+threads controlled by GDB, via objects of the `gdb.InferiorThread'
+class.
+
+ The following thread-related functions are available in the `gdb'
+module:
+
+ -- Function: selected_thread
+ This function returns the thread object for the selected thread.
+ If there is no selected thread, this will return `None'.
+
+ A `gdb.InferiorThread' object has the following attributes:
+
+ -- Instance Variable of InferiorThread: name
+ The name of the thread. If the user specified a name using
+ `thread name', then this returns that name. Otherwise, if an
+ OS-supplied name is available, then it is returned.
+ Otherwise, this returns `None'.
+
+ This attribute can be assigned to. The new value must be a
+ string object, which sets the new name, or `None', which
+ removes any user-specified thread name.
+
+ -- Instance Variable of InferiorThread: num
+ ID of the thread, as assigned by GDB.
+
+ -- Instance Variable of InferiorThread: ptid
+ ID of the thread, as assigned by the operating system. This
+ attribute is a tuple containing three integers. The first is
+ the Process ID (PID); the second is the Lightweight Process
+ ID (LWPID), and the third is the Thread ID (TID). Either the
+ LWPID or TID may be 0, which indicates that the operating
+ system does not use that identifier.
+
+ A `gdb.InferiorThread' object has the following methods:
+
+ -- Method on InferiorThread: is_valid
+ Returns `True' if the `gdb.InferiorThread' object is valid,
+ `False' if not. A `gdb.InferiorThread' object will become
+ invalid if the thread exits, or the inferior that the thread
+ belongs is deleted. All other `gdb.InferiorThread' methods
+ will throw an exception if it is invalid at the time the
+ method is called.
+
+ -- Method on InferiorThread: switch
+ This changes GDB's currently selected thread to the one
+ represented by this object.
+
+ -- Method on InferiorThread: is_stopped
+ Return a Boolean indicating whether the thread is stopped.
+
+ -- Method on InferiorThread: is_running
+ Return a Boolean indicating whether the thread is running.
+
+ -- Method on InferiorThread: is_exited
+ Return a Boolean indicating whether the thread is exited.
+
+
+File: gdb.info, Node: Commands In Python, Next: Parameters In Python, Prev: Threads In Python, Up: Python API
+
+23.2.2.11 Commands In Python
+............................
+
+You can implement new GDB CLI commands in Python. A CLI command is
+implemented using an instance of the `gdb.Command' class, most commonly
+using a subclass.
+
+ -- Method on Command: __init__ name COMMAND_CLASS [COMPLETER_CLASS]
+ [PREFIX]
+ The object initializer for `Command' registers the new command
+ with GDB. This initializer is normally invoked from the subclass'
+ own `__init__' method.
+
+ NAME is the name of the command. If NAME consists of multiple
+ words, then the initial words are looked for as prefix commands.
+ In this case, if one of the prefix commands does not exist, an
+ exception is raised.
+
+ There is no support for multi-line commands.
+
+ COMMAND_CLASS should be one of the `COMMAND_' constants defined
+ below. This argument tells GDB how to categorize the new command
+ in the help system.
+
+ COMPLETER_CLASS is an optional argument. If given, it should be
+ one of the `COMPLETE_' constants defined below. This argument
+ tells GDB how to perform completion for this command. If not
+ given, GDB will attempt to complete using the object's `complete'
+ method (see below); if no such method is found, an error will
+ occur when completion is attempted.
+
+ PREFIX is an optional argument. If `True', then the new command
+ is a prefix command; sub-commands of this command may be
+ registered.
+
+ The help text for the new command is taken from the Python
+ documentation string for the command's class, if there is one. If
+ no documentation string is provided, the default value "This
+ command is not documented." is used.
+
+ -- Method on Command: dont_repeat
+ By default, a GDB command is repeated when the user enters a blank
+ line at the command prompt. A command can suppress this behavior
+ by invoking the `dont_repeat' method. This is similar to the user
+ command `dont-repeat', see *note dont-repeat: Define.
+
+ -- Method on Command: invoke argument from_tty
+ This method is called by GDB when this command is invoked.
+
+ ARGUMENT is a string. It is the argument to the command, after
+ leading and trailing whitespace has been stripped.
+
+ FROM_TTY is a boolean argument. When true, this means that the
+ command was entered by the user at the terminal; when false it
+ means that the command came from elsewhere.
+
+ If this method throws an exception, it is turned into a GDB
+ `error' call. Otherwise, the return value is ignored.
+
+ To break ARGUMENT up into an argv-like string use
+ `gdb.string_to_argv'. This function behaves identically to GDB's
+ internal argument lexer `buildargv'. It is recommended to use
+ this for consistency. Arguments are separated by spaces and may
+ be quoted. Example:
+
+ print gdb.string_to_argv ("1 2\ \\\"3 '4 \"5' \"6 '7\"")
+ ['1', '2 "3', '4 "5', "6 '7"]
+
+
+ -- Method on Command: complete text word
+ This method is called by GDB when the user attempts completion on
+ this command. All forms of completion are handled by this method,
+ that is, the <TAB> and <M-?> key bindings (*note Completion::),
+ and the `complete' command (*note complete: Help.).
+
+ The arguments TEXT and WORD are both strings. TEXT holds the
+ complete command line up to the cursor's location. WORD holds the
+ last word of the command line; this is computed using a
+ word-breaking heuristic.
+
+ The `complete' method can return several values:
+ * If the return value is a sequence, the contents of the
+ sequence are used as the completions. It is up to `complete'
+ to ensure that the contents actually do complete the word. A
+ zero-length sequence is allowed, it means that there were no
+ completions available. Only string elements of the sequence
+ are used; other elements in the sequence are ignored.
+
+ * If the return value is one of the `COMPLETE_' constants
+ defined below, then the corresponding GDB-internal completion
+ function is invoked, and its result is used.
+
+ * All other results are treated as though there were no
+ available completions.
+
+ When a new command is registered, it must be declared as a member of
+some general class of commands. This is used to classify top-level
+commands in the on-line help system; note that prefix commands are not
+listed under their own category but rather that of their top-level
+command. The available classifications are represented by constants
+defined in the `gdb' module:
+
+`COMMAND_NONE'
+ The command does not belong to any particular class. A command in
+ this category will not be displayed in any of the help categories.
+
+`COMMAND_RUNNING'
+ The command is related to running the inferior. For example,
+ `start', `step', and `continue' are in this category. Type `help
+ running' at the GDB prompt to see a list of commands in this
+ category.
+
+`COMMAND_DATA'
+ The command is related to data or variables. For example, `call',
+ `find', and `print' are in this category. Type `help data' at the
+ GDB prompt to see a list of commands in this category.
+
+`COMMAND_STACK'
+ The command has to do with manipulation of the stack. For example,
+ `backtrace', `frame', and `return' are in this category. Type
+ `help stack' at the GDB prompt to see a list of commands in this
+ category.
+
+`COMMAND_FILES'
+ This class is used for file-related commands. For example,
+ `file', `list' and `section' are in this category. Type `help
+ files' at the GDB prompt to see a list of commands in this
+ category.
+
+`COMMAND_SUPPORT'
+ This should be used for "support facilities", generally meaning
+ things that are useful to the user when interacting with GDB, but
+ not related to the state of the inferior. For example, `help',
+ `make', and `shell' are in this category. Type `help support' at
+ the GDB prompt to see a list of commands in this category.
+
+`COMMAND_STATUS'
+ The command is an `info'-related command, that is, related to the
+ state of GDB itself. For example, `info', `macro', and `show' are
+ in this category. Type `help status' at the GDB prompt to see a
+ list of commands in this category.
+
+`COMMAND_BREAKPOINTS'
+ The command has to do with breakpoints. For example, `break',
+ `clear', and `delete' are in this category. Type `help
+ breakpoints' at the GDB prompt to see a list of commands in this
+ category.
+
+`COMMAND_TRACEPOINTS'
+ The command has to do with tracepoints. For example, `trace',
+ `actions', and `tfind' are in this category. Type `help
+ tracepoints' at the GDB prompt to see a list of commands in this
+ category.
+
+`COMMAND_OBSCURE'
+ The command is only used in unusual circumstances, or is not of
+ general interest to users. For example, `checkpoint', `fork', and
+ `stop' are in this category. Type `help obscure' at the GDB
+ prompt to see a list of commands in this category.
+
+`COMMAND_MAINTENANCE'
+ The command is only useful to GDB maintainers. The `maintenance'
+ and `flushregs' commands are in this category. Type `help
+ internals' at the GDB prompt to see a list of commands in this
+ category.
+
+ A new command can use a predefined completion function, either by
+specifying it via an argument at initialization, or by returning it
+from the `complete' method. These predefined completion constants are
+all defined in the `gdb' module:
+
+`COMPLETE_NONE'
+ This constant means that no completion should be done.
+
+`COMPLETE_FILENAME'
+ This constant means that filename completion should be performed.
+
+`COMPLETE_LOCATION'
+ This constant means that location completion should be done.
+ *Note Specify Location::.
+
+`COMPLETE_COMMAND'
+ This constant means that completion should examine GDB command
+ names.
+
+`COMPLETE_SYMBOL'
+ This constant means that completion should be done using symbol
+ names as the source.
+
+ The following code snippet shows how a trivial CLI command can be
+implemented in Python:
+
+ class HelloWorld (gdb.Command):
+ """Greet the whole world."""
+
+ def __init__ (self):
+ super (HelloWorld, self).__init__ ("hello-world", gdb.COMMAND_OBSCURE)
+
+ def invoke (self, arg, from_tty):
+ print "Hello, World!"
+
+ HelloWorld ()
+
+ The last line instantiates the class, and is necessary to trigger the
+registration of the command with GDB. Depending on how the Python code
+is read into GDB, you may need to import the `gdb' module explicitly.
+
+
+File: gdb.info, Node: Parameters In Python, Next: Functions In Python, Prev: Commands In Python, Up: Python API
+
+23.2.2.12 Parameters In Python
+..............................
+
+You can implement new GDB parameters using Python. A new parameter is
+implemented as an instance of the `gdb.Parameter' class.
+
+ Parameters are exposed to the user via the `set' and `show'
+commands. *Note Help::.
+
+ There are many parameters that already exist and can be set in GDB.
+Two examples are: `set follow fork' and `set charset'. Setting these
+parameters influences certain behavior in GDB. Similarly, you can
+define parameters that can be used to influence behavior in custom
+Python scripts and commands.
+
+ -- Method on Parameter: __init__ name COMMAND-CLASS PARAMETER-CLASS
+ [ENUM-SEQUENCE]
+ The object initializer for `Parameter' registers the new parameter
+ with GDB. This initializer is normally invoked from the subclass'
+ own `__init__' method.
+
+ NAME is the name of the new parameter. If NAME consists of
+ multiple words, then the initial words are looked for as prefix
+ parameters. An example of this can be illustrated with the `set
+ print' set of parameters. If NAME is `print foo', then `print'
+ will be searched as the prefix parameter. In this case the
+ parameter can subsequently be accessed in GDB as `set print foo'.
+
+ If NAME consists of multiple words, and no prefix parameter group
+ can be found, an exception is raised.
+
+ COMMAND-CLASS should be one of the `COMMAND_' constants (*note
+ Commands In Python::). This argument tells GDB how to categorize
+ the new parameter in the help system.
+
+ PARAMETER-CLASS should be one of the `PARAM_' constants defined
+ below. This argument tells GDB the type of the new parameter;
+ this information is used for input validation and completion.
+
+ If PARAMETER-CLASS is `PARAM_ENUM', then ENUM-SEQUENCE must be a
+ sequence of strings. These strings represent the possible values
+ for the parameter.
+
+ If PARAMETER-CLASS is not `PARAM_ENUM', then the presence of a
+ fourth argument will cause an exception to be thrown.
+
+ The help text for the new parameter is taken from the Python
+ documentation string for the parameter's class, if there is one.
+ If there is no documentation string, a default value is used.
+
+ -- Instance Variable of Parameter: set_doc
+ If this attribute exists, and is a string, then its value is used
+ as the help text for this parameter's `set' command. The value is
+ examined when `Parameter.__init__' is invoked; subsequent changes
+ have no effect.
+
+ -- Instance Variable of Parameter: show_doc
+ If this attribute exists, and is a string, then its value is used
+ as the help text for this parameter's `show' command. The value is
+ examined when `Parameter.__init__' is invoked; subsequent changes
+ have no effect.
+
+ -- Instance Variable of Parameter: value
+ The `value' attribute holds the underlying value of the parameter.
+ It can be read and assigned to just as any other attribute. GDB
+ does validation when assignments are made.
+
+ There are two methods that should be implemented in any `Parameter'
+class. These are:
+
+ -- Operation on parameter: get_set_string self
+ GDB will call this method when a PARAMETER's value has been
+ changed via the `set' API (for example, `set foo off'). The
+ `value' attribute has already been populated with the new value
+ and may be used in output. This method must return a string.
+
+ -- Operation on parameter: get_show_string self svalue
+ GDB will call this method when a PARAMETER's `show' API has been
+ invoked (for example, `show foo'). The argument `svalue' receives
+ the string representation of the current value. This method must
+ return a string.
+
+ When a new parameter is defined, its type must be specified. The
+available types are represented by constants defined in the `gdb'
+module:
+
+`PARAM_BOOLEAN'
+ The value is a plain boolean. The Python boolean values, `True'
+ and `False' are the only valid values.
+
+`PARAM_AUTO_BOOLEAN'
+ The value has three possible states: true, false, and `auto'. In
+ Python, true and false are represented using boolean constants, and
+ `auto' is represented using `None'.
+
+`PARAM_UINTEGER'
+ The value is an unsigned integer. The value of 0 should be
+ interpreted to mean "unlimited".
+
+`PARAM_INTEGER'
+ The value is a signed integer. The value of 0 should be
+ interpreted to mean "unlimited".
+
+`PARAM_STRING'
+ The value is a string. When the user modifies the string, any
+ escape sequences, such as `\t', `\f', and octal escapes, are
+ translated into corresponding characters and encoded into the
+ current host charset.
+
+`PARAM_STRING_NOESCAPE'
+ The value is a string. When the user modifies the string, escapes
+ are passed through untranslated.
+
+`PARAM_OPTIONAL_FILENAME'
+ The value is a either a filename (a string), or `None'.
+
+`PARAM_FILENAME'
+ The value is a filename. This is just like
+ `PARAM_STRING_NOESCAPE', but uses file names for completion.
+
+`PARAM_ZINTEGER'
+ The value is an integer. This is like `PARAM_INTEGER', except 0
+ is interpreted as itself.
+
+`PARAM_ENUM'
+ The value is a string, which must be one of a collection string
+ constants provided when the parameter is created.
+
+
+File: gdb.info, Node: Functions In Python, Next: Progspaces In Python, Prev: Parameters In Python, Up: Python API
+
+23.2.2.13 Writing new convenience functions
+...........................................
+
+You can implement new convenience functions (*note Convenience Vars::)
+in Python. A convenience function is an instance of a subclass of the
+class `gdb.Function'.
+
+ -- Method on Function: __init__ name
+ The initializer for `Function' registers the new function with
+ GDB. The argument NAME is the name of the function, a string.
+ The function will be visible to the user as a convenience variable
+ of type `internal function', whose name is the same as the given
+ NAME.
+
+ The documentation for the new function is taken from the
+ documentation string for the new class.
+
+ -- Method on Function: invoke *ARGS
+ When a convenience function is evaluated, its arguments are
+ converted to instances of `gdb.Value', and then the function's
+ `invoke' method is called. Note that GDB does not predetermine
+ the arity of convenience functions. Instead, all available
+ arguments are passed to `invoke', following the standard Python
+ calling convention. In particular, a convenience function can
+ have default values for parameters without ill effect.
+
+ The return value of this method is used as its value in the
+ enclosing expression. If an ordinary Python value is returned, it
+ is converted to a `gdb.Value' following the usual rules.
+
+ The following code snippet shows how a trivial convenience function
+can be implemented in Python:
+
+ class Greet (gdb.Function):
+ """Return string to greet someone.
+ Takes a name as argument."""
+
+ def __init__ (self):
+ super (Greet, self).__init__ ("greet")
+
+ def invoke (self, name):
+ return "Hello, %s!" % name.string ()
+
+ Greet ()
+
+ The last line instantiates the class, and is necessary to trigger the
+registration of the function with GDB. Depending on how the Python
+code is read into GDB, you may need to import the `gdb' module
+explicitly.
+
+
+File: gdb.info, Node: Progspaces In Python, Next: Objfiles In Python, Prev: Functions In Python, Up: Python API
+
+23.2.2.14 Program Spaces In Python
+..................................
+
+A program space, or "progspace", represents a symbolic view of an
+address space. It consists of all of the objfiles of the program.
+*Note Objfiles In Python::. *Note program spaces: Inferiors and
+Programs, for more details about program spaces.
+
+ The following progspace-related functions are available in the `gdb'
+module:
+
+ -- Function: current_progspace
+ This function returns the program space of the currently selected
+ inferior. *Note Inferiors and Programs::.
+
+ -- Function: progspaces
+ Return a sequence of all the progspaces currently known to GDB.
+
+ Each progspace is represented by an instance of the `gdb.Progspace'
+class.
+
+ -- Instance Variable of Progspace: filename
+ The file name of the progspace as a string.
+
+ -- Instance Variable of Progspace: pretty_printers
+ The `pretty_printers' attribute is a list of functions. It is
+ used to look up pretty-printers. A `Value' is passed to each
+ function in order; if the function returns `None', then the search
+ continues. Otherwise, the return value should be an object which
+ is used to format the value. *Note Pretty Printing API::, for more
+ information.
+
+
+File: gdb.info, Node: Objfiles In Python, Next: Frames In Python, Prev: Progspaces In Python, Up: Python API
+
+23.2.2.15 Objfiles In Python
+............................
+
+GDB loads symbols for an inferior from various symbol-containing files
+(*note Files::). These include the primary executable file, any shared
+libraries used by the inferior, and any separate debug info files
+(*note Separate Debug Files::). GDB calls these symbol-containing
+files "objfiles".
+
+ The following objfile-related functions are available in the `gdb'
+module:
+
+ -- Function: current_objfile
+ When auto-loading a Python script (*note Auto-loading::), GDB sets
+ the "current objfile" to the corresponding objfile. This function
+ returns the current objfile. If there is no current objfile, this
+ function returns `None'.
+
+ -- Function: objfiles
+ Return a sequence of all the objfiles current known to GDB. *Note
+ Objfiles In Python::.
+
+ Each objfile is represented by an instance of the `gdb.Objfile'
+class.
+
+ -- Instance Variable of Objfile: filename
+ The file name of the objfile as a string.
+
+ -- Instance Variable of Objfile: pretty_printers
+ The `pretty_printers' attribute is a list of functions. It is
+ used to look up pretty-printers. A `Value' is passed to each
+ function in order; if the function returns `None', then the search
+ continues. Otherwise, the return value should be an object which
+ is used to format the value. *Note Pretty Printing API::, for more
+ information.
+
+ A `gdb.Objfile' object has the following methods:
+
+ -- Method on Objfile: is_valid
+ Returns `True' if the `gdb.Objfile' object is valid, `False' if
+ not. A `gdb.Objfile' object can become invalid if the object file
+ it refers to is not loaded in GDB any longer. All other
+ `gdb.Objfile' methods will throw an exception if it is invalid at
+ the time the method is called.
+
+
+File: gdb.info, Node: Frames In Python, Next: Blocks In Python, Prev: Objfiles In Python, Up: Python API
+
+23.2.2.16 Accessing inferior stack frames from Python.
+......................................................
+
+When the debugged program stops, GDB is able to analyze its call stack
+(*note Stack frames: Frames.). The `gdb.Frame' class represents a
+frame in the stack. A `gdb.Frame' object is only valid while its
+corresponding frame exists in the inferior's stack. If you try to use
+an invalid frame object, GDB will throw a `gdb.error' exception (*note
+Exception Handling::).
+
+ Two `gdb.Frame' objects can be compared for equality with the `=='
+operator, like:
+
+ (gdb) python print gdb.newest_frame() == gdb.selected_frame ()
+ True
+
+ The following frame-related functions are available in the `gdb'
+module:
+
+ -- Function: selected_frame
+ Return the selected frame object. (*note Selecting a Frame:
+ Selection.).
+
+ -- Function: newest_frame
+ Return the newest frame object for the selected thread.
+
+ -- Function: frame_stop_reason_string reason
+ Return a string explaining the reason why GDB stopped unwinding
+ frames, as expressed by the given REASON code (an integer, see the
+ `unwind_stop_reason' method further down in this section).
+
+ A `gdb.Frame' object has the following methods:
+
+ -- Method on Frame: is_valid
+ Returns true if the `gdb.Frame' object is valid, false if not.
+ A frame object can become invalid if the frame it refers to
+ doesn't exist anymore in the inferior. All `gdb.Frame'
+ methods will throw an exception if it is invalid at the time
+ the method is called.
+
+ -- Method on Frame: name
+ Returns the function name of the frame, or `None' if it can't
+ be obtained.
+
+ -- Method on Frame: type
+ Returns the type of the frame. The value can be one of:
+ `gdb.NORMAL_FRAME'
+ An ordinary stack frame.
+
+ `gdb.DUMMY_FRAME'
+ A fake stack frame that was created by GDB when
+ performing an inferior function call.
+
+ `gdb.INLINE_FRAME'
+ A frame representing an inlined function. The function
+ was inlined into a `gdb.NORMAL_FRAME' that is older than
+ this one.
+
+ `gdb.SIGTRAMP_FRAME'
+ A signal trampoline frame. This is the frame created by
+ the OS when it calls into a signal handler.
+
+ `gdb.ARCH_FRAME'
+ A fake stack frame representing a cross-architecture
+ call.
+
+ `gdb.SENTINEL_FRAME'
+ This is like `gdb.NORMAL_FRAME', but it is only used for
+ the newest frame.
+
+ -- Method on Frame: unwind_stop_reason
+ Return an integer representing the reason why it's not
+ possible to find more frames toward the outermost frame. Use
+ `gdb.frame_stop_reason_string' to convert the value returned
+ by this function to a string.
+
+ -- Method on Frame: pc
+ Returns the frame's resume address.
+
+ -- Method on Frame: block
+ Return the frame's code block. *Note Blocks In Python::.
+
+ -- Method on Frame: function
+ Return the symbol for the function corresponding to this
+ frame. *Note Symbols In Python::.
+
+ -- Method on Frame: older
+ Return the frame that called this frame.
+
+ -- Method on Frame: newer
+ Return the frame called by this frame.
+
+ -- Method on Frame: find_sal
+ Return the frame's symtab and line object. *Note Symbol
+ Tables In Python::.
+
+ -- Method on Frame: read_var variable [block]
+ Return the value of VARIABLE in this frame. If the optional
+ argument BLOCK is provided, search for the variable from that
+ block; otherwise start at the frame's current block (which is
+ determined by the frame's current program counter). VARIABLE
+ must be a string or a `gdb.Symbol' object. BLOCK must be a
+ `gdb.Block' object.
+
+ -- Method on Frame: select
+ Set this frame to be the selected frame. *Note Examining the
+ Stack: Stack.
+
+
+File: gdb.info, Node: Blocks In Python, Next: Symbols In Python, Prev: Frames In Python, Up: Python API
+
+23.2.2.17 Accessing frame blocks from Python.
+.............................................
+
+Within each frame, GDB maintains information on each block stored in
+that frame. These blocks are organized hierarchically, and are
+represented individually in Python as a `gdb.Block'. Please see *note
+Frames In Python::, for a more in-depth discussion on frames.
+Furthermore, see *note Examining the Stack: Stack, for more detailed
+technical information on GDB's book-keeping of the stack.
+
+ The following block-related functions are available in the `gdb'
+module:
+
+ -- Function: block_for_pc pc
+ Return the `gdb.Block' containing the given PC value. If the
+ block cannot be found for the PC value specified, the function
+ will return `None'.
+
+ A `gdb.Block' object has the following methods:
+
+ -- Method on Block: is_valid
+ Returns `True' if the `gdb.Block' object is valid, `False' if
+ not. A block object can become invalid if the block it
+ refers to doesn't exist anymore in the inferior. All other
+ `gdb.Block' methods will throw an exception if it is invalid
+ at the time the method is called. This method is also made
+ available to the Python iterator object that `gdb.Block'
+ provides in an iteration context and via the Python `iter'
+ built-in function.
+
+ A `gdb.Block' object has the following attributes:
+
+ -- Instance Variable of Block: start
+ The start address of the block. This attribute is not
+ writable.
+
+ -- Instance Variable of Block: end
+ The end address of the block. This attribute is not writable.
+
+ -- Instance Variable of Block: function
+ The name of the block represented as a `gdb.Symbol'. If the
+ block is not named, then this attribute holds `None'. This
+ attribute is not writable.
+
+ -- Instance Variable of Block: superblock
+ The block containing this block. If this parent block does
+ not exist, this attribute holds `None'. This attribute is
+ not writable.
+
+
+File: gdb.info, Node: Symbols In Python, Next: Symbol Tables In Python, Prev: Blocks In Python, Up: Python API
+
+23.2.2.18 Python representation of Symbols.
+...........................................
+
+GDB represents every variable, function and type as an entry in a
+symbol table. *Note Examining the Symbol Table: Symbols. Similarly,
+Python represents these symbols in GDB with the `gdb.Symbol' object.
+
+ The following symbol-related functions are available in the `gdb'
+module:
+
+ -- Function: lookup_symbol name [block] [domain]
+ This function searches for a symbol by name. The search scope can
+ be restricted to the parameters defined in the optional domain and
+ block arguments.
+
+ NAME is the name of the symbol. It must be a string. The
+ optional BLOCK argument restricts the search to symbols visible in
+ that BLOCK. The BLOCK argument must be a `gdb.Block' object. If
+ omitted, the block for the current frame is used. The optional
+ DOMAIN argument restricts the search to the domain type. The
+ DOMAIN argument must be a domain constant defined in the `gdb'
+ module and described later in this chapter.
+
+ The result is a tuple of two elements. The first element is a
+ `gdb.Symbol' object or `None' if the symbol is not found. If the
+ symbol is found, the second element is `True' if the symbol is a
+ field of a method's object (e.g., `this' in C++), otherwise it is
+ `False'. If the symbol is not found, the second element is
+ `False'.
+
+ -- Function: lookup_global_symbol name [domain]
+ This function searches for a global symbol by name. The search
+ scope can be restricted to by the domain argument.
+
+ NAME is the name of the symbol. It must be a string. The
+ optional DOMAIN argument restricts the search to the domain type.
+ The DOMAIN argument must be a domain constant defined in the `gdb'
+ module and described later in this chapter.
+
+ The result is a `gdb.Symbol' object or `None' if the symbol is not
+ found.
+
+ A `gdb.Symbol' object has the following attributes:
+
+ -- Instance Variable of Symbol: type
+ The type of the symbol or `None' if no type is recorded.
+ This attribute is represented as a `gdb.Type' object. *Note
+ Types In Python::. This attribute is not writable.
+
+ -- Instance Variable of Symbol: symtab
+ The symbol table in which the symbol appears. This attribute
+ is represented as a `gdb.Symtab' object. *Note Symbol Tables
+ In Python::. This attribute is not writable.
+
+ -- Instance Variable of Symbol: name
+ The name of the symbol as a string. This attribute is not
+ writable.
+
+ -- Instance Variable of Symbol: linkage_name
+ The name of the symbol, as used by the linker (i.e., may be
+ mangled). This attribute is not writable.
+
+ -- Instance Variable of Symbol: print_name
+ The name of the symbol in a form suitable for output. This
+ is either `name' or `linkage_name', depending on whether the
+ user asked GDB to display demangled or mangled names.
+
+ -- Instance Variable of Symbol: addr_class
+ The address class of the symbol. This classifies how to find
+ the value of a symbol. Each address class is a constant
+ defined in the `gdb' module and described later in this
+ chapter.
+
+ -- Instance Variable of Symbol: is_argument
+ `True' if the symbol is an argument of a function.
+
+ -- Instance Variable of Symbol: is_constant
+ `True' if the symbol is a constant.
+
+ -- Instance Variable of Symbol: is_function
+ `True' if the symbol is a function or a method.
+
+ -- Instance Variable of Symbol: is_variable
+ `True' if the symbol is a variable.
+
+ A `gdb.Symbol' object has the following methods:
+
+ -- Method on Symbol: is_valid
+ Returns `True' if the `gdb.Symbol' object is valid, `False'
+ if not. A `gdb.Symbol' object can become invalid if the
+ symbol it refers to does not exist in GDB any longer. All
+ other `gdb.Symbol' methods will throw an exception if it is
+ invalid at the time the method is called.
+
+ The available domain categories in `gdb.Symbol' are represented as
+constants in the `gdb' module:
+
+`SYMBOL_UNDEF_DOMAIN'
+ This is used when a domain has not been discovered or none of the
+ following domains apply. This usually indicates an error either
+ in the symbol information or in GDB's handling of symbols.
+
+`SYMBOL_VAR_DOMAIN'
+ This domain contains variables, function names, typedef names and
+ enum type values.
+
+`SYMBOL_STRUCT_DOMAIN'
+ This domain holds struct, union and enum type names.
+
+`SYMBOL_LABEL_DOMAIN'
+ This domain contains names of labels (for gotos).
+
+`SYMBOL_VARIABLES_DOMAIN'
+ This domain holds a subset of the `SYMBOLS_VAR_DOMAIN'; it
+ contains everything minus functions and types.
+
+`SYMBOL_FUNCTION_DOMAIN'
+ This domain contains all functions.
+
+`SYMBOL_TYPES_DOMAIN'
+ This domain contains all types.
+
+ The available address class categories in `gdb.Symbol' are
+represented as constants in the `gdb' module:
+
+`SYMBOL_LOC_UNDEF'
+ If this is returned by address class, it indicates an error either
+ in the symbol information or in GDB's handling of symbols.
+
+`SYMBOL_LOC_CONST'
+ Value is constant int.
+
+`SYMBOL_LOC_STATIC'
+ Value is at a fixed address.
+
+`SYMBOL_LOC_REGISTER'
+ Value is in a register.
+
+`SYMBOL_LOC_ARG'
+ Value is an argument. This value is at the offset stored within
+ the symbol inside the frame's argument list.
+
+`SYMBOL_LOC_REF_ARG'
+ Value address is stored in the frame's argument list. Just like
+ `LOC_ARG' except that the value's address is stored at the offset,
+ not the value itself.
+
+`SYMBOL_LOC_REGPARM_ADDR'
+ Value is a specified register. Just like `LOC_REGISTER' except
+ the register holds the address of the argument instead of the
+ argument itself.
+
+`SYMBOL_LOC_LOCAL'
+ Value is a local variable.
+
+`SYMBOL_LOC_TYPEDEF'
+ Value not used. Symbols in the domain `SYMBOL_STRUCT_DOMAIN' all
+ have this class.
+
+`SYMBOL_LOC_BLOCK'
+ Value is a block.
+
+`SYMBOL_LOC_CONST_BYTES'
+ Value is a byte-sequence.
+
+`SYMBOL_LOC_UNRESOLVED'
+ Value is at a fixed address, but the address of the variable has
+ to be determined from the minimal symbol table whenever the
+ variable is referenced.
+
+`SYMBOL_LOC_OPTIMIZED_OUT'
+ The value does not actually exist in the program.
+
+`SYMBOL_LOC_COMPUTED'
+ The value's address is a computed location.
+
+
+File: gdb.info, Node: Symbol Tables In Python, Next: Lazy Strings In Python, Prev: Symbols In Python, Up: Python API
+
+23.2.2.19 Symbol table representation in Python.
+................................................
+
+Access to symbol table data maintained by GDB on the inferior is
+exposed to Python via two objects: `gdb.Symtab_and_line' and
+`gdb.Symtab'. Symbol table and line data for a frame is returned from
+the `find_sal' method in `gdb.Frame' object. *Note Frames In Python::.
+
+ For more information on GDB's symbol table management, see *note
+Examining the Symbol Table: Symbols, for more information.
+
+ A `gdb.Symtab_and_line' object has the following attributes:
+
+ -- Instance Variable of Symtab_and_line: symtab
+ The symbol table object (`gdb.Symtab') for this frame. This
+ attribute is not writable.
+
+ -- Instance Variable of Symtab_and_line: pc
+ Indicates the current program counter address. This
+ attribute is not writable.
+
+ -- Instance Variable of Symtab_and_line: line
+ Indicates the current line number for this object. This
+ attribute is not writable.
+
+ A `gdb.Symtab_and_line' object has the following methods:
+
+ -- Method on Symtab_and_line: is_valid
+ Returns `True' if the `gdb.Symtab_and_line' object is valid,
+ `False' if not. A `gdb.Symtab_and_line' object can become
+ invalid if the Symbol table and line object it refers to does
+ not exist in GDB any longer. All other `gdb.Symtab_and_line'
+ methods will throw an exception if it is invalid at the time
+ the method is called.
+
+ A `gdb.Symtab' object has the following attributes:
+
+ -- Instance Variable of Symtab: filename
+ The symbol table's source filename. This attribute is not
+ writable.
+
+ -- Instance Variable of Symtab: objfile
+ The symbol table's backing object file. *Note Objfiles In
+ Python::. This attribute is not writable.
+
+ A `gdb.Symtab' object has the following methods:
+
+ -- Method on Symtab: is_valid
+ Returns `True' if the `gdb.Symtab' object is valid, `False'
+ if not. A `gdb.Symtab' object can become invalid if the
+ symbol table it refers to does not exist in GDB any longer.
+ All other `gdb.Symtab' methods will throw an exception if it
+ is invalid at the time the method is called.
+
+ -- Method on Symtab: fullname
+ Return the symbol table's source absolute file name.
+
+
+File: gdb.info, Node: Breakpoints In Python, Prev: Lazy Strings In Python, Up: Python API
+
+23.2.2.20 Manipulating breakpoints using Python
+...............................................
+
+Python code can manipulate breakpoints via the `gdb.Breakpoint' class.
+
+ -- Method on Breakpoint: __init__ spec [type] [wp_class] [internal]
+ Create a new breakpoint. SPEC is a string naming the location of
+ the breakpoint, or an expression that defines a watchpoint. The
+ contents can be any location recognized by the `break' command, or
+ in the case of a watchpoint, by the `watch' command. The optional
+ TYPE denotes the breakpoint to create from the types defined later
+ in this chapter. This argument can be either: `BP_BREAKPOINT' or
+ `BP_WATCHPOINT'. TYPE defaults to `BP_BREAKPOINT'. The optional
+ INTERNAL argument allows the breakpoint to become invisible to the
+ user. The breakpoint will neither be reported when created, nor
+ will it be listed in the output from `info breakpoints' (but will
+ be listed with the `maint info breakpoints' command). The
+ optional WP_CLASS argument defines the class of watchpoint to
+ create, if TYPE is `BP_WATCHPOINT'. If a watchpoint class is not
+ provided, it is assumed to be a WP_WRITE class.
+
+ -- Operation on gdb.Breakpoint: stop (self)
+ The `gdb.Breakpoint' class can be sub-classed and, in particular,
+ you may choose to implement the `stop' method. If this method is
+ defined as a sub-class of `gdb.Breakpoint', it will be called when
+ the inferior reaches any location of a breakpoint which
+ instantiates that sub-class. If the method returns `True', the
+ inferior will be stopped at the location of the breakpoint,
+ otherwise the inferior will continue.
+
+ If there are multiple breakpoints at the same location with a
+ `stop' method, each one will be called regardless of the return
+ status of the previous. This ensures that all `stop' methods have
+ a chance to execute at that location. In this scenario if one of
+ the methods returns `True' but the others return `False', the
+ inferior will still be stopped.
+
+ Example `stop' implementation:
+
+ class MyBreakpoint (gdb.Breakpoint):
+ def stop (self):
+ inf_val = gdb.parse_and_eval("foo")
+ if inf_val == 3:
+ return True
+ return False
+
+ The available watchpoint types represented by constants are defined
+in the `gdb' module:
+
+`WP_READ'
+ Read only watchpoint.
+
+`WP_WRITE'
+ Write only watchpoint.
+
+`WP_ACCESS'
+ Read/Write watchpoint.
+
+ -- Method on Breakpoint: is_valid
+ Return `True' if this `Breakpoint' object is valid, `False'
+ otherwise. A `Breakpoint' object can become invalid if the user
+ deletes the breakpoint. In this case, the object still exists,
+ but the underlying breakpoint does not. In the cases of
+ watchpoint scope, the watchpoint remains valid even if execution
+ of the inferior leaves the scope of that watchpoint.
+
+ -- Method on Breakpoint: delete
+ Permanently deletes the GDB breakpoint. This also invalidates the
+ Python `Breakpoint' object. Any further access to this object's
+ attributes or methods will raise an error.
+
+ -- Instance Variable of Breakpoint: enabled
+ This attribute is `True' if the breakpoint is enabled, and `False'
+ otherwise. This attribute is writable.
+
+ -- Instance Variable of Breakpoint: silent
+ This attribute is `True' if the breakpoint is silent, and `False'
+ otherwise. This attribute is writable.
+
+ Note that a breakpoint can also be silent if it has commands and
+ the first command is `silent'. This is not reported by the
+ `silent' attribute.
+
+ -- Instance Variable of Breakpoint: thread
+ If the breakpoint is thread-specific, this attribute holds the
+ thread id. If the breakpoint is not thread-specific, this
+ attribute is `None'. This attribute is writable.
+
+ -- Instance Variable of Breakpoint: task
+ If the breakpoint is Ada task-specific, this attribute holds the
+ Ada task id. If the breakpoint is not task-specific (or the
+ underlying language is not Ada), this attribute is `None'. This
+ attribute is writable.
+
+ -- Instance Variable of Breakpoint: ignore_count
+ This attribute holds the ignore count for the breakpoint, an
+ integer. This attribute is writable.
+
+ -- Instance Variable of Breakpoint: number
+ This attribute holds the breakpoint's number -- the identifier
+ used by the user to manipulate the breakpoint. This attribute is
+ not writable.
+
+ -- Instance Variable of Breakpoint: type
+ This attribute holds the breakpoint's type -- the identifier used
+ to determine the actual breakpoint type or use-case. This
+ attribute is not writable.
+
+ -- Instance Variable of Breakpoint: visible
+ This attribute tells whether the breakpoint is visible to the user
+ when set, or when the `info breakpoints' command is run. This
+ attribute is not writable.
+
+ The available types are represented by constants defined in the `gdb'
+module:
+
+`BP_BREAKPOINT'
+ Normal code breakpoint.
+
+`BP_WATCHPOINT'
+ Watchpoint breakpoint.
+
+`BP_HARDWARE_WATCHPOINT'
+ Hardware assisted watchpoint.
+
+`BP_READ_WATCHPOINT'
+ Hardware assisted read watchpoint.
+
+`BP_ACCESS_WATCHPOINT'
+ Hardware assisted access watchpoint.
+
+ -- Instance Variable of Breakpoint: hit_count
+ This attribute holds the hit count for the breakpoint, an integer.
+ This attribute is writable, but currently it can only be set to
+ zero.
+
+ -- Instance Variable of Breakpoint: location
+ This attribute holds the location of the breakpoint, as specified
+ by the user. It is a string. If the breakpoint does not have a
+ location (that is, it is a watchpoint) the attribute's value is
+ `None'. This attribute is not writable.
+
+ -- Instance Variable of Breakpoint: expression
+ This attribute holds a breakpoint expression, as specified by the
+ user. It is a string. If the breakpoint does not have an
+ expression (the breakpoint is not a watchpoint) the attribute's
+ value is `None'. This attribute is not writable.
+
+ -- Instance Variable of Breakpoint: condition
+ This attribute holds the condition of the breakpoint, as specified
+ by the user. It is a string. If there is no condition, this
+ attribute's value is `None'. This attribute is writable.
+
+ -- Instance Variable of Breakpoint: commands
+ This attribute holds the commands attached to the breakpoint. If
+ there are commands, this attribute's value is a string holding all
+ the commands, separated by newlines. If there are no commands,
+ this attribute is `None'. This attribute is not writable.
+
+
+File: gdb.info, Node: Lazy Strings In Python, Next: Breakpoints In Python, Prev: Symbol Tables In Python, Up: Python API
+
+23.2.2.21 Python representation of lazy strings.
+................................................
+
+A "lazy string" is a string whose contents is not retrieved or encoded
+until it is needed.
+
+ A `gdb.LazyString' is represented in GDB as an `address' that points
+to a region of memory, an `encoding' that will be used to encode that
+region of memory, and a `length' to delimit the region of memory that
+represents the string. The difference between a `gdb.LazyString' and a
+string wrapped within a `gdb.Value' is that a `gdb.LazyString' will be
+treated differently by GDB when printing. A `gdb.LazyString' is
+retrieved and encoded during printing, while a `gdb.Value' wrapping a
+string is immediately retrieved and encoded on creation.
+
+ A `gdb.LazyString' object has the following functions:
+
+ -- Method on LazyString: value
+ Convert the `gdb.LazyString' to a `gdb.Value'. This value will
+ point to the string in memory, but will lose all the delayed
+ retrieval, encoding and handling that GDB applies to a
+ `gdb.LazyString'.
+
+ -- Instance Variable of LazyString: address
+ This attribute holds the address of the string. This attribute is
+ not writable.
+
+ -- Instance Variable of LazyString: length
+ This attribute holds the length of the string in characters. If
+ the length is -1, then the string will be fetched and encoded up
+ to the first null of appropriate width. This attribute is not
+ writable.
+
+ -- Instance Variable of LazyString: encoding
+ This attribute holds the encoding that will be applied to the
+ string when the string is printed by GDB. If the encoding is not
+ set, or contains an empty string, then GDB will select the most
+ appropriate encoding when the string is printed. This attribute
+ is not writable.
+
+ -- Instance Variable of LazyString: type
+ This attribute holds the type that is represented by the lazy
+ string's type. For a lazy string this will always be a pointer
+ type. To resolve this to the lazy string's character type, use
+ the type's `target' method. *Note Types In Python::. This
+ attribute is not writable.
+
+
+File: gdb.info, Node: Auto-loading, Next: Python modules, Prev: Python API, Up: Python
+
+23.2.3 Auto-loading
+-------------------
+
+When a new object file is read (for example, due to the `file' command,
+or because the inferior has loaded a shared library), GDB will look for
+Python support scripts in several ways: `OBJFILE-gdb.py' and
+`.debug_gdb_scripts' section.
+
+* Menu:
+
+* objfile-gdb.py file:: The `OBJFILE-gdb.py' file
+* .debug_gdb_scripts section:: The `.debug_gdb_scripts' section
+* Which flavor to choose?::
+
+ The auto-loading feature is useful for supplying application-specific
+debugging commands and scripts.
+
+ Auto-loading can be enabled or disabled, and the list of auto-loaded
+scripts can be printed.
+
+`set auto-load-scripts [yes|no]'
+ Enable or disable the auto-loading of Python scripts.
+
+`show auto-load-scripts'
+ Show whether auto-loading of Python scripts is enabled or disabled.
+
+`info auto-load-scripts [REGEXP]'
+ Print the list of all scripts that GDB auto-loaded.
+
+ Also printed is the list of scripts that were mentioned in the
+ `.debug_gdb_scripts' section and were not found (*note
+ .debug_gdb_scripts section::). This is useful because their names
+ are not printed when GDB tries to load them and fails. There may
+ be many of them, and printing an error message for each one is
+ problematic.
+
+ If REGEXP is supplied only scripts with matching names are printed.
+
+ Example:
+
+ (gdb) info auto-load-scripts
+ Loaded Script
+ Yes py-section-script.py
+ full name: /tmp/py-section-script.py
+ Missing my-foo-pretty-printers.py
+
+ When reading an auto-loaded file, GDB sets the "current objfile".
+This is available via the `gdb.current_objfile' function (*note
+Objfiles In Python::). This can be useful for registering
+objfile-specific pretty-printers.
+
+
+File: gdb.info, Node: objfile-gdb.py file, Next: .debug_gdb_scripts section, Up: Auto-loading
+
+23.2.3.1 The `OBJFILE-gdb.py' file
+..................................
+
+When a new object file is read, GDB looks for a file named
+`OBJFILE-gdb.py', where OBJFILE is the object file's real name, formed
+by ensuring that the file name is absolute, following all symlinks, and
+resolving `.' and `..' components. If this file exists and is
+readable, GDB will evaluate it as a Python script.
+
+ If this file does not exist, and if the parameter
+`debug-file-directory' is set (*note Separate Debug Files::), then GDB
+will look for REAL-NAME in all of the directories mentioned in the
+value of `debug-file-directory'.
+
+ Finally, if this file does not exist, then GDB will look for a file
+named `DATA-DIRECTORY/python/auto-load/REAL-NAME', where DATA-DIRECTORY
+is GDB's data directory (available via `show data-directory', *note
+Data Files::), and REAL-NAME is the object file's real name, as
+described above.
+
+ GDB does not track which files it has already auto-loaded this way.
+GDB will load the associated script every time the corresponding
+OBJFILE is opened. So your `-gdb.py' file should be careful to avoid
+errors if it is evaluated more than once.
+
+
+File: gdb.info, Node: .debug_gdb_scripts section, Next: Which flavor to choose?, Prev: objfile-gdb.py file, Up: Auto-loading
+
+23.2.3.2 The `.debug_gdb_scripts' section
+.........................................
+
+For systems using file formats like ELF and COFF, when GDB loads a new
+object file it will look for a special section named
+`.debug_gdb_scripts'. If this section exists, its contents is a list
+of names of scripts to load.
+
+ GDB will look for each specified script file first in the current
+directory and then along the source search path (*note Specifying
+Source Directories: Source Path.), except that `$cdir' is not searched,
+since the compilation directory is not relevant to scripts.
+
+ Entries can be placed in section `.debug_gdb_scripts' with, for
+example, this GCC macro:
+
+ /* Note: The "MS" section flags are to remove duplicates. */
+ #define DEFINE_GDB_SCRIPT(script_name) \
+ asm("\
+ .pushsection \".debug_gdb_scripts\", \"MS\",@progbits,1\n\
+ .byte 1\n\
+ .asciz \"" script_name "\"\n\
+ .popsection \n\
+ ");
+
+Then one can reference the macro in a header or source file like this:
+
+ DEFINE_GDB_SCRIPT ("my-app-scripts.py")
+
+ The script name may include directories if desired.
+
+ If the macro is put in a header, any application or library using
+this header will get a reference to the specified script.
+
+
+File: gdb.info, Node: Which flavor to choose?, Prev: .debug_gdb_scripts section, Up: Auto-loading
+
+23.2.3.3 Which flavor to choose?
+................................
+
+Given the multiple ways of auto-loading Python scripts, it might not
+always be clear which one to choose. This section provides some
+guidance.
+
+ Benefits of the `-gdb.py' way:
+
+ * Can be used with file formats that don't support multiple sections.
+
+ * Ease of finding scripts for public libraries.
+
+ Scripts specified in the `.debug_gdb_scripts' section are searched
+ for in the source search path. For publicly installed libraries,
+ e.g., `libstdc++', there typically isn't a source directory in
+ which to find the script.
+
+ * Doesn't require source code additions.
+
+ Benefits of the `.debug_gdb_scripts' way:
+
+ * Works with static linking.
+
+ Scripts for libraries done the `-gdb.py' way require an objfile to
+ trigger their loading. When an application is statically linked
+ the only objfile available is the executable, and it is cumbersome
+ to attach all the scripts from all the input libraries to the
+ executable's `-gdb.py' script.
+
+ * Works with classes that are entirely inlined.
+
+ Some classes can be entirely inlined, and thus there may not be an
+ associated shared library to attach a `-gdb.py' script to.
+
+ * Scripts needn't be copied out of the source tree.
+
+ In some circumstances, apps can be built out of large collections
+ of internal libraries, and the build infrastructure necessary to
+ install the `-gdb.py' scripts in a place where GDB can find them is
+ cumbersome. It may be easier to specify the scripts in the
+ `.debug_gdb_scripts' section as relative paths, and add a path to
+ the top of the source tree to the source search path.
+
+
+File: gdb.info, Node: Python modules, Prev: Auto-loading, Up: Python
+
+23.2.4 Python modules
+---------------------
+
+GDB comes with a module to assist writing Python code.
+
+* Menu:
+
+* gdb.printing:: Building and registering pretty-printers.
+* gdb.types:: Utilities for working with types.
+
+
+File: gdb.info, Node: gdb.printing, Next: gdb.types, Up: Python modules
+
+23.2.4.1 gdb.printing
+.....................
+
+This module provides a collection of utilities for working with
+pretty-printers.
+
+`PrettyPrinter (NAME, SUBPRINTERS=None)'
+ This class specifies the API that makes `info pretty-printer',
+ `enable pretty-printer' and `disable pretty-printer' work.
+ Pretty-printers should generally inherit from this class.
+
+`SubPrettyPrinter (NAME)'
+ For printers that handle multiple types, this class specifies the
+ corresponding API for the subprinters.
+
+`RegexpCollectionPrettyPrinter (NAME)'
+ Utility class for handling multiple printers, all recognized via
+ regular expressions. *Note Writing a Pretty-Printer::, for an
+ example.
+
+`register_pretty_printer (OBJ, PRINTER, REPLACE=False)'
+ Register PRINTER with the pretty-printer list of OBJ. If REPLACE
+ is `True' then any existing copy of the printer is replaced.
+ Otherwise a `RuntimeError' exception is raised if a printer with
+ the same name already exists.
+
+
+File: gdb.info, Node: gdb.types, Prev: gdb.printing, Up: Python modules
+
+23.2.4.2 gdb.types
+..................
+
+This module provides a collection of utilities for working with
+`gdb.Types' objects.
+
+`get_basic_type (TYPE)'
+ Return TYPE with const and volatile qualifiers stripped, and with
+ typedefs and C++ references converted to the underlying type.
+
+ C++ example:
+
+ typedef const int const_int;
+ const_int foo (3);
+ const_int& foo_ref (foo);
+ int main () { return 0; }
+
+ Then in gdb:
+
+ (gdb) start
+ (gdb) python import gdb.types
+ (gdb) python foo_ref = gdb.parse_and_eval("foo_ref")
+ (gdb) python print gdb.types.get_basic_type(foo_ref.type)
+ int
+
+`has_field (TYPE, FIELD)'
+ Return `True' if TYPE, assumed to be a type with fields (e.g., a
+ structure or union), has field FIELD.
+
+`make_enum_dict (ENUM_TYPE)'
+ Return a Python `dictionary' type produced from ENUM_TYPE.
+
+
+File: gdb.info, Node: Interpreters, Next: TUI, Prev: Extending GDB, Up: Top
+
+24 Command Interpreters
+***********************
+
+GDB supports multiple command interpreters, and some command
+infrastructure to allow users or user interface writers to switch
+between interpreters or run commands in other interpreters.
+
+ GDB currently supports two command interpreters, the console
+interpreter (sometimes called the command-line interpreter or CLI) and
+the machine interface interpreter (or GDB/MI). This manual describes
+both of these interfaces in great detail.
+
+ By default, GDB will start with the console interpreter. However,
+the user may choose to start GDB with another interpreter by specifying
+the `-i' or `--interpreter' startup options. Defined interpreters
+include:
+
+`console'
+ The traditional console or command-line interpreter. This is the
+ most often used interpreter with GDB. With no interpreter
+ specified at runtime, GDB will use this interpreter.
+
+`mi'
+ The newest GDB/MI interface (currently `mi2'). Used primarily by
+ programs wishing to use GDB as a backend for a debugger GUI or an
+ IDE. For more information, see *note The GDB/MI Interface: GDB/MI.
+
+`mi2'
+ The current GDB/MI interface.
+
+`mi1'
+ The GDB/MI interface included in GDB 5.1, 5.2, and 5.3.
+
+
+ The interpreter being used by GDB may not be dynamically switched at
+runtime. Although possible, this could lead to a very precarious
+situation. Consider an IDE using GDB/MI. If a user enters the command
+"interpreter-set console" in a console view, GDB would switch to using
+the console interpreter, rendering the IDE inoperable!
+
+ Although you may only choose a single interpreter at startup, you
+may execute commands in any interpreter from the current interpreter
+using the appropriate command. If you are running the console
+interpreter, simply use the `interpreter-exec' command:
+
+ interpreter-exec mi "-data-list-register-names"
+
+ GDB/MI has a similar command, although it is only available in
+versions of GDB which support GDB/MI version 2 (or greater).
+
+
+File: gdb.info, Node: TUI, Next: Emacs, Prev: Interpreters, Up: Top
+
+25 GDB Text User Interface
+**************************
+
+* Menu:
+
+* TUI Overview:: TUI overview
+* TUI Keys:: TUI key bindings
+* TUI Single Key Mode:: TUI single key mode
+* TUI Commands:: TUI-specific commands
+* TUI Configuration:: TUI configuration variables
+
+ The GDB Text User Interface (TUI) is a terminal interface which uses
+the `curses' library to show the source file, the assembly output, the
+program registers and GDB commands in separate text windows. The TUI
+mode is supported only on platforms where a suitable version of the
+`curses' library is available.
+
+ The TUI mode is enabled by default when you invoke GDB as either
+`gdbtui' or `gdb -tui'. You can also switch in and out of TUI mode
+while GDB runs by using various TUI commands and key bindings, such as
+`C-x C-a'. *Note TUI Key Bindings: TUI Keys.
+
+
+File: gdb.info, Node: TUI Overview, Next: TUI Keys, Up: TUI
+
+25.1 TUI Overview
+=================
+
+In TUI mode, GDB can display several text windows:
+
+_command_
+ This window is the GDB command window with the GDB prompt and the
+ GDB output. The GDB input is still managed using readline.
+
+_source_
+ The source window shows the source file of the program. The
+ current line and active breakpoints are displayed in this window.
+
+_assembly_
+ The assembly window shows the disassembly output of the program.
+
+_register_
+ This window shows the processor registers. Registers are
+ highlighted when their values change.
+
+ The source and assembly windows show the current program position by
+highlighting the current line and marking it with a `>' marker.
+Breakpoints are indicated with two markers. The first marker indicates
+the breakpoint type:
+
+`B'
+ Breakpoint which was hit at least once.
+
+`b'
+ Breakpoint which was never hit.
+
+`H'
+ Hardware breakpoint which was hit at least once.
+
+`h'
+ Hardware breakpoint which was never hit.
+
+ The second marker indicates whether the breakpoint is enabled or not:
+
+`+'
+ Breakpoint is enabled.
+
+`-'
+ Breakpoint is disabled.
+
+ The source, assembly and register windows are updated when the
+current thread changes, when the frame changes, or when the program
+counter changes.
+
+ These windows are not all visible at the same time. The command
+window is always visible. The others can be arranged in several
+layouts:
+
+ * source only,
+
+ * assembly only,
+
+ * source and assembly,
+
+ * source and registers, or
+
+ * assembly and registers.
+
+ A status line above the command window shows the following
+information:
+
+_target_
+ Indicates the current GDB target. (*note Specifying a Debugging
+ Target: Targets.).
+
+_process_
+ Gives the current process or thread number. When no process is
+ being debugged, this field is set to `No process'.
+
+_function_
+ Gives the current function name for the selected frame. The name
+ is demangled if demangling is turned on (*note Print Settings::).
+ When there is no symbol corresponding to the current program
+ counter, the string `??' is displayed.
+
+_line_
+ Indicates the current line number for the selected frame. When
+ the current line number is not known, the string `??' is displayed.
+
+_pc_
+ Indicates the current program counter address.
+
+
+File: gdb.info, Node: TUI Keys, Next: TUI Single Key Mode, Prev: TUI Overview, Up: TUI
+
+25.2 TUI Key Bindings
+=====================
+
+The TUI installs several key bindings in the readline keymaps (*note
+Command Line Editing::). The following key bindings are installed for
+both TUI mode and the GDB standard mode.
+
+`C-x C-a'
+`C-x a'
+`C-x A'
+ Enter or leave the TUI mode. When leaving the TUI mode, the
+ curses window management stops and GDB operates using its standard
+ mode, writing on the terminal directly. When reentering the TUI
+ mode, control is given back to the curses windows. The screen is
+ then refreshed.
+
+`C-x 1'
+ Use a TUI layout with only one window. The layout will either be
+ `source' or `assembly'. When the TUI mode is not active, it will
+ switch to the TUI mode.
+
+ Think of this key binding as the Emacs `C-x 1' binding.
+
+`C-x 2'
+ Use a TUI layout with at least two windows. When the current
+ layout already has two windows, the next layout with two windows
+ is used. When a new layout is chosen, one window will always be
+ common to the previous layout and the new one.
+
+ Think of it as the Emacs `C-x 2' binding.
+
+`C-x o'
+ Change the active window. The TUI associates several key bindings
+ (like scrolling and arrow keys) with the active window. This
+ command gives the focus to the next TUI window.
+
+ Think of it as the Emacs `C-x o' binding.
+
+`C-x s'
+ Switch in and out of the TUI SingleKey mode that binds single keys
+ to GDB commands (*note TUI Single Key Mode::).
+
+ The following key bindings only work in the TUI mode:
+
+<PgUp>
+ Scroll the active window one page up.
+
+<PgDn>
+ Scroll the active window one page down.
+
+<Up>
+ Scroll the active window one line up.
+
+<Down>
+ Scroll the active window one line down.
+
+<Left>
+ Scroll the active window one column left.
+
+<Right>
+ Scroll the active window one column right.
+
+`C-L'
+ Refresh the screen.
+
+ Because the arrow keys scroll the active window in the TUI mode, they
+are not available for their normal use by readline unless the command
+window has the focus. When another window is active, you must use
+other readline key bindings such as `C-p', `C-n', `C-b' and `C-f' to
+control the command window.
+
+
+File: gdb.info, Node: TUI Single Key Mode, Next: TUI Commands, Prev: TUI Keys, Up: TUI
+
+25.3 TUI Single Key Mode
+========================
+
+The TUI also provides a "SingleKey" mode, which binds several
+frequently used GDB commands to single keys. Type `C-x s' to switch
+into this mode, where the following key bindings are used:
+
+`c'
+ continue
+
+`d'
+ down
+
+`f'
+ finish
+
+`n'
+ next
+
+`q'
+ exit the SingleKey mode.
+
+`r'
+ run
+
+`s'
+ step
+
+`u'
+ up
+
+`v'
+ info locals
+
+`w'
+ where
+
+ Other keys temporarily switch to the GDB command prompt. The key
+that was pressed is inserted in the editing buffer so that it is
+possible to type most GDB commands without interaction with the TUI
+SingleKey mode. Once the command is entered the TUI SingleKey mode is
+restored. The only way to permanently leave this mode is by typing `q'
+or `C-x s'.
+
+
+File: gdb.info, Node: TUI Commands, Next: TUI Configuration, Prev: TUI Single Key Mode, Up: TUI
+
+25.4 TUI-specific Commands
+==========================
+
+The TUI has specific commands to control the text windows. These
+commands are always available, even when GDB is not in the TUI mode.
+When GDB is in the standard mode, most of these commands will
+automatically switch to the TUI mode.
+
+ Note that if GDB's `stdout' is not connected to a terminal, or GDB
+has been started with the machine interface interpreter (*note The
+GDB/MI Interface: GDB/MI.), most of these commands will fail with an
+error, because it would not be possible or desirable to enable curses
+window management.
+
+`info win'
+ List and give the size of all displayed windows.
+
+`layout next'
+ Display the next layout.
+
+`layout prev'
+ Display the previous layout.
+
+`layout src'
+ Display the source window only.
+
+`layout asm'
+ Display the assembly window only.
+
+`layout split'
+ Display the source and assembly window.
+
+`layout regs'
+ Display the register window together with the source or assembly
+ window.
+
+`focus next'
+ Make the next window active for scrolling.
+
+`focus prev'
+ Make the previous window active for scrolling.
+
+`focus src'
+ Make the source window active for scrolling.
+
+`focus asm'
+ Make the assembly window active for scrolling.
+
+`focus regs'
+ Make the register window active for scrolling.
+
+`focus cmd'
+ Make the command window active for scrolling.
+
+`refresh'
+ Refresh the screen. This is similar to typing `C-L'.
+
+`tui reg float'
+ Show the floating point registers in the register window.
+
+`tui reg general'
+ Show the general registers in the register window.
+
+`tui reg next'
+ Show the next register group. The list of register groups as well
+ as their order is target specific. The predefined register groups
+ are the following: `general', `float', `system', `vector', `all',
+ `save', `restore'.
+
+`tui reg system'
+ Show the system registers in the register window.
+
+`update'
+ Update the source window and the current execution point.
+
+`winheight NAME +COUNT'
+`winheight NAME -COUNT'
+ Change the height of the window NAME by COUNT lines. Positive
+ counts increase the height, while negative counts decrease it.
+
+`tabset NCHARS'
+ Set the width of tab stops to be NCHARS characters.
+
+
+File: gdb.info, Node: TUI Configuration, Prev: TUI Commands, Up: TUI
+
+25.5 TUI Configuration Variables
+================================
+
+Several configuration variables control the appearance of TUI windows.
+
+`set tui border-kind KIND'
+ Select the border appearance for the source, assembly and register
+ windows. The possible values are the following:
+ `space'
+ Use a space character to draw the border.
+
+ `ascii'
+ Use ASCII characters `+', `-' and `|' to draw the border.
+
+ `acs'
+ Use the Alternate Character Set to draw the border. The
+ border is drawn using character line graphics if the terminal
+ supports them.
+
+`set tui border-mode MODE'
+`set tui active-border-mode MODE'
+ Select the display attributes for the borders of the inactive
+ windows or the active window. The MODE can be one of the
+ following:
+ `normal'
+ Use normal attributes to display the border.
+
+ `standout'
+ Use standout mode.
+
+ `reverse'
+ Use reverse video mode.
+
+ `half'
+ Use half bright mode.
+
+ `half-standout'
+ Use half bright and standout mode.
+
+ `bold'
+ Use extra bright or bold mode.
+
+ `bold-standout'
+ Use extra bright or bold and standout mode.
+
+
+File: gdb.info, Node: Emacs, Next: GDB/MI, Prev: TUI, Up: Top
+
+26 Using GDB under GNU Emacs
+****************************
+
+A special interface allows you to use GNU Emacs to view (and edit) the
+source files for the program you are debugging with GDB.
+
+ To use this interface, use the command `M-x gdb' in Emacs. Give the
+executable file you want to debug as an argument. This command starts
+GDB as a subprocess of Emacs, with input and output through a newly
+created Emacs buffer.
+
+ Running GDB under Emacs can be just like running GDB normally except
+for two things:
+
+ * All "terminal" input and output goes through an Emacs buffer,
+ called the GUD buffer.
+
+ This applies both to GDB commands and their output, and to the
+ input and output done by the program you are debugging.
+
+ This is useful because it means that you can copy the text of
+ previous commands and input them again; you can even use parts of
+ the output in this way.
+
+ All the facilities of Emacs' Shell mode are available for
+ interacting with your program. In particular, you can send
+ signals the usual way--for example, `C-c C-c' for an interrupt,
+ `C-c C-z' for a stop.
+
+ * GDB displays source code through Emacs.
+
+ Each time GDB displays a stack frame, Emacs automatically finds the
+ source file for that frame and puts an arrow (`=>') at the left
+ margin of the current line. Emacs uses a separate buffer for
+ source display, and splits the screen to show both your GDB session
+ and the source.
+
+ Explicit GDB `list' or search commands still produce output as
+ usual, but you probably have no reason to use them from Emacs.
+
+ We call this "text command mode". Emacs 22.1, and later, also uses
+a graphical mode, enabled by default, which provides further buffers
+that can control the execution and describe the state of your program.
+*Note GDB Graphical Interface: (Emacs)GDB Graphical Interface.
+
+ If you specify an absolute file name when prompted for the `M-x gdb'
+argument, then Emacs sets your current working directory to where your
+program resides. If you only specify the file name, then Emacs sets
+your current working directory to to the directory associated with the
+previous buffer. In this case, GDB may find your program by searching
+your environment's `PATH' variable, but on some operating systems it
+might not find the source. So, although the GDB input and output
+session proceeds normally, the auxiliary buffer does not display the
+current source and line of execution.
+
+ The initial working directory of GDB is printed on the top line of
+the GUD buffer and this serves as a default for the commands that
+specify files for GDB to operate on. *Note Commands to Specify Files:
+Files.
+
+ By default, `M-x gdb' calls the program called `gdb'. If you need
+to call GDB by a different name (for example, if you keep several
+configurations around, with different names) you can customize the
+Emacs variable `gud-gdb-command-name' to run the one you want.
+
+ In the GUD buffer, you can use these special Emacs commands in
+addition to the standard Shell mode commands:
+
+`C-h m'
+ Describe the features of Emacs' GUD Mode.
+
+`C-c C-s'
+ Execute to another source line, like the GDB `step' command; also
+ update the display window to show the current file and location.
+
+`C-c C-n'
+ Execute to next source line in this function, skipping all function
+ calls, like the GDB `next' command. Then update the display window
+ to show the current file and location.
+
+`C-c C-i'
+ Execute one instruction, like the GDB `stepi' command; update
+ display window accordingly.
+
+`C-c C-f'
+ Execute until exit from the selected stack frame, like the GDB
+ `finish' command.
+
+`C-c C-r'
+ Continue execution of your program, like the GDB `continue'
+ command.
+
+`C-c <'
+ Go up the number of frames indicated by the numeric argument
+ (*note Numeric Arguments: (Emacs)Arguments.), like the GDB `up'
+ command.
+
+`C-c >'
+ Go down the number of frames indicated by the numeric argument,
+ like the GDB `down' command.
+
+ In any source file, the Emacs command `C-x <SPC>' (`gud-break')
+tells GDB to set a breakpoint on the source line point is on.
+
+ In text command mode, if you type `M-x speedbar', Emacs displays a
+separate frame which shows a backtrace when the GUD buffer is current.
+Move point to any frame in the stack and type <RET> to make it become
+the current frame and display the associated source in the source
+buffer. Alternatively, click `Mouse-2' to make the selected frame
+become the current one. In graphical mode, the speedbar displays watch
+expressions.
+
+ If you accidentally delete the source-display buffer, an easy way to
+get it back is to type the command `f' in the GDB buffer, to request a
+frame display; when you run under Emacs, this recreates the source
+buffer if necessary to show you the context of the current frame.
+
+ The source files displayed in Emacs are in ordinary Emacs buffers
+which are visiting the source files in the usual way. You can edit the
+files with these buffers if you wish; but keep in mind that GDB
+communicates with Emacs in terms of line numbers. If you add or delete
+lines from the text, the line numbers that GDB knows cease to
+correspond properly with the code.
+
+ A more detailed description of Emacs' interaction with GDB is given
+in the Emacs manual (*note Debuggers: (Emacs)Debuggers.).
+
+
+File: gdb.info, Node: GDB/MI, Next: Annotations, Prev: Emacs, Up: Top
+
+27 The GDB/MI Interface
+***********************
+
+Function and Purpose
+====================
+
+GDB/MI is a line based machine oriented text interface to GDB and is
+activated by specifying using the `--interpreter' command line option
+(*note Mode Options::). 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 GDB/MI interface. It is
+written in the form of a reference manual.
+
+ Note that GDB/MI is still under construction, so some of the
+features described below are incomplete and subject to change (*note
+GDB/MI Development and Front Ends: GDB/MI Development and Front Ends.).
+
+Notation and Terminology
+========================
+
+This chapter uses the following notation:
+
+ * `|' separates two alternatives.
+
+ * `[ SOMETHING ]' indicates that SOMETHING is optional: it may or
+ may not be given.
+
+ * `( GROUP )*' means that GROUP inside the parentheses may repeat
+ zero or more times.
+
+ * `( GROUP )+' means that GROUP inside the parentheses may repeat
+ one or more times.
+
+ * `"STRING"' means a literal STRING.
+
+* Menu:
+
+* GDB/MI General Design::
+* GDB/MI Command Syntax::
+* GDB/MI Compatibility with CLI::
+* GDB/MI Development and Front Ends::
+* GDB/MI Output Records::
+* GDB/MI Simple Examples::
+* GDB/MI Command Description Format::
+* GDB/MI Breakpoint Commands::
+* GDB/MI Program Context::
+* GDB/MI Thread Commands::
+* GDB/MI Program Execution::
+* GDB/MI Stack Manipulation::
+* GDB/MI Variable Objects::
+* GDB/MI Data Manipulation::
+* GDB/MI Tracepoint Commands::
+* GDB/MI Symbol Query::
+* GDB/MI File Commands::
+* GDB/MI Target Manipulation::
+* GDB/MI File Transfer Commands::
+* GDB/MI Miscellaneous Commands::
+
+
+File: gdb.info, Node: GDB/MI General Design, Next: GDB/MI Command Syntax, Up: GDB/MI
+
+27.1 GDB/MI General Design
+==========================
+
+Interaction of a GDB/MI frontend with GDB involves three
+parts--commands sent to GDB, responses to those commands and
+notifications. Each command results in exactly one response,
+indicating either successful completion of the command, or an error.
+For the commands that do not resume the target, the response contains
+the requested information. For the commands that resume the target, the
+response only indicates whether the target was successfully resumed.
+Notifications is the mechanism for reporting changes in the state of the
+target, or in GDB state, that cannot conveniently be associated with a
+command and reported as part of that command response.
+
+ The important examples of notifications are:
+ * Exec notifications. These are used to report changes in target
+ state--when a target is resumed, or stopped. It would not be
+ feasible to include this information in response of resuming
+ commands, because one resume commands can result in multiple
+ events in different threads. Also, quite some time may pass
+ before any event happens in the target, while a frontend needs to
+ know whether the resuming command itself was successfully executed.
+
+ * Console output, and status notifications. Console output
+ notifications are used to report output of CLI commands, as well as
+ diagnostics for other commands. Status notifications are used to
+ report the progress of a long-running operation. Naturally,
+ including this information in command response would mean no
+ output is produced until the command is finished, which is
+ undesirable.
+
+ * General notifications. Commands may have various side effects on
+ the GDB or target state beyond their official purpose. For
+ example, a command may change the selected thread. Although such
+ changes can be included in command response, using notification
+ allows for more orthogonal frontend design.
+
+
+ There's no guarantee that whenever an MI command reports an error,
+GDB or the target are in any specific state, and especially, the state
+is not reverted to the state before the MI command was processed.
+Therefore, whenever an MI command results in an error, we recommend
+that the frontend refreshes all the information shown in the user
+interface.
+
+* Menu:
+
+* Context management::
+* Asynchronous and non-stop modes::
+* Thread groups::
+
+
+File: gdb.info, Node: Context management, Next: Asynchronous and non-stop modes, Up: GDB/MI General Design
+
+27.1.1 Context management
+-------------------------
+
+In most cases when GDB accesses the target, this access is done in
+context of a specific thread and frame (*note Frames::). Often, even
+when accessing global data, the target requires that a thread be
+specified. The CLI interface maintains the selected thread and frame,
+and supplies them to target on each command. This is convenient,
+because a command line user would not want to specify that information
+explicitly on each command, and because user interacts with GDB via a
+single terminal, so no confusion is possible as to what thread and
+frame are the current ones.
+
+ In the case of MI, the concept of selected thread and frame is less
+useful. First, a frontend can easily remember this information itself.
+Second, a graphical frontend can have more than one window, each one
+used for debugging a different thread, and the frontend might want to
+access additional threads for internal purposes. This increases the
+risk that by relying on implicitly selected thread, the frontend may be
+operating on a wrong one. Therefore, each MI command should explicitly
+specify which thread and frame to operate on. To make it possible,
+each MI command accepts the `--thread' and `--frame' options, the value
+to each is GDB identifier for thread and frame to operate on.
+
+ Usually, each top-level window in a frontend allows the user to
+select a thread and a frame, and remembers the user selection for
+further operations. However, in some cases GDB may suggest that the
+current thread be changed. For example, when stopping on a breakpoint
+it is reasonable to switch to the thread where breakpoint is hit. For
+another example, if the user issues the CLI `thread' command via the
+frontend, it is desirable to change the frontend's selected thread to
+the one specified by user. GDB communicates the suggestion to change
+current thread using the `=thread-selected' notification. No such
+notification is available for the selected frame at the moment.
+
+ Note that historically, MI shares the selected thread with CLI, so
+frontends used the `-thread-select' to execute commands in the right
+context. However, getting this to work right is cumbersome. The
+simplest way is for frontend to emit `-thread-select' command before
+every command. This doubles the number of commands that need to be
+sent. The alternative approach is to suppress `-thread-select' if the
+selected thread in GDB is supposed to be identical to the thread the
+frontend wants to operate on. However, getting this optimization right
+can be tricky. In particular, if the frontend sends several commands
+to GDB, and one of the commands changes the selected thread, then the
+behaviour of subsequent commands will change. So, a frontend should
+either wait for response from such problematic commands, or explicitly
+add `-thread-select' for all subsequent commands. No frontend is known
+to do this exactly right, so it is suggested to just always pass the
+`--thread' and `--frame' options.
+
+
+File: gdb.info, Node: Asynchronous and non-stop modes, Next: Thread groups, Prev: Context management, Up: GDB/MI General Design
+
+27.1.2 Asynchronous command execution and non-stop mode
+-------------------------------------------------------
+
+On some targets, GDB is capable of processing MI commands even while
+the target is running. This is called "asynchronous command execution"
+(*note Background Execution::). The frontend may specify a preferrence
+for asynchronous execution using the `-gdb-set target-async 1' command,
+which should be emitted before either running the executable or
+attaching to the target. After the frontend has started the executable
+or attached to the target, it can find if asynchronous execution is
+enabled using the `-list-target-features' command.
+
+ Even if GDB can accept a command while target is running, many
+commands that access the target do not work when the target is running.
+Therefore, asynchronous command execution is most useful when combined
+with non-stop mode (*note Non-Stop Mode::). Then, it is possible to
+examine the state of one thread, while other threads are running.
+
+ When a given thread is running, MI commands that try to access the
+target in the context of that thread may not work, or may work only on
+some targets. In particular, commands that try to operate on thread's
+stack will not work, on any target. Commands that read memory, or
+modify breakpoints, may work or not work, depending on the target. Note
+that even commands that operate on global state, such as `print',
+`set', and breakpoint commands, still access the target in the context
+of a specific thread, so frontend should try to find a stopped thread
+and perform the operation on that thread (using the `--thread' option).
+
+ Which commands will work in the context of a running thread is
+highly target dependent. However, the two commands `-exec-interrupt',
+to stop a thread, and `-thread-info', to find the state of a thread,
+will always work.
+
+
+File: gdb.info, Node: Thread groups, Prev: Asynchronous and non-stop modes, Up: GDB/MI General Design
+
+27.1.3 Thread groups
+--------------------
+
+GDB may be used to debug several processes at the same time. On some
+platfroms, GDB may support debugging of several hardware systems, each
+one having several cores with several different processes running on
+each core. This section describes the MI mechanism to support such
+debugging scenarios.
+
+ The key observation is that regardless of the structure of the
+target, MI can have a global list of threads, because most commands that
+accept the `--thread' option do not need to know what process that
+thread belongs to. Therefore, it is not necessary to introduce neither
+additional `--process' option, nor an notion of the current process in
+the MI interface. The only strictly new feature that is required is
+the ability to find how the threads are grouped into processes.
+
+ To allow the user to discover such grouping, and to support arbitrary
+hierarchy of machines/cores/processes, MI introduces the concept of a
+"thread group". Thread group is a collection of threads and other
+thread groups. A thread group always has a string identifier, a type,
+and may have additional attributes specific to the type. A new
+command, `-list-thread-groups', returns the list of top-level thread
+groups, which correspond to processes that GDB is debugging at the
+moment. By passing an identifier of a thread group to the
+`-list-thread-groups' command, it is possible to obtain the members of
+specific thread group.
+
+ To allow the user to easily discover processes, and other objects, he
+wishes to debug, a concept of "available thread group" is introduced.
+Available thread group is an thread group that GDB is not debugging,
+but that can be attached to, using the `-target-attach' command. The
+list of available top-level thread groups can be obtained using
+`-list-thread-groups --available'. In general, the content of a thread
+group may be only retrieved only after attaching to that thread group.
+
+ Thread groups are related to inferiors (*note Inferiors and
+Programs::). Each inferior corresponds to a thread group of a special
+type `process', and some additional operations are permitted on such
+thread groups.
+
+
+File: gdb.info, Node: GDB/MI Command Syntax, Next: GDB/MI Compatibility with CLI, Prev: GDB/MI General Design, Up: GDB/MI
+
+27.2 GDB/MI Command Syntax
+==========================
+
+* Menu:
+
+* GDB/MI Input Syntax::
+* GDB/MI Output Syntax::
+
+
+File: gdb.info, Node: GDB/MI Input Syntax, Next: GDB/MI Output Syntax, Up: GDB/MI Command Syntax
+
+27.2.1 GDB/MI Input Syntax
+--------------------------
+
+`COMMAND ==>'
+ `CLI-COMMAND | MI-COMMAND'
+
+`CLI-COMMAND ==>'
+ `[ TOKEN ] CLI-COMMAND NL', where CLI-COMMAND is any existing GDB
+ CLI command.
+
+`MI-COMMAND ==>'
+ `[ TOKEN ] "-" OPERATION ( " " OPTION )* `[' " --" `]' ( " "
+ PARAMETER )* NL'
+
+`TOKEN ==>'
+ "any sequence of digits"
+
+`OPTION ==>'
+ `"-" PARAMETER [ " " PARAMETER ]'
+
+`PARAMETER ==>'
+ `NON-BLANK-SEQUENCE | C-STRING'
+
+`OPERATION ==>'
+ _any of the operations described in this chapter_
+
+`NON-BLANK-SEQUENCE ==>'
+ _anything, provided it doesn't contain special characters such as
+ "-", NL, """ and of course " "_
+
+`C-STRING ==>'
+ `""" SEVEN-BIT-ISO-C-STRING-CONTENT """'
+
+`NL ==>'
+ `CR | CR-LF'
+
+Notes:
+
+ * The CLI commands are still handled by the MI interpreter; their
+ output is described below.
+
+ * The `TOKEN', when present, is passed back when the command
+ finishes.
+
+ * Some MI commands accept optional arguments as part of the parameter
+ list. Each option is identified by a leading `-' (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 `--' (this is useful when some parameters begin with a dash).
+
+ Pragmatics:
+
+ * We want easy access to the existing CLI syntax (for debugging).
+
+ * We want it to be easy to spot a MI operation.
+
+
+File: gdb.info, Node: GDB/MI Output Syntax, Prev: GDB/MI Input Syntax, Up: GDB/MI Command Syntax
+
+27.2.2 GDB/MI Output Syntax
+---------------------------
+
+The output from GDB/MI consists of zero or more out-of-band records
+followed, optionally, by a single result record. This result record is
+for the most recent command. The sequence of output records is
+terminated by `(gdb)'.
+
+ If an input command was prefixed with a `TOKEN' then the
+corresponding output for that command will also be prefixed by that same
+TOKEN.
+
+`OUTPUT ==>'
+ `( OUT-OF-BAND-RECORD )* [ RESULT-RECORD ] "(gdb)" NL'
+
+`RESULT-RECORD ==>'
+ ` [ TOKEN ] "^" RESULT-CLASS ( "," RESULT )* NL'
+
+`OUT-OF-BAND-RECORD ==>'
+ `ASYNC-RECORD | STREAM-RECORD'
+
+`ASYNC-RECORD ==>'
+ `EXEC-ASYNC-OUTPUT | STATUS-ASYNC-OUTPUT | NOTIFY-ASYNC-OUTPUT'
+
+`EXEC-ASYNC-OUTPUT ==>'
+ `[ TOKEN ] "*" ASYNC-OUTPUT'
+
+`STATUS-ASYNC-OUTPUT ==>'
+ `[ TOKEN ] "+" ASYNC-OUTPUT'
+
+`NOTIFY-ASYNC-OUTPUT ==>'
+ `[ TOKEN ] "=" ASYNC-OUTPUT'
+
+`ASYNC-OUTPUT ==>'
+ `ASYNC-CLASS ( "," RESULT )* NL'
+
+`RESULT-CLASS ==>'
+ `"done" | "running" | "connected" | "error" | "exit"'
+
+`ASYNC-CLASS ==>'
+ `"stopped" | OTHERS' (where OTHERS will be added depending on the
+ needs--this is still in development).
+
+`RESULT ==>'
+ ` VARIABLE "=" VALUE'
+
+`VARIABLE ==>'
+ ` STRING '
+
+`VALUE ==>'
+ ` CONST | TUPLE | LIST '
+
+`CONST ==>'
+ `C-STRING'
+
+`TUPLE ==>'
+ ` "{}" | "{" RESULT ( "," RESULT )* "}" '
+
+`LIST ==>'
+ ` "[]" | "[" VALUE ( "," VALUE )* "]" | "[" RESULT ( "," RESULT )*
+ "]" '
+
+`STREAM-RECORD ==>'
+ `CONSOLE-STREAM-OUTPUT | TARGET-STREAM-OUTPUT | LOG-STREAM-OUTPUT'
+
+`CONSOLE-STREAM-OUTPUT ==>'
+ `"~" C-STRING'
+
+`TARGET-STREAM-OUTPUT ==>'
+ `"@" C-STRING'
+
+`LOG-STREAM-OUTPUT ==>'
+ `"&" C-STRING'
+
+`NL ==>'
+ `CR | CR-LF'
+
+`TOKEN ==>'
+ _any sequence of digits_.
+
+Notes:
+
+ * All output sequences end in a single line containing a period.
+
+ * The `TOKEN' is from the corresponding request. Note that for all
+ async output, while the token is allowed by the grammar and may be
+ output by future versions of GDB for select async output messages,
+ it is generally omitted. Frontends should treat all async output
+ as reporting general changes in the state of the target and there
+ should be no need to associate async output to any prior command.
+
+ * 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 `+'.
+
+ * EXEC-ASYNC-OUTPUT contains asynchronous state change on the target
+ (stopped, started, disappeared). All async output is prefixed by
+ `*'.
+
+ * NOTIFY-ASYNC-OUTPUT contains supplementary information that the
+ client should handle (e.g., a new breakpoint information). All
+ notify output is prefixed by `='.
+
+ * 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 `~'.
+
+ * TARGET-STREAM-OUTPUT is the output produced by the target program.
+ All the target output is prefixed by `@'.
+
+ * 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 `&'.
+
+ * New GDB/MI commands should only output LISTS containing VALUES.
+
+
+ *Note GDB/MI Stream Records: GDB/MI Stream Records, for more details
+about the various output records.
+
+
+File: gdb.info, Node: GDB/MI Compatibility with CLI, Next: GDB/MI Development and Front Ends, Prev: GDB/MI Command Syntax, Up: GDB/MI
+
+27.3 GDB/MI Compatibility with CLI
+==================================
+
+For the developers convenience CLI commands can be entered directly,
+but there may be some unexpected behaviour. For example, commands that
+query the user will behave as if the user replied yes, breakpoint
+command lists are not executed and some CLI commands, such as `if',
+`when' and `define', prompt for further input with `>', which is not
+valid MI output.
+
+ This feature may be removed at some stage in the future and it is
+recommended that front ends use the `-interpreter-exec' command (*note
+-interpreter-exec::).
+
+
+File: gdb.info, Node: GDB/MI Development and Front Ends, Next: GDB/MI Output Records, Prev: GDB/MI Compatibility with CLI, Up: GDB/MI
+
+27.4 GDB/MI Development and Front Ends
+======================================
+
+The application which takes the MI output and presents the state of the
+program being debugged to the user is called a "front end".
+
+ Although GDB/MI is still incomplete, it is currently being used by a
+variety of front ends to GDB. This makes it difficult to introduce new
+functionality without breaking existing usage. This section tries to
+minimize the problems by describing how the protocol might change.
+
+ Some changes in MI need not break a carefully designed front end, and
+for these the MI version will remain unchanged. The following is a
+list of changes that may occur within one level, so front ends should
+parse MI output in a way that can handle them:
+
+ * New MI commands may be added.
+
+ * New fields may be added to the output of any MI command.
+
+ * The range of values for fields with specified values, e.g.,
+ `in_scope' (*note -var-update::) may be extended.
+
+
+ If the changes are likely to break front ends, the MI version level
+will be increased by one. This will allow the front end to parse the
+output according to the MI version. Apart from mi0, new versions of
+GDB will not support old versions of MI and it will be the
+responsibility of the front end to work with the new one.
+
+ The best way to avoid unexpected changes in MI that might break your
+front end is to make your project known to GDB developers and follow
+development on <gdb@sourceware.org> and <gdb-patches@sourceware.org>.
+
+
+File: gdb.info, Node: GDB/MI Output Records, Next: GDB/MI Simple Examples, Prev: GDB/MI Development and Front Ends, Up: GDB/MI
+
+27.5 GDB/MI Output Records
+==========================
+
+* Menu:
+
+* GDB/MI Result Records::
+* GDB/MI Stream Records::
+* GDB/MI Async Records::
+* GDB/MI Frame Information::
+* GDB/MI Thread Information::
+* GDB/MI Ada Exception Information::
+
+
+File: gdb.info, Node: GDB/MI Result Records, Next: GDB/MI Stream Records, Up: GDB/MI Output Records
+
+27.5.1 GDB/MI Result Records
+----------------------------
+
+In addition to a number of out-of-band notifications, the response to a
+GDB/MI command includes one of the following result indications:
+
+`"^done" [ "," RESULTS ]'
+ The synchronous operation was successful, `RESULTS' are the return
+ values.
+
+`"^running"'
+ This result record is equivalent to `^done'. Historically, it was
+ output instead of `^done' if the command has resumed the target.
+ This behaviour is maintained for backward compatibility, but all
+ frontends should treat `^done' and `^running' identically and rely
+ on the `*running' output record to determine which threads are
+ resumed.
+
+`"^connected"'
+ GDB has connected to a remote target.
+
+`"^error" "," C-STRING'
+ The operation failed. The `C-STRING' contains the corresponding
+ error message.
+
+`"^exit"'
+ GDB has terminated.
+
+
+
+File: gdb.info, Node: GDB/MI Stream Records, Next: GDB/MI Async Records, Prev: GDB/MI Result Records, Up: GDB/MI Output Records
+
+27.5.2 GDB/MI Stream Records
+----------------------------
+
+GDB internally maintains a number of output streams: the console, the
+target, and the log. The output intended for each of these streams is
+funneled through the GDB/MI interface using "stream records".
+
+ Each stream record begins with a unique "prefix character" which
+identifies its stream (*note GDB/MI Output Syntax: GDB/MI Output
+Syntax.). In addition to the prefix, each stream record contains a
+`STRING-OUTPUT'. This is either raw text (with an implicit new line)
+or a quoted C string (which does not contain an implicit newline).
+
+`"~" 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.
+
+`"@" STRING-OUTPUT'
+ The target output stream contains any textual output from the
+ running target. This is only present when GDB's event loop is
+ truly asynchronous, which is currently only the case for remote
+ targets.
+
+`"&" STRING-OUTPUT'
+ The log stream contains debugging messages being produced by GDB's
+ internals.
+
+
+File: gdb.info, Node: GDB/MI Async Records, Next: GDB/MI Frame Information, Prev: GDB/MI Stream Records, Up: GDB/MI Output Records
+
+27.5.3 GDB/MI Async Records
+---------------------------
+
+"Async" records are used to notify the GDB/MI client of additional
+changes that have occurred. Those changes can either be a consequence
+of GDB/MI commands (e.g., a breakpoint modified) or a result of target
+activity (e.g., target stopped).
+
+ The following is the list of possible async records:
+
+`*running,thread-id="THREAD"'
+ The target is now running. The THREAD field tells which specific
+ thread is now running, and can be `all' if all threads are
+ running. The frontend should assume that no interaction with a
+ running thread is possible after this notification is produced.
+ The frontend should not assume that this notification is output
+ only once for any command. GDB may emit this notification several
+ times, either for different threads, because it cannot resume all
+ threads together, or even for a single thread, if the thread must
+ be stepped though some code before letting it run freely.
+
+`*stopped,reason="REASON",thread-id="ID",stopped-threads="STOPPED",core="CORE"'
+ The target has stopped. The REASON field can have one of the
+ following values:
+
+ `breakpoint-hit'
+ A breakpoint was reached.
+
+ `watchpoint-trigger'
+ A watchpoint was triggered.
+
+ `read-watchpoint-trigger'
+ A read watchpoint was triggered.
+
+ `access-watchpoint-trigger'
+ An access watchpoint was triggered.
+
+ `function-finished'
+ An -exec-finish or similar CLI command was accomplished.
+
+ `location-reached'
+ An -exec-until or similar CLI command was accomplished.
+
+ `watchpoint-scope'
+ A watchpoint has gone out of scope.
+
+ `end-stepping-range'
+ An -exec-next, -exec-next-instruction, -exec-step,
+ -exec-step-instruction or similar CLI command was
+ accomplished.
+
+ `exited-signalled'
+ The inferior exited because of a signal.
+
+ `exited'
+ The inferior exited.
+
+ `exited-normally'
+ The inferior exited normally.
+
+ `signal-received'
+ A signal was received by the inferior.
+
+ The ID field identifies the thread that directly caused the stop -
+ for example by hitting a breakpoint. Depending on whether all-stop
+ mode is in effect (*note All-Stop Mode::), GDB may either stop all
+ threads, or only the thread that directly triggered the stop. If
+ all threads are stopped, the STOPPED field will have the value of
+ `"all"'. Otherwise, the value of the STOPPED field will be a list
+ of thread identifiers. Presently, this list will always include a
+ single thread, but frontend should be prepared to see several
+ threads in the list. The CORE field reports the processor core on
+ which the stop event has happened. This field may be absent if
+ such information is not available.
+
+`=thread-group-added,id="ID"'
+`=thread-group-removed,id="ID"'
+ A thread group was either added or removed. The ID field contains
+ the GDB identifier of the thread group. When a thread group is
+ added, it generally might not be associated with a running
+ process. When a thread group is removed, its id becomes invalid
+ and cannot be used in any way.
+
+`=thread-group-started,id="ID",pid="PID"'
+ A thread group became associated with a running program, either
+ because the program was just started or the thread group was
+ attached to a program. The ID field contains the GDB identifier
+ of the thread group. The PID field contains process identifier,
+ specific to the operating system.
+
+`=thread-group-exited,id="ID"[,exit-code="CODE"]'
+ A thread group is no longer associated with a running program,
+ either because the program has exited, or because it was detached
+ from. The ID field contains the GDB identifier of the thread
+ group. CODE is the exit code of the inferior; it exists only when
+ the inferior exited with some code.
+
+`=thread-created,id="ID",group-id="GID"'
+`=thread-exited,id="ID",group-id="GID"'
+ A thread either was created, or has exited. The ID field contains
+ the GDB identifier of the thread. The GID field identifies the
+ thread group this thread belongs to.
+
+`=thread-selected,id="ID"'
+ Informs that the selected thread was changed as result of the last
+ command. This notification is not emitted as result of
+ `-thread-select' command but is emitted whenever an MI command
+ that is not documented to change the selected thread actually
+ changes it. In particular, invoking, directly or indirectly (via
+ user-defined command), the CLI `thread' command, will generate
+ this notification.
+
+ We suggest that in response to this notification, front ends
+ highlight the selected thread and cause subsequent commands to
+ apply to that thread.
+
+`=library-loaded,...'
+ Reports that a new library file was loaded by the program. This
+ notification has 4 fields--ID, TARGET-NAME, HOST-NAME, and
+ SYMBOLS-LOADED. The ID field is an opaque identifier of the
+ library. For remote debugging case, TARGET-NAME and HOST-NAME
+ fields give the name of the library file on the target, and on the
+ host respectively. For native debugging, both those fields have
+ the same value. The SYMBOLS-LOADED field is emitted only for
+ backward compatibility and should not be relied on to convey any
+ useful information. The THREAD-GROUP field, if present, specifies
+ the id of the thread group in whose context the library was
+ loaded. If the field is absent, it means the library was loaded
+ in the context of all present thread groups.
+
+`=library-unloaded,...'
+ Reports that a library was unloaded by the program. This
+ notification has 3 fields--ID, TARGET-NAME and HOST-NAME with the
+ same meaning as for the `=library-loaded' notification. The
+ THREAD-GROUP field, if present, specifies the id of the thread
+ group in whose context the library was unloaded. If the field is
+ absent, it means the library was unloaded in the context of all
+ present thread groups.
+
+
+
+File: gdb.info, Node: GDB/MI Frame Information, Next: GDB/MI Thread Information, Prev: GDB/MI Async Records, Up: GDB/MI Output Records
+
+27.5.4 GDB/MI Frame Information
+-------------------------------
+
+Response from many MI commands includes an information about stack
+frame. This information is a tuple that may have the following fields:
+
+`level'
+ The level of the stack frame. The innermost frame has the level of
+ zero. This field is always present.
+
+`func'
+ The name of the function corresponding to the frame. This field
+ may be absent if GDB is unable to determine the function name.
+
+`addr'
+ The code address for the frame. This field is always present.
+
+`file'
+ The name of the source files that correspond to the frame's code
+ address. This field may be absent.
+
+`line'
+ The source line corresponding to the frames' code address. This
+ field may be absent.
+
+`from'
+ The name of the binary file (either executable or shared library)
+ the corresponds to the frame's code address. This field may be
+ absent.
+
+
+
+File: gdb.info, Node: GDB/MI Thread Information, Next: GDB/MI Ada Exception Information, Prev: GDB/MI Frame Information, Up: GDB/MI Output Records
+
+27.5.5 GDB/MI Thread Information
+--------------------------------
+
+Whenever GDB has to report an information about a thread, it uses a
+tuple with the following fields:
+
+`id'
+ The numeric id assigned to the thread by GDB. This field is
+ always present.
+
+`target-id'
+ Target-specific string identifying the thread. This field is
+ always present.
+
+`details'
+ Additional information about the thread provided by the target.
+ It is supposed to be human-readable and not interpreted by the
+ frontend. This field is optional.
+
+`state'
+ Either `stopped' or `running', depending on whether the thread is
+ presently running. This field is always present.
+
+`core'
+ The value of this field is an integer number of the processor core
+ the thread was last seen on. This field is optional.
+
+
+File: gdb.info, Node: GDB/MI Ada Exception Information, Prev: GDB/MI Thread Information, Up: GDB/MI Output Records
+
+27.5.6 GDB/MI Ada Exception Information
+---------------------------------------
+
+Whenever a `*stopped' record is emitted because the program stopped
+after hitting an exception catchpoint (*note Set Catchpoints::), GDB
+provides the name of the exception that was raised via the
+`exception-name' field.
+
+
+File: gdb.info, Node: GDB/MI Simple Examples, Next: GDB/MI Command Description Format, Prev: GDB/MI Output Records, Up: GDB/MI
+
+27.6 Simple Examples of GDB/MI Interaction
+==========================================
+
+This subsection presents several simple examples of interaction using
+the GDB/MI interface. In these examples, `->' means that the following
+line is passed to GDB/MI as input, while `<-' means the output received
+from GDB/MI.
+
+ Note the line breaks shown in the examples are here only for
+readability, they don't appear in the real output.
+
+Setting a Breakpoint
+--------------------
+
+Setting a breakpoint generates synchronous output which contains
+detailed information of the breakpoint.
+
+ -> -break-insert main
+ <- ^done,bkpt={number="1",type="breakpoint",disp="keep",
+ enabled="y",addr="0x08048564",func="main",file="myprog.c",
+ fullname="/home/nickrob/myprog.c",line="68",times="0"}
+ <- (gdb)
+
+Program Execution
+-----------------
+
+Program execution generates asynchronous records and MI gives the
+reason that execution stopped.
+
+ -> -exec-run
+ <- ^running
+ <- (gdb)
+ <- *stopped,reason="breakpoint-hit",disp="keep",bkptno="1",thread-id="0",
+ frame={addr="0x08048564",func="main",
+ args=[{name="argc",value="1"},{name="argv",value="0xbfc4d4d4"}],
+ file="myprog.c",fullname="/home/nickrob/myprog.c",line="68"}
+ <- (gdb)
+ -> -exec-continue
+ <- ^running
+ <- (gdb)
+ <- *stopped,reason="exited-normally"
+ <- (gdb)
+
+Quitting GDB
+------------
+
+Quitting GDB just prints the result class `^exit'.
+
+ -> (gdb)
+ <- -gdb-exit
+ <- ^exit
+
+ Please note that `^exit' is printed immediately, but it might take
+some time for GDB to actually exit. During that time, GDB performs
+necessary cleanups, including killing programs being debugged or
+disconnecting from debug hardware, so the frontend should wait till GDB
+exits and should only forcibly kill GDB if it fails to exit in
+reasonable time.
+
+A Bad Command
+-------------
+
+Here's what happens if you pass a non-existent command:
+
+ -> -rubbish
+ <- ^error,msg="Undefined MI command: rubbish"
+ <- (gdb)
+
+
+File: gdb.info, Node: GDB/MI Command Description Format, Next: GDB/MI Breakpoint Commands, Prev: GDB/MI Simple Examples, Up: GDB/MI
+
+27.7 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 section.
+
+Motivation
+----------
+
+The motivation for this collection of commands.
+
+Introduction
+------------
+
+A brief introduction to this collection of commands as a whole.
+
+Commands
+--------
+
+For each command in the block, the following is described:
+
+Synopsis
+........
+
+ -command ARGS...
+
+Result
+......
+
+GDB Command
+...........
+
+The corresponding GDB CLI command(s), if any.
+
+Example
+.......
+
+Example(s) formatted for readability. Some of the described commands
+have not been implemented yet and these are labeled N.A. (not
+available).
+
+
+File: gdb.info, Node: GDB/MI Breakpoint Commands, Next: GDB/MI Program Context, Prev: GDB/MI Command Description Format, Up: GDB/MI
+
+27.8 GDB/MI Breakpoint Commands
+===============================
+
+This section documents GDB/MI commands for manipulating breakpoints.
+
+The `-break-after' Command
+--------------------------
+
+Synopsis
+........
+
+ -break-after NUMBER COUNT
+
+ The breakpoint number NUMBER is not in effect until it has been hit
+COUNT times. To see how this is reflected in the output of the
+`-break-list' command, see the description of the `-break-list' command
+below.
+
+GDB Command
+...........
+
+The corresponding GDB command is `ignore'.
+
+Example
+.......
+
+ (gdb)
+ -break-insert main
+ ^done,bkpt={number="1",type="breakpoint",disp="keep",
+ enabled="y",addr="0x000100d0",func="main",file="hello.c",
+ fullname="/home/foo/hello.c",line="5",times="0"}
+ (gdb)
+ -break-after 1 3
+ ~
+ ^done
+ (gdb)
+ -break-list
+ ^done,BreakpointTable={nr_rows="1",nr_cols="6",
+ hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+ {width="14",alignment="-1",col_name="type",colhdr="Type"},
+ {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+ {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+ {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+ {width="40",alignment="2",col_name="what",colhdr="What"}],
+ body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+ addr="0x000100d0",func="main",file="hello.c",fullname="/home/foo/hello.c",
+ line="5",times="0",ignore="3"}]}
+ (gdb)
+
+The `-break-commands' Command
+-----------------------------
+
+Synopsis
+........
+
+ -break-commands NUMBER [ COMMAND1 ... COMMANDN ]
+
+ Specifies the CLI commands that should be executed when breakpoint
+NUMBER is hit. The parameters COMMAND1 to COMMANDN are the commands.
+If no command is specified, any previously-set commands are cleared.
+*Note Break Commands::. Typical use of this functionality is tracing a
+program, that is, printing of values of some variables whenever
+breakpoint is hit and then continuing.
+
+GDB Command
+...........
+
+The corresponding GDB command is `commands'.
+
+Example
+.......
+
+ (gdb)
+ -break-insert main
+ ^done,bkpt={number="1",type="breakpoint",disp="keep",
+ enabled="y",addr="0x000100d0",func="main",file="hello.c",
+ fullname="/home/foo/hello.c",line="5",times="0"}
+ (gdb)
+ -break-commands 1 "print v" "continue"
+ ^done
+ (gdb)
+
+The `-break-condition' Command
+------------------------------
+
+Synopsis
+........
+
+ -break-condition NUMBER EXPR
+
+ Breakpoint NUMBER will stop the program only if the condition in
+EXPR is true. The condition becomes part of the `-break-list' output
+(see the description of the `-break-list' command below).
+
+GDB Command
+...........
+
+The corresponding GDB command is `condition'.
+
+Example
+.......
+
+ (gdb)
+ -break-condition 1 1
+ ^done
+ (gdb)
+ -break-list
+ ^done,BreakpointTable={nr_rows="1",nr_cols="6",
+ hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+ {width="14",alignment="-1",col_name="type",colhdr="Type"},
+ {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+ {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+ {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+ {width="40",alignment="2",col_name="what",colhdr="What"}],
+ body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+ addr="0x000100d0",func="main",file="hello.c",fullname="/home/foo/hello.c",
+ line="5",cond="1",times="0",ignore="3"}]}
+ (gdb)
+
+The `-break-delete' Command
+---------------------------
+
+Synopsis
+........
+
+ -break-delete ( BREAKPOINT )+
+
+ Delete the breakpoint(s) whose number(s) are specified in the
+argument list. This is obviously reflected in the breakpoint list.
+
+GDB Command
+...........
+
+The corresponding GDB command is `delete'.
+
+Example
+.......
+
+ (gdb)
+ -break-delete 1
+ ^done
+ (gdb)
+ -break-list
+ ^done,BreakpointTable={nr_rows="0",nr_cols="6",
+ hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+ {width="14",alignment="-1",col_name="type",colhdr="Type"},
+ {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+ {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+ {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+ {width="40",alignment="2",col_name="what",colhdr="What"}],
+ body=[]}
+ (gdb)
+
+The `-break-disable' Command
+----------------------------
+
+Synopsis
+........
+
+ -break-disable ( BREAKPOINT )+
+
+ Disable the named BREAKPOINT(s). The field `enabled' in the break
+list is now set to `n' for the named BREAKPOINT(s).
+
+GDB Command
+...........
+
+The corresponding GDB command is `disable'.
+
+Example
+.......
+
+ (gdb)
+ -break-disable 2
+ ^done
+ (gdb)
+ -break-list
+ ^done,BreakpointTable={nr_rows="1",nr_cols="6",
+ hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+ {width="14",alignment="-1",col_name="type",colhdr="Type"},
+ {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+ {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+ {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+ {width="40",alignment="2",col_name="what",colhdr="What"}],
+ body=[bkpt={number="2",type="breakpoint",disp="keep",enabled="n",
+ addr="0x000100d0",func="main",file="hello.c",fullname="/home/foo/hello.c",
+ line="5",times="0"}]}
+ (gdb)
+
+The `-break-enable' Command
+---------------------------
+
+Synopsis
+........
+
+ -break-enable ( BREAKPOINT )+
+
+ Enable (previously disabled) BREAKPOINT(s).
+
+GDB Command
+...........
+
+The corresponding GDB command is `enable'.
+
+Example
+.......
+
+ (gdb)
+ -break-enable 2
+ ^done
+ (gdb)
+ -break-list
+ ^done,BreakpointTable={nr_rows="1",nr_cols="6",
+ hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+ {width="14",alignment="-1",col_name="type",colhdr="Type"},
+ {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+ {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+ {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+ {width="40",alignment="2",col_name="what",colhdr="What"}],
+ body=[bkpt={number="2",type="breakpoint",disp="keep",enabled="y",
+ addr="0x000100d0",func="main",file="hello.c",fullname="/home/foo/hello.c",
+ line="5",times="0"}]}
+ (gdb)
+
+The `-break-info' Command
+-------------------------
+
+Synopsis
+........
+
+ -break-info BREAKPOINT
+
+ Get information about a single breakpoint.
+
+GDB Command
+...........
+
+The corresponding GDB command is `info break BREAKPOINT'.
+
+Example
+.......
+
+N.A.
+
+The `-break-insert' Command
+---------------------------
+
+Synopsis
+........
+
+ -break-insert [ -t ] [ -h ] [ -f ] [ -d ] [ -a ]
+ [ -c CONDITION ] [ -i IGNORE-COUNT ]
+ [ -p THREAD ] [ LOCATION ]
+
+If specified, LOCATION, can be one of:
+
+ * function
+
+ * filename:linenum
+
+ * filename:function
+
+ * *address
+
+ The possible optional parameters of this command are:
+
+`-t'
+ Insert a temporary breakpoint.
+
+`-h'
+ Insert a hardware breakpoint.
+
+`-c CONDITION'
+ Make the breakpoint conditional on CONDITION.
+
+`-i IGNORE-COUNT'
+ Initialize the IGNORE-COUNT.
+
+`-f'
+ If LOCATION cannot be parsed (for example if it refers to unknown
+ files or functions), create a pending breakpoint. Without this
+ flag, GDB will report an error, and won't create a breakpoint, if
+ LOCATION cannot be parsed.
+
+`-d'
+ Create a disabled breakpoint.
+
+`-a'
+ Create a tracepoint. *Note Tracepoints::. When this parameter is
+ used together with `-h', a fast tracepoint is created.
+
+Result
+......
+
+The result is in the form:
+
+ ^done,bkpt={number="NUMBER",type="TYPE",disp="del"|"keep",
+ enabled="y"|"n",addr="HEX",func="FUNCNAME",file="FILENAME",
+ fullname="FULL_FILENAME",line="LINENO",[thread="THREADNO,]
+ times="TIMES"}
+
+where NUMBER is the GDB number for this breakpoint, FUNCNAME is the
+name of the function where the breakpoint was inserted, FILENAME is the
+name of the source file which contains this function, LINENO is the
+source line number within that file and TIMES the number of times that
+the breakpoint has been hit (always 0 for -break-insert but may be
+greater for -break-info or -break-list which use the same output).
+
+ Note: this format is open to change.
+
+GDB Command
+...........
+
+The corresponding GDB commands are `break', `tbreak', `hbreak',
+`thbreak', and `rbreak'.
+
+Example
+.......
+
+ (gdb)
+ -break-insert main
+ ^done,bkpt={number="1",addr="0x0001072c",file="recursive2.c",
+ fullname="/home/foo/recursive2.c,line="4",times="0"}
+ (gdb)
+ -break-insert -t foo
+ ^done,bkpt={number="2",addr="0x00010774",file="recursive2.c",
+ fullname="/home/foo/recursive2.c,line="11",times="0"}
+ (gdb)
+ -break-list
+ ^done,BreakpointTable={nr_rows="2",nr_cols="6",
+ hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+ {width="14",alignment="-1",col_name="type",colhdr="Type"},
+ {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+ {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+ {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+ {width="40",alignment="2",col_name="what",colhdr="What"}],
+ body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+ addr="0x0001072c", func="main",file="recursive2.c",
+ fullname="/home/foo/recursive2.c,"line="4",times="0"},
+ bkpt={number="2",type="breakpoint",disp="del",enabled="y",
+ addr="0x00010774",func="foo",file="recursive2.c",
+ fullname="/home/foo/recursive2.c",line="11",times="0"}]}
+ (gdb)
+ -break-insert -r foo.*
+ ~int foo(int, int);
+ ^done,bkpt={number="3",addr="0x00010774",file="recursive2.c,
+ "fullname="/home/foo/recursive2.c",line="11",times="0"}
+ (gdb)
+
+The `-break-list' Command
+-------------------------
+
+Synopsis
+........
+
+ -break-list
+
+ Displays the list of inserted breakpoints, showing the following
+fields:
+
+`Number'
+ number of the breakpoint
+
+`Type'
+ type of the breakpoint: `breakpoint' or `watchpoint'
+
+`Disposition'
+ should the breakpoint be deleted or disabled when it is hit: `keep'
+ or `nokeep'
+
+`Enabled'
+ is the breakpoint enabled or no: `y' or `n'
+
+`Address'
+ memory location at which the breakpoint is set
+
+`What'
+ logical location of the breakpoint, expressed by function name,
+ file name, line number
+
+`Times'
+ number of times the breakpoint has been hit
+
+ If there are no breakpoints or watchpoints, the `BreakpointTable'
+`body' field is an empty list.
+
+GDB Command
+...........
+
+The corresponding GDB command is `info break'.
+
+Example
+.......
+
+ (gdb)
+ -break-list
+ ^done,BreakpointTable={nr_rows="2",nr_cols="6",
+ hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+ {width="14",alignment="-1",col_name="type",colhdr="Type"},
+ {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+ {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+ {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+ {width="40",alignment="2",col_name="what",colhdr="What"}],
+ body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+ addr="0x000100d0",func="main",file="hello.c",line="5",times="0"},
+ bkpt={number="2",type="breakpoint",disp="keep",enabled="y",
+ addr="0x00010114",func="foo",file="hello.c",fullname="/home/foo/hello.c",
+ line="13",times="0"}]}
+ (gdb)
+
+ Here's an example of the result when there are no breakpoints:
+
+ (gdb)
+ -break-list
+ ^done,BreakpointTable={nr_rows="0",nr_cols="6",
+ hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+ {width="14",alignment="-1",col_name="type",colhdr="Type"},
+ {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+ {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+ {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+ {width="40",alignment="2",col_name="what",colhdr="What"}],
+ body=[]}
+ (gdb)
+
+The `-break-passcount' Command
+------------------------------
+
+Synopsis
+........
+
+ -break-passcount TRACEPOINT-NUMBER PASSCOUNT
+
+ Set the passcount for tracepoint TRACEPOINT-NUMBER to PASSCOUNT. If
+the breakpoint referred to by TRACEPOINT-NUMBER is not a tracepoint,
+error is emitted. This corresponds to CLI command `passcount'.
+
+The `-break-watch' Command
+--------------------------
+
+Synopsis
+........
+
+ -break-watch [ -a | -r ]
+
+ Create a watchpoint. With the `-a' option it will create an
+"access" watchpoint, i.e., a watchpoint that triggers either on a read
+from or on a write to the memory location. With the `-r' option, the
+watchpoint created is a "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. *Note
+Setting Watchpoints: Set Watchpoints.
+
+ Note that `-break-list' will report a single list of watchpoints and
+breakpoints inserted.
+
+GDB Command
+...........
+
+The corresponding GDB commands are `watch', `awatch', and `rwatch'.
+
+Example
+.......
+
+Setting a watchpoint on a variable in the `main' function:
+
+ (gdb)
+ -break-watch x
+ ^done,wpt={number="2",exp="x"}
+ (gdb)
+ -exec-continue
+ ^running
+ (gdb)
+ *stopped,reason="watchpoint-trigger",wpt={number="2",exp="x"},
+ value={old="-268439212",new="55"},
+ frame={func="main",args=[],file="recursive2.c",
+ fullname="/home/foo/bar/recursive2.c",line="5"}
+ (gdb)
+
+ 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.
+
+ (gdb)
+ -break-watch C
+ ^done,wpt={number="5",exp="C"}
+ (gdb)
+ -exec-continue
+ ^running
+ (gdb)
+ *stopped,reason="watchpoint-trigger",
+ wpt={number="5",exp="C"},value={old="-276895068",new="3"},
+ frame={func="callee4",args=[],
+ file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+ fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="13"}
+ (gdb)
+ -exec-continue
+ ^running
+ (gdb)
+ *stopped,reason="watchpoint-scope",wpnum="5",
+ frame={func="callee3",args=[{name="strarg",
+ value="0x11940 \"A string argument.\""}],
+ file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+ fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="18"}
+ (gdb)
+
+ Listing breakpoints and watchpoints, at different points in the
+program execution. Note that once the watchpoint goes out of scope, it
+is deleted.
+
+ (gdb)
+ -break-watch C
+ ^done,wpt={number="2",exp="C"}
+ (gdb)
+ -break-list
+ ^done,BreakpointTable={nr_rows="2",nr_cols="6",
+ hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+ {width="14",alignment="-1",col_name="type",colhdr="Type"},
+ {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+ {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+ {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+ {width="40",alignment="2",col_name="what",colhdr="What"}],
+ body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+ addr="0x00010734",func="callee4",
+ file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+ fullname="/home/foo/devo/gdb/testsuite/gdb.mi/basics.c"line="8",times="1"},
+ bkpt={number="2",type="watchpoint",disp="keep",
+ enabled="y",addr="",what="C",times="0"}]}
+ (gdb)
+ -exec-continue
+ ^running
+ (gdb)
+ *stopped,reason="watchpoint-trigger",wpt={number="2",exp="C"},
+ value={old="-276895068",new="3"},
+ frame={func="callee4",args=[],
+ file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+ fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="13"}
+ (gdb)
+ -break-list
+ ^done,BreakpointTable={nr_rows="2",nr_cols="6",
+ hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+ {width="14",alignment="-1",col_name="type",colhdr="Type"},
+ {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+ {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+ {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+ {width="40",alignment="2",col_name="what",colhdr="What"}],
+ body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+ addr="0x00010734",func="callee4",
+ file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+ fullname="/home/foo/devo/gdb/testsuite/gdb.mi/basics.c",line="8",times="1"},
+ bkpt={number="2",type="watchpoint",disp="keep",
+ enabled="y",addr="",what="C",times="-5"}]}
+ (gdb)
+ -exec-continue
+ ^running
+ ^done,reason="watchpoint-scope",wpnum="2",
+ frame={func="callee3",args=[{name="strarg",
+ value="0x11940 \"A string argument.\""}],
+ file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+ fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="18"}
+ (gdb)
+ -break-list
+ ^done,BreakpointTable={nr_rows="1",nr_cols="6",
+ hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+ {width="14",alignment="-1",col_name="type",colhdr="Type"},
+ {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+ {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+ {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+ {width="40",alignment="2",col_name="what",colhdr="What"}],
+ body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+ addr="0x00010734",func="callee4",
+ file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+ fullname="/home/foo/devo/gdb/testsuite/gdb.mi/basics.c",line="8",
+ times="1"}]}
+ (gdb)
+
+
+File: gdb.info, Node: GDB/MI Program Context, Next: GDB/MI Thread Commands, Prev: GDB/MI Breakpoint Commands, Up: GDB/MI
+
+27.9 GDB/MI Program Context
+============================
+
+The `-exec-arguments' Command
+-----------------------------
+
+Synopsis
+........
+
+ -exec-arguments ARGS
+
+ Set the inferior program arguments, to be used in the next
+`-exec-run'.
+
+GDB Command
+...........
+
+The corresponding GDB command is `set args'.
+
+Example
+.......
+
+ (gdb)
+ -exec-arguments -v word
+ ^done
+ (gdb)
+
+The `-environment-cd' Command
+-----------------------------
+
+Synopsis
+........
+
+ -environment-cd PATHDIR
+
+ Set GDB's working directory.
+
+GDB Command
+...........
+
+The corresponding GDB command is `cd'.
+
+Example
+.......
+
+ (gdb)
+ -environment-cd /kwikemart/marge/ezannoni/flathead-dev/devo/gdb
+ ^done
+ (gdb)
+
+The `-environment-directory' Command
+------------------------------------
+
+Synopsis
+........
+
+ -environment-directory [ -r ] [ PATHDIR ]+
+
+ Add directories PATHDIR to beginning of search path for source files.
+If the `-r' option is used, the search path is reset to the default
+search path. If directories PATHDIR are supplied in addition to the
+`-r' option, the search path is first reset and then addition occurs as
+normal. Multiple directories may be specified, separated by blanks.
+Specifying multiple directories in a single command results in the
+directories added to the beginning of the search path in the same order
+they were presented in the command. If blanks are needed as part of a
+directory name, double-quotes should be used around the name. In the
+command output, the path will show up separated by the system
+directory-separator character. The directory-separator character must
+not be used in any directory name. If no directories are specified,
+the current search path is displayed.
+
+GDB Command
+...........
+
+The corresponding GDB command is `dir'.
+
+Example
+.......
+
+ (gdb)
+ -environment-directory /kwikemart/marge/ezannoni/flathead-dev/devo/gdb
+ ^done,source-path="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb:$cdir:$cwd"
+ (gdb)
+ -environment-directory ""
+ ^done,source-path="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb:$cdir:$cwd"
+ (gdb)
+ -environment-directory -r /home/jjohnstn/src/gdb /usr/src
+ ^done,source-path="/home/jjohnstn/src/gdb:/usr/src:$cdir:$cwd"
+ (gdb)
+ -environment-directory -r
+ ^done,source-path="$cdir:$cwd"
+ (gdb)
+
+The `-environment-path' Command
+-------------------------------
+
+Synopsis
+........
+
+ -environment-path [ -r ] [ PATHDIR ]+
+
+ Add directories PATHDIR to beginning of search path for object files.
+If the `-r' option is used, the search path is reset to the original
+search path that existed at gdb start-up. If directories PATHDIR are
+supplied in addition to the `-r' option, the search path is first reset
+and then addition occurs as normal. Multiple directories may be
+specified, separated by blanks. Specifying multiple directories in a
+single command results in the directories added to the beginning of the
+search path in the same order they were presented in the command. If
+blanks are needed as part of a directory name, double-quotes should be
+used around the name. In the command output, the path will show up
+separated by the system directory-separator character. The
+directory-separator character must not be used in any directory name.
+If no directories are specified, the current path is displayed.
+
+GDB Command
+...........
+
+The corresponding GDB command is `path'.
+
+Example
+.......
+
+ (gdb)
+ -environment-path
+ ^done,path="/usr/bin"
+ (gdb)
+ -environment-path /kwikemart/marge/ezannoni/flathead-dev/ppc-eabi/gdb /bin
+ ^done,path="/kwikemart/marge/ezannoni/flathead-dev/ppc-eabi/gdb:/bin:/usr/bin"
+ (gdb)
+ -environment-path -r /usr/local/bin
+ ^done,path="/usr/local/bin:/usr/bin"
+ (gdb)
+
+The `-environment-pwd' Command
+------------------------------
+
+Synopsis
+........
+
+ -environment-pwd
+
+ Show the current working directory.
+
+GDB Command
+...........
+
+The corresponding GDB command is `pwd'.
+
+Example
+.......
+
+ (gdb)
+ -environment-pwd
+ ^done,cwd="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb"
+ (gdb)
+
+
+File: gdb.info, Node: GDB/MI Thread Commands, Next: GDB/MI Program Execution, Prev: GDB/MI Program Context, Up: GDB/MI
+
+27.10 GDB/MI Thread Commands
+============================
+
+The `-thread-info' Command
+--------------------------
+
+Synopsis
+........
+
+ -thread-info [ THREAD-ID ]
+
+ Reports information about either a specific thread, if the THREAD-ID
+parameter is present, or about all threads. When printing information
+about all threads, also reports the current thread.
+
+GDB Command
+...........
+
+The `info thread' command prints the same information about all threads.
+
+Result
+......
+
+The result is a list of threads. The following attributes are defined
+for a given thread:
+
+`current'
+ This field exists only for the current thread. It has the value
+ `*'.
+
+`id'
+ The identifier that GDB uses to refer to the thread.
+
+`target-id'
+ The identifier that the target uses to refer to the thread.
+
+`details'
+ Extra information about the thread, in a target-specific format.
+ This field is optional.
+
+`name'
+ The name of the thread. If the user specified a name using the
+ `thread name' command, then this name is given. Otherwise, if GDB
+ can extract the thread name from the target, then that name is
+ given. If GDB cannot find the thread name, then this field is
+ omitted.
+
+`frame'
+ The stack frame currently executing in the thread.
+
+`state'
+ The thread's state. The `state' field may have the following
+ values:
+
+ `stopped'
+ The thread is stopped. Frame information is available for
+ stopped threads.
+
+ `running'
+ The thread is running. There's no frame information for
+ running threads.
+
+
+`core'
+ If GDB can find the CPU core on which this thread is running, then
+ this field is the core identifier. This field is optional.
+
+
+Example
+.......
+
+ -thread-info
+ ^done,threads=[
+ {id="2",target-id="Thread 0xb7e14b90 (LWP 21257)",
+ frame={level="0",addr="0xffffe410",func="__kernel_vsyscall",
+ args=[]},state="running"},
+ {id="1",target-id="Thread 0xb7e156b0 (LWP 21254)",
+ frame={level="0",addr="0x0804891f",func="foo",
+ args=[{name="i",value="10"}],
+ file="/tmp/a.c",fullname="/tmp/a.c",line="158"},
+ state="running"}],
+ current-thread-id="1"
+ (gdb)
+
+The `-thread-list-ids' Command
+------------------------------
+
+Synopsis
+........
+
+ -thread-list-ids
+
+ 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.
+
+ This command is retained for historical reasons, the `-thread-info'
+command should be used instead.
+
+GDB Command
+...........
+
+Part of `info threads' supplies the same information.
+
+Example
+.......
+
+ (gdb)
+ -thread-list-ids
+ ^done,thread-ids={thread-id="3",thread-id="2",thread-id="1"},
+ current-thread-id="1",number-of-threads="3"
+ (gdb)
+
+The `-thread-select' Command
+----------------------------
+
+Synopsis
+........
+
+ -thread-select THREADNUM
+
+ Make THREADNUM the current thread. It prints the number of the new
+current thread, and the topmost frame for that thread.
+
+ This command is deprecated in favor of explicitly using the
+`--thread' option to each command.
+
+GDB Command
+...........
+
+The corresponding GDB command is `thread'.
+
+Example
+.......
+
+ (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)
+
+
+File: gdb.info, Node: GDB/MI Program Execution, Next: GDB/MI Stack Manipulation, Prev: GDB/MI Thread Commands, Up: GDB/MI
+
+27.11 GDB/MI Program Execution
+==============================
+
+These are the asynchronous commands which generate the out-of-band
+record `*stopped'. Currently GDB only really executes asynchronously
+with remote targets and this interaction is mimicked in other cases.
+
+The `-exec-continue' Command
+----------------------------
+
+Synopsis
+........
+
+ -exec-continue [--reverse] [--all|--thread-group N]
+
+ Resumes the execution of the inferior program, which will continue
+to execute until it reaches a debugger stop event. If the `--reverse'
+option is specified, execution resumes in reverse until it reaches a
+stop event. Stop events may include
+ * breakpoints or watchpoints
+
+ * signals or exceptions
+
+ * the end of the process (or its beginning under `--reverse')
+
+ * the end or beginning of a replay log if one is being used.
+ In all-stop mode (*note All-Stop Mode::), may resume only one
+thread, or all threads, depending on the value of the
+`scheduler-locking' variable. If `--all' is specified, all threads (in
+all inferiors) will be resumed. The `--all' option is ignored in
+all-stop mode. If the `--thread-group' options is specified, then all
+threads in that thread group are resumed.
+
+GDB Command
+...........
+
+The corresponding GDB corresponding is `continue'.
+
+Example
+.......
+
+ -exec-continue
+ ^running
+ (gdb)
+ @Hello world
+ *stopped,reason="breakpoint-hit",disp="keep",bkptno="2",frame={
+ func="foo",args=[],file="hello.c",fullname="/home/foo/bar/hello.c",
+ line="13"}
+ (gdb)
+
+The `-exec-finish' Command
+--------------------------
+
+Synopsis
+........
+
+ -exec-finish [--reverse]
+
+ Resumes the execution of the inferior program until the current
+function is exited. Displays the results returned by the function. If
+the `--reverse' option is specified, resumes the reverse execution of
+the inferior program until the point where current function was called.
+
+GDB Command
+...........
+
+The corresponding GDB command is `finish'.
+
+Example
+.......
+
+Function returning `void'.
+
+ -exec-finish
+ ^running
+ (gdb)
+ @hello from foo
+ *stopped,reason="function-finished",frame={func="main",args=[],
+ file="hello.c",fullname="/home/foo/bar/hello.c",line="7"}
+ (gdb)
+
+ Function returning other than `void'. The name of the internal GDB
+variable storing the result is printed, together with the value itself.
+
+ -exec-finish
+ ^running
+ (gdb)
+ *stopped,reason="function-finished",frame={addr="0x000107b0",func="foo",
+ args=[{name="a",value="1"],{name="b",value="9"}},
+ file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+ gdb-result-var="$1",return-value="0"
+ (gdb)
+
+The `-exec-interrupt' Command
+-----------------------------
+
+Synopsis
+........
+
+ -exec-interrupt [--all|--thread-group N]
+
+ 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.
+
+ Note that when asynchronous execution is enabled, this command is
+asynchronous just like other execution commands. That is, first the
+`^done' response will be printed, and the target stop will be reported
+after that using the `*stopped' notification.
+
+ In non-stop mode, only the context thread is interrupted by default.
+All threads (in all inferiors) will be interrupted if the `--all'
+option is specified. If the `--thread-group' option is specified, all
+threads in that group will be interrupted.
+
+GDB Command
+...........
+
+The corresponding GDB command is `interrupt'.
+
+Example
+.......
+
+ (gdb)
+ 111-exec-continue
+ 111^running
+
+ (gdb)
+ 222-exec-interrupt
+ 222^done
+ (gdb)
+ 111*stopped,signal-name="SIGINT",signal-meaning="Interrupt",
+ frame={addr="0x00010140",func="foo",args=[],file="try.c",
+ fullname="/home/foo/bar/try.c",line="13"}
+ (gdb)
+
+ (gdb)
+ -exec-interrupt
+ ^error,msg="mi_cmd_exec_interrupt: Inferior not executing."
+ (gdb)
+
+The `-exec-jump' Command
+------------------------
+
+Synopsis
+........
+
+ -exec-jump LOCATION
+
+ Resumes execution of the inferior program at the location specified
+by parameter. *Note Specify Location::, for a description of the
+different forms of LOCATION.
+
+GDB Command
+...........
+
+The corresponding GDB command is `jump'.
+
+Example
+.......
+
+ -exec-jump foo.c:10
+ *running,thread-id="all"
+ ^running
+
+The `-exec-next' Command
+------------------------
+
+Synopsis
+........
+
+ -exec-next [--reverse]
+
+ Resumes execution of the inferior program, stopping when the
+beginning of the next source line is reached.
+
+ If the `--reverse' option is specified, resumes reverse execution of
+the inferior program, stopping at the beginning of the previous source
+line. If you issue this command on the first line of a function, it
+will take you back to the caller of that function, to the source line
+where the function was called.
+
+GDB Command
+...........
+
+The corresponding GDB command is `next'.
+
+Example
+.......
+
+ -exec-next
+ ^running
+ (gdb)
+ *stopped,reason="end-stepping-range",line="8",file="hello.c"
+ (gdb)
+
+The `-exec-next-instruction' Command
+------------------------------------
+
+Synopsis
+........
+
+ -exec-next-instruction [--reverse]
+
+ 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.
+
+ If the `--reverse' option is specified, resumes reverse execution of
+the inferior program, stopping at the previous instruction. If the
+previously executed instruction was a return from another function, it
+will continue to execute in reverse until the call to that function
+(from the current stack frame) is reached.
+
+GDB Command
+...........
+
+The corresponding GDB command is `nexti'.
+
+Example
+.......
+
+ (gdb)
+ -exec-next-instruction
+ ^running
+
+ (gdb)
+ *stopped,reason="end-stepping-range",
+ addr="0x000100d4",line="5",file="hello.c"
+ (gdb)
+
+The `-exec-return' Command
+--------------------------
+
+Synopsis
+........
+
+ -exec-return
+
+ Makes current function return immediately. Doesn't execute the
+inferior. Displays the new current frame.
+
+GDB Command
+...........
+
+The corresponding GDB command is `return'.
+
+Example
+.......
+
+ (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",disp="keep",bkptno="1",
+ frame={func="callee4",args=[],
+ file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+ fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="8"}
+ (gdb)
+ 205-break-delete
+ 205^done
+ (gdb)
+ 111-exec-return
+ 111^done,frame={level="0",func="callee3",
+ args=[{name="strarg",
+ value="0x11940 \"A string argument.\""}],
+ file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+ fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="18"}
+ (gdb)
+
+The `-exec-run' Command
+-----------------------
+
+Synopsis
+........
+
+ -exec-run [--all | --thread-group N]
+
+ Starts execution of the inferior from the beginning. The inferior
+executes until either a breakpoint is encountered or the program exits.
+In the latter case the output will include an exit code, if the program
+has exited exceptionally.
+
+ When no option is specified, the current inferior is started. If the
+`--thread-group' option is specified, it should refer to a thread group
+of type `process', and that thread group will be started. If the
+`--all' option is specified, then all inferiors will be started.
+
+GDB Command
+...........
+
+The corresponding GDB command is `run'.
+
+Examples
+........
+
+ (gdb)
+ -break-insert main
+ ^done,bkpt={number="1",addr="0x0001072c",file="recursive2.c",line="4"}
+ (gdb)
+ -exec-run
+ ^running
+ (gdb)
+ *stopped,reason="breakpoint-hit",disp="keep",bkptno="1",
+ frame={func="main",args=[],file="recursive2.c",
+ fullname="/home/foo/bar/recursive2.c",line="4"}
+ (gdb)
+
+Program exited normally:
+
+ (gdb)
+ -exec-run
+ ^running
+ (gdb)
+ x = 55
+ *stopped,reason="exited-normally"
+ (gdb)
+
+Program exited exceptionally:
+
+ (gdb)
+ -exec-run
+ ^running
+ (gdb)
+ x = 55
+ *stopped,reason="exited",exit-code="01"
+ (gdb)
+
+ Another way the program can terminate is if it receives a signal
+such as `SIGINT'. In this case, GDB/MI displays this:
+
+ (gdb)
+ *stopped,reason="exited-signalled",signal-name="SIGINT",
+ signal-meaning="Interrupt"
+
+The `-exec-step' Command
+------------------------
+
+Synopsis
+........
+
+ -exec-step [--reverse]
+
+ 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. If the `--reverse' option is specified, resumes
+reverse execution of the inferior program, stopping at the beginning of
+the previously executed source line.
+
+GDB Command
+...........
+
+The corresponding GDB command is `step'.
+
+Example
+.......
+
+Stepping into a function:
+
+ -exec-step
+ ^running
+ (gdb)
+ *stopped,reason="end-stepping-range",
+ frame={func="foo",args=[{name="a",value="10"},
+ {name="b",value="0"}],file="recursive2.c",
+ fullname="/home/foo/bar/recursive2.c",line="11"}
+ (gdb)
+
+ Regular stepping:
+
+ -exec-step
+ ^running
+ (gdb)
+ *stopped,reason="end-stepping-range",line="14",file="recursive2.c"
+ (gdb)
+
+The `-exec-step-instruction' Command
+------------------------------------
+
+Synopsis
+........
+
+ -exec-step-instruction [--reverse]
+
+ Resumes the inferior which executes one machine instruction. If the
+`--reverse' option is specified, resumes reverse execution of the
+inferior program, stopping at the previously executed 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.
+
+GDB Command
+...........
+
+The corresponding GDB command is `stepi'.
+
+Example
+.......
+
+ (gdb)
+ -exec-step-instruction
+ ^running
+
+ (gdb)
+ *stopped,reason="end-stepping-range",
+ frame={func="foo",args=[],file="try.c",
+ fullname="/home/foo/bar/try.c",line="10"}
+ (gdb)
+ -exec-step-instruction
+ ^running
+
+ (gdb)
+ *stopped,reason="end-stepping-range",
+ frame={addr="0x000100f4",func="foo",args=[],file="try.c",
+ fullname="/home/foo/bar/try.c",line="10"}
+ (gdb)
+
+The `-exec-until' Command
+-------------------------
+
+Synopsis
+........
+
+ -exec-until [ LOCATION ]
+
+ Executes the inferior until the 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'.
+
+GDB Command
+...........
+
+The corresponding GDB command is `until'.
+
+Example
+.......
+
+ (gdb)
+ -exec-until recursive2.c:6
+ ^running
+ (gdb)
+ x = 55
+ *stopped,reason="location-reached",frame={func="main",args=[],
+ file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="6"}
+ (gdb)
+
+
+File: gdb.info, Node: GDB/MI Stack Manipulation, Next: GDB/MI Variable Objects, Prev: GDB/MI Program Execution, Up: GDB/MI
+
+27.12 GDB/MI Stack Manipulation Commands
+========================================
+
+The `-stack-info-frame' Command
+-------------------------------
+
+Synopsis
+........
+
+ -stack-info-frame
+
+ Get info on the selected frame.
+
+GDB Command
+...........
+
+The corresponding GDB command is `info frame' or `frame' (without
+arguments).
+
+Example
+.......
+
+ (gdb)
+ -stack-info-frame
+ ^done,frame={level="1",addr="0x0001076c",func="callee3",
+ file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+ fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="17"}
+ (gdb)
+
+The `-stack-info-depth' Command
+-------------------------------
+
+Synopsis
+........
+
+ -stack-info-depth [ MAX-DEPTH ]
+
+ Return the depth of the stack. If the integer argument MAX-DEPTH is
+specified, do not count beyond MAX-DEPTH frames.
+
+GDB Command
+...........
+
+There's no equivalent GDB command.
+
+Example
+.......
+
+For a stack with frame levels 0 through 11:
+
+ (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)
+
+The `-stack-list-arguments' Command
+-----------------------------------
+
+Synopsis
+........
+
+ -stack-list-arguments PRINT-VALUES
+ [ LOW-FRAME HIGH-FRAME ]
+
+ Display a list of the arguments for the frames between LOW-FRAME and
+HIGH-FRAME (inclusive). If LOW-FRAME and HIGH-FRAME are not provided,
+list the arguments for the whole call stack. If the two arguments are
+equal, show the single frame at the corresponding level. It is an
+error if LOW-FRAME is larger than the actual number of frames. On the
+other hand, HIGH-FRAME may be larger than the actual number of frames,
+in which case only existing frames will be returned.
+
+ If PRINT-VALUES is 0 or `--no-values', print only the names of the
+variables; if it is 1 or `--all-values', print also their values; and
+if it is 2 or `--simple-values', print the name, type and value for
+simple data types, and the name and type for arrays, structures and
+unions.
+
+ Use of this command to obtain arguments in a single frame is
+deprecated in favor of the `-stack-list-variables' command.
+
+GDB Command
+...........
+
+GDB does not have an equivalent command. `gdbtk' has a `gdb_get_args'
+command which partially overlaps with the functionality of
+`-stack-list-arguments'.
+
+Example
+.......
+
+ (gdb)
+ -stack-list-frames
+ ^done,
+ stack=[
+ frame={level="0",addr="0x00010734",func="callee4",
+ file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+ fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="8"},
+ frame={level="1",addr="0x0001076c",func="callee3",
+ file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+ fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="17"},
+ frame={level="2",addr="0x0001078c",func="callee2",
+ file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+ fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="22"},
+ frame={level="3",addr="0x000107b4",func="callee1",
+ file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+ fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="27"},
+ frame={level="4",addr="0x000107e0",func="main",
+ file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+ fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="32"}]
+ (gdb)
+ -stack-list-arguments 0
+ ^done,
+ stack-args=[
+ frame={level="0",args=[]},
+ frame={level="1",args=[name="strarg"]},
+ frame={level="2",args=[name="intarg",name="strarg"]},
+ frame={level="3",args=[name="intarg",name="strarg",name="fltarg"]},
+ frame={level="4",args=[]}]
+ (gdb)
+ -stack-list-arguments 1
+ ^done,
+ stack-args=[
+ frame={level="0",args=[]},
+ frame={level="1",
+ args=[{name="strarg",value="0x11940 \"A string argument.\""}]},
+ frame={level="2",args=[
+ {name="intarg",value="2"},
+ {name="strarg",value="0x11940 \"A string argument.\""}]},
+ {frame={level="3",args=[
+ {name="intarg",value="2"},
+ {name="strarg",value="0x11940 \"A string argument.\""},
+ {name="fltarg",value="3.5"}]},
+ frame={level="4",args=[]}]
+ (gdb)
+ -stack-list-arguments 0 2 2
+ ^done,stack-args=[frame={level="2",args=[name="intarg",name="strarg"]}]
+ (gdb)
+ -stack-list-arguments 1 2 2
+ ^done,stack-args=[frame={level="2",
+ args=[{name="intarg",value="2"},
+ {name="strarg",value="0x11940 \"A string argument.\""}]}]
+ (gdb)
+
+The `-stack-list-frames' Command
+--------------------------------
+
+Synopsis
+........
+
+ -stack-list-frames [ LOW-FRAME HIGH-FRAME ]
+
+ List the frames currently on the stack. For each frame it displays
+the following info:
+
+`LEVEL'
+ The frame number, 0 being the topmost frame, i.e., the innermost
+ function.
+
+`ADDR'
+ The `$pc' value for that frame.
+
+`FUNC'
+ Function name.
+
+`FILE'
+ File name of the source file where the function lives.
+
+`FULLNAME'
+ The full file name of the source file where the function lives.
+
+`LINE'
+ Line number corresponding to the `$pc'.
+
+`FROM'
+ The shared library where this function is defined. This is only
+ given if the frame's function is not known.
+
+ If invoked without arguments, this command prints a backtrace for the
+whole stack. If given two integer arguments, it shows the frames whose
+levels are between the two arguments (inclusive). If the two arguments
+are equal, it shows the single frame at the corresponding level. It is
+an error if LOW-FRAME is larger than the actual number of frames. On
+the other hand, HIGH-FRAME may be larger than the actual number of
+frames, in which case only existing frames will be returned.
+
+GDB Command
+...........
+
+The corresponding GDB commands are `backtrace' and `where'.
+
+Example
+.......
+
+Full stack backtrace:
+
+ (gdb)
+ -stack-list-frames
+ ^done,stack=
+ [frame={level="0",addr="0x0001076c",func="foo",
+ file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="11"},
+ frame={level="1",addr="0x000107a4",func="foo",
+ file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+ frame={level="2",addr="0x000107a4",func="foo",
+ file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+ frame={level="3",addr="0x000107a4",func="foo",
+ file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+ frame={level="4",addr="0x000107a4",func="foo",
+ file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+ frame={level="5",addr="0x000107a4",func="foo",
+ file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+ frame={level="6",addr="0x000107a4",func="foo",
+ file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+ frame={level="7",addr="0x000107a4",func="foo",
+ file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+ frame={level="8",addr="0x000107a4",func="foo",
+ file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+ frame={level="9",addr="0x000107a4",func="foo",
+ file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+ frame={level="10",addr="0x000107a4",func="foo",
+ file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+ frame={level="11",addr="0x00010738",func="main",
+ file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="4"}]
+ (gdb)
+
+ Show frames between LOW_FRAME and HIGH_FRAME:
+
+ (gdb)
+ -stack-list-frames 3 5
+ ^done,stack=
+ [frame={level="3",addr="0x000107a4",func="foo",
+ file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+ frame={level="4",addr="0x000107a4",func="foo",
+ file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+ frame={level="5",addr="0x000107a4",func="foo",
+ file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"}]
+ (gdb)
+
+ Show a single frame:
+
+ (gdb)
+ -stack-list-frames 3 3
+ ^done,stack=
+ [frame={level="3",addr="0x000107a4",func="foo",
+ file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"}]
+ (gdb)
+
+The `-stack-list-locals' Command
+--------------------------------
+
+Synopsis
+........
+
+ -stack-list-locals PRINT-VALUES
+
+ Display the local variable names for the selected frame. If
+PRINT-VALUES is 0 or `--no-values', print only the names of the
+variables; if it is 1 or `--all-values', print also their values; and
+if it is 2 or `--simple-values', print the name, type and value for
+simple data types, and the name and type for arrays, structures and
+unions. In this last case, a frontend can immediately display the
+value of simple data types and create variable objects for other data
+types when the user wishes to explore their values in more detail.
+
+ This command is deprecated in favor of the `-stack-list-variables'
+command.
+
+GDB Command
+...........
+
+`info locals' in GDB, `gdb_get_locals' in `gdbtk'.
+
+Example
+.......
+
+ (gdb)
+ -stack-list-locals 0
+ ^done,locals=[name="A",name="B",name="C"]
+ (gdb)
+ -stack-list-locals --all-values
+ ^done,locals=[{name="A",value="1"},{name="B",value="2"},
+ {name="C",value="{1, 2, 3}"}]
+ -stack-list-locals --simple-values
+ ^done,locals=[{name="A",type="int",value="1"},
+ {name="B",type="int",value="2"},{name="C",type="int [3]"}]
+ (gdb)
+
+The `-stack-list-variables' Command
+-----------------------------------
+
+Synopsis
+........
+
+ -stack-list-variables PRINT-VALUES
+
+ Display the names of local variables and function arguments for the
+selected frame. If PRINT-VALUES is 0 or `--no-values', print only the
+names of the variables; if it is 1 or `--all-values', print also their
+values; and if it is 2 or `--simple-values', print the name, type and
+value for simple data types, and the name and type for arrays,
+structures and unions.
+
+Example
+.......
+
+ (gdb)
+ -stack-list-variables --thread 1 --frame 0 --all-values
+ ^done,variables=[{name="x",value="11"},{name="s",value="{a = 1, b = 2}"}]
+ (gdb)
+
+The `-stack-select-frame' Command
+---------------------------------
+
+Synopsis
+........
+
+ -stack-select-frame FRAMENUM
+
+ Change the selected frame. Select a different frame FRAMENUM on the
+stack.
+
+ This command in deprecated in favor of passing the `--frame' option
+to every command.
+
+GDB Command
+...........
+
+The corresponding GDB commands are `frame', `up', `down',
+`select-frame', `up-silent', and `down-silent'.
+
+Example
+.......
+
+ (gdb)
+ -stack-select-frame 2
+ ^done
+ (gdb)
+
+
+File: gdb.info, Node: GDB/MI Variable Objects, Next: GDB/MI Data Manipulation, Prev: GDB/MI Stack Manipulation, Up: GDB/MI
+
+27.13 GDB/MI Variable Objects
+=============================
+
+Introduction to Variable Objects
+--------------------------------
+
+Variable objects are "object-oriented" MI interface for examining and
+changing values of expressions. Unlike some other MI interfaces that
+work with expressions, variable objects are specifically designed for
+simple and efficient presentation in the frontend. A variable object
+is identified by string name. When a variable object is created, the
+frontend specifies the expression for that variable object. The
+expression can be a simple variable, or it can be an arbitrary complex
+expression, and can even involve CPU registers. After creating a
+variable object, the frontend can invoke other variable object
+operations--for example to obtain or change the value of a variable
+object, or to change display format.
+
+ Variable objects have hierarchical tree structure. Any variable
+object that corresponds to a composite type, such as structure in C, has
+a number of child variable objects, for example corresponding to each
+element of a structure. A child variable object can itself have
+children, recursively. Recursion ends when we reach leaf variable
+objects, which always have built-in types. Child variable objects are
+created only by explicit request, so if a frontend is not interested in
+the children of a particular variable object, no child will be created.
+
+ For a leaf variable object it is possible to obtain its value as a
+string, or set the value from a string. String value can be also
+obtained for a non-leaf variable object, but it's generally a string
+that only indicates the type of the object, and does not list its
+contents. Assignment to a non-leaf variable object is not allowed.
+
+ A frontend does not need to read the values of all variable objects
+each time the program stops. Instead, MI provides an update command
+that lists all variable objects whose values has changed since the last
+update operation. This considerably reduces the amount of data that
+must be transferred to the frontend. As noted above, children variable
+objects are created on demand, and only leaf variable objects have a
+real value. As result, gdb will read target memory only for leaf
+variables that frontend has created.
+
+ The automatic update is not always desirable. For example, a
+frontend might want to keep a value of some expression for future
+reference, and never update it. For another example, fetching memory
+is relatively slow for embedded targets, so a frontend might want to
+disable automatic update for the variables that are either not visible
+on the screen, or "closed". This is possible using so called "frozen
+variable objects". Such variable objects are never implicitly updated.
+
+ Variable objects can be either "fixed" or "floating". For the fixed
+variable object, the expression is parsed when the variable object is
+created, including associating identifiers to specific variables. The
+meaning of expression never changes. For a floating variable object
+the values of variables whose names appear in the expressions are
+re-evaluated every time in the context of the current frame. Consider
+this example:
+
+ void do_work(...)
+ {
+ struct work_state state;
+
+ if (...)
+ do_work(...);
+ }
+
+ If a fixed variable object for the `state' variable is created in
+this function, and we enter the recursive call, the the variable object
+will report the value of `state' in the top-level `do_work' invocation.
+On the other hand, a floating variable object will report the value of
+`state' in the current frame.
+
+ If an expression specified when creating a fixed variable object
+refers to a local variable, the variable object becomes bound to the
+thread and frame in which the variable object is created. When such
+variable object is updated, GDB makes sure that the thread/frame
+combination the variable object is bound to still exists, and
+re-evaluates the variable object in context of that thread/frame.
+
+ The following is the complete set of GDB/MI operations defined to
+access this functionality:
+
+*Operation* *Description*
+`-enable-pretty-printing' enable Python-based pretty-printing
+`-var-create' create a variable object
+`-var-delete' delete the variable object and/or its
+ children
+`-var-set-format' set the display format of this variable
+`-var-show-format' show the display format of this variable
+`-var-info-num-children' tells how many children this object has
+`-var-list-children' return a list of the object's children
+`-var-info-type' show the type of this variable object
+`-var-info-expression' print parent-relative expression that this
+ variable object represents
+`-var-info-path-expression' print full expression that this variable
+ object represents
+`-var-show-attributes' is this variable editable? does it exist
+ here?
+`-var-evaluate-expression' get the value of this variable
+`-var-assign' set the value of this variable
+`-var-update' update the variable and its children
+`-var-set-frozen' set frozeness attribute
+`-var-set-update-range' set range of children to display on update
+
+ In the next subsection we describe each operation in detail and
+suggest how it can be used.
+
+Description And Use of Operations on Variable Objects
+-----------------------------------------------------
+
+The `-enable-pretty-printing' Command
+-------------------------------------
+
+ -enable-pretty-printing
+
+ GDB allows Python-based visualizers to affect the output of the MI
+variable object commands. However, because there was no way to
+implement this in a fully backward-compatible way, a front end must
+request that this functionality be enabled.
+
+ Once enabled, this feature cannot be disabled.
+
+ Note that if Python support has not been compiled into GDB, this
+command will still succeed (and do nothing).
+
+ This feature is currently (as of GDB 7.0) experimental, and may work
+differently in future versions of GDB.
+
+The `-var-create' Command
+-------------------------
+
+Synopsis
+........
+
+ -var-create {NAME | "-"}
+ {FRAME-ADDR | "*" | "@"} EXPRESSION
+
+ 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 NAME parameter is the string by which the object can be
+referenced. It must be unique. If `-' is specified, the varobj system
+will generate a string "varNNNNNN" automatically. It will be unique
+provided that one does not specify NAME of that format. The command
+fails if a duplicate name is found.
+
+ The frame under which the expression should be evaluated can be
+specified by FRAME-ADDR. A `*' indicates that the current frame should
+be used. A `@' indicates that a floating variable object must be
+created.
+
+ EXPRESSION is any expression valid on the current language set (must
+not begin with a `*'), or one of the following:
+
+ * `*ADDR', where ADDR is the address of a memory cell
+
+ * `*ADDR-ADDR' -- a memory address range (TBD)
+
+ * `$REGNAME' -- a CPU register name
+
+ A varobj's contents may be provided by a Python-based
+pretty-printer. In this case the varobj is known as a "dynamic
+varobj". Dynamic varobjs have slightly different semantics in some
+cases. If the `-enable-pretty-printing' command is not sent, then GDB
+will never create a dynamic varobj. This ensures backward
+compatibility for existing clients.
+
+Result
+......
+
+This operation returns attributes of the newly-created varobj. These
+are:
+
+`name'
+ The name of the varobj.
+
+`numchild'
+ The number of children of the varobj. This number is not
+ necessarily reliable for a dynamic varobj. Instead, you must
+ examine the `has_more' attribute.
+
+`value'
+ The varobj's scalar value. For a varobj whose type is some sort of
+ aggregate (e.g., a `struct'), or for a dynamic varobj, this value
+ will not be interesting.
+
+`type'
+ The varobj's type. This is a string representation of the type, as
+ would be printed by the GDB CLI.
+
+`thread-id'
+ If a variable object is bound to a specific thread, then this is
+ the thread's identifier.
+
+`has_more'
+ For a dynamic varobj, this indicates whether there appear to be any
+ children available. For a non-dynamic varobj, this will be 0.
+
+`dynamic'
+ This attribute will be present and have the value `1' if the
+ varobj is a dynamic varobj. If the varobj is not a dynamic varobj,
+ then this attribute will not be present.
+
+`displayhint'
+ A dynamic varobj can supply a display hint to the front end. The
+ value comes directly from the Python pretty-printer object's
+ `display_hint' method. *Note Pretty Printing API::.
+
+ Typical output will look like this:
+
+ name="NAME",numchild="N",type="TYPE",thread-id="M",
+ has_more="HAS_MORE"
+
+The `-var-delete' Command
+-------------------------
+
+Synopsis
+........
+
+ -var-delete [ -c ] NAME
+
+ Deletes a previously created variable object and all of its children.
+With the `-c' option, just deletes the children.
+
+ Returns an error if the object NAME is not found.
+
+The `-var-set-format' Command
+-----------------------------
+
+Synopsis
+........
+
+ -var-set-format NAME FORMAT-SPEC
+
+ Sets the output format for the value of the object NAME to be
+FORMAT-SPEC.
+
+ The syntax for the FORMAT-SPEC is as follows:
+
+ FORMAT-SPEC ==>
+ {binary | decimal | hexadecimal | octal | natural}
+
+ The natural format is the default format choosen automatically based
+on the variable type (like decimal for an `int', hex for pointers,
+etc.).
+
+ For a variable with children, the format is set only on the variable
+itself, and the children are not affected.
+
+The `-var-show-format' Command
+------------------------------
+
+Synopsis
+........
+
+ -var-show-format NAME
+
+ Returns the format used to display the value of the object NAME.
+
+ FORMAT ==>
+ FORMAT-SPEC
+
+The `-var-info-num-children' Command
+------------------------------------
+
+Synopsis
+........
+
+ -var-info-num-children NAME
+
+ Returns the number of children of a variable object NAME:
+
+ numchild=N
+
+ Note that this number is not completely reliable for a dynamic
+varobj. It will return the current number of children, but more
+children may be available.
+
+The `-var-list-children' Command
+--------------------------------
+
+Synopsis
+........
+
+ -var-list-children [PRINT-VALUES] NAME [FROM TO]
+Return a list of the children of the specified variable object and
+create variable objects for them, if they do not already exist. With a
+single argument or if PRINT-VALUES has a value of 0 or `--no-values',
+print only the names of the variables; if PRINT-VALUES is 1 or
+`--all-values', also print their values; and if it is 2 or
+`--simple-values' print the name and value for simple data types and
+just the name for arrays, structures and unions.
+
+ FROM and TO, if specified, indicate the range of children to report.
+If FROM or TO is less than zero, the range is reset and all children
+will be reported. Otherwise, children starting at FROM (zero-based)
+and up to and excluding TO will be reported.
+
+ If a child range is requested, it will only affect the current call
+to `-var-list-children', but not future calls to `-var-update'. For
+this, you must instead use `-var-set-update-range'. The intent of this
+approach is to enable a front end to implement any update approach it
+likes; for example, scrolling a view may cause the front end to request
+more children with `-var-list-children', and then the front end could
+call `-var-set-update-range' with a different range to ensure that
+future updates are restricted to just the visible items.
+
+ For each child the following results are returned:
+
+NAME
+ Name of the variable object created for this child.
+
+EXP
+ The expression to be shown to the user by the front end to
+ designate this child. For example this may be the name of a
+ structure member.
+
+ For a dynamic varobj, this value cannot be used to form an
+ expression. There is no way to do this at all with a dynamic
+ varobj.
+
+ For C/C++ structures there are several pseudo children returned to
+ designate access qualifiers. For these pseudo children EXP is
+ `public', `private', or `protected'. In this case the type and
+ value are not present.
+
+ A dynamic varobj will not report the access qualifying
+ pseudo-children, regardless of the language. This information is
+ not available at all with a dynamic varobj.
+
+NUMCHILD
+ Number of children this child has. For a dynamic varobj, this
+ will be 0.
+
+TYPE
+ The type of the child.
+
+VALUE
+ If values were requested, this is the value.
+
+THREAD-ID
+ If this variable object is associated with a thread, this is the
+ thread id. Otherwise this result is not present.
+
+FROZEN
+ If the variable object is frozen, this variable will be present
+ with a value of 1.
+
+ The result may have its own attributes:
+
+`displayhint'
+ A dynamic varobj can supply a display hint to the front end. The
+ value comes directly from the Python pretty-printer object's
+ `display_hint' method. *Note Pretty Printing API::.
+
+`has_more'
+ This is an integer attribute which is nonzero if there are children
+ remaining after the end of the selected range.
+
+Example
+.......
+
+ (gdb)
+ -var-list-children n
+ ^done,numchild=N,children=[child={name=NAME,exp=EXP,
+ numchild=N,type=TYPE},(repeats N times)]
+ (gdb)
+ -var-list-children --all-values n
+ ^done,numchild=N,children=[child={name=NAME,exp=EXP,
+ numchild=N,value=VALUE,type=TYPE},(repeats N times)]
+
+The `-var-info-type' Command
+----------------------------
+
+Synopsis
+........
+
+ -var-info-type NAME
+
+ Returns the type of the specified variable NAME. The type is
+returned as a string in the same format as it is output by the GDB CLI:
+
+ type=TYPENAME
+
+The `-var-info-expression' Command
+----------------------------------
+
+Synopsis
+........
+
+ -var-info-expression NAME
+
+ Returns a string that is suitable for presenting this variable
+object in user interface. The string is generally not valid expression
+in the current language, and cannot be evaluated.
+
+ For example, if `a' is an array, and variable object `A' was created
+for `a', then we'll get this output:
+
+ (gdb) -var-info-expression A.1
+ ^done,lang="C",exp="1"
+
+Here, the values of `lang' can be `{"C" | "C++" | "Java"}'.
+
+ Note that the output of the `-var-list-children' command also
+includes those expressions, so the `-var-info-expression' command is of
+limited use.
+
+The `-var-info-path-expression' Command
+---------------------------------------
+
+Synopsis
+........
+
+ -var-info-path-expression NAME
+
+ Returns an expression that can be evaluated in the current context
+and will yield the same value that a variable object has. Compare this
+with the `-var-info-expression' command, which result can be used only
+for UI presentation. Typical use of the `-var-info-path-expression'
+command is creating a watchpoint from a variable object.
+
+ This command is currently not valid for children of a dynamic varobj,
+and will give an error when invoked on one.
+
+ For example, suppose `C' is a C++ class, derived from class `Base',
+and that the `Base' class has a member called `m_size'. Assume a
+variable `c' is has the type of `C' and a variable object `C' was
+created for variable `c'. Then, we'll get this output:
+ (gdb) -var-info-path-expression C.Base.public.m_size
+ ^done,path_expr=((Base)c).m_size)
+
+The `-var-show-attributes' Command
+----------------------------------
+
+Synopsis
+........
+
+ -var-show-attributes NAME
+
+ List attributes of the specified variable object NAME:
+
+ status=ATTR [ ( ,ATTR )* ]
+
+where ATTR is `{ { editable | noneditable } | TBD }'.
+
+The `-var-evaluate-expression' Command
+--------------------------------------
+
+Synopsis
+........
+
+ -var-evaluate-expression [-f FORMAT-SPEC] NAME
+
+ Evaluates the expression that is represented by the specified
+variable object and returns its value as a string. The format of the
+string can be specified with the `-f' option. The possible values of
+this option are the same as for `-var-set-format' (*note
+-var-set-format::). If the `-f' option is not specified, the current
+display format will be used. The current display format can be changed
+using the `-var-set-format' command.
+
+ value=VALUE
+
+ Note that one must invoke `-var-list-children' for a variable before
+the value of a child variable can be evaluated.
+
+The `-var-assign' Command
+-------------------------
+
+Synopsis
+........
+
+ -var-assign NAME EXPRESSION
+
+ Assigns the value of EXPRESSION to the variable object specified by
+NAME. The object must be `editable'. If the variable's value is
+altered by the assign, the variable will show up in any subsequent
+`-var-update' list.
+
+Example
+.......
+
+ (gdb)
+ -var-assign var1 3
+ ^done,value="3"
+ (gdb)
+ -var-update *
+ ^done,changelist=[{name="var1",in_scope="true",type_changed="false"}]
+ (gdb)
+
+The `-var-update' Command
+-------------------------
+
+Synopsis
+........
+
+ -var-update [PRINT-VALUES] {NAME | "*"}
+
+ Reevaluate the expressions corresponding to the variable object NAME
+and all its direct and indirect children, and return the list of
+variable objects whose values have changed; NAME must be a root
+variable object. Here, "changed" means that the result of
+`-var-evaluate-expression' before and after the `-var-update' is
+different. If `*' is used as the variable object names, all existing
+variable objects are updated, except for frozen ones (*note
+-var-set-frozen::). The option PRINT-VALUES determines whether both
+names and values, or just names are printed. The possible values of
+this option are the same as for `-var-list-children' (*note
+-var-list-children::). It is recommended to use the `--all-values'
+option, to reduce the number of MI commands needed on each program stop.
+
+ With the `*' parameter, if a variable object is bound to a currently
+running thread, it will not be updated, without any diagnostic.
+
+ If `-var-set-update-range' was previously used on a varobj, then
+only the selected range of children will be reported.
+
+ `-var-update' reports all the changed varobjs in a tuple named
+`changelist'.
+
+ Each item in the change list is itself a tuple holding:
+
+`name'
+ The name of the varobj.
+
+`value'
+ If values were requested for this update, then this field will be
+ present and will hold the value of the varobj.
+
+`in_scope'
+ This field is a string which may take one of three values:
+
+ `"true"'
+ The variable object's current value is valid.
+
+ `"false"'
+ The variable object does not currently hold a valid value but
+ it may hold one in the future if its associated expression
+ comes back into scope.
+
+ `"invalid"'
+ The variable object no longer holds a valid value. This can
+ occur when the executable file being debugged has changed,
+ either through recompilation or by using the GDB `file'
+ command. The front end should normally choose to delete
+ these variable objects.
+
+ In the future new values may be added to this list so the front
+ should be prepared for this possibility. *Note GDB/MI Development
+ and Front Ends: GDB/MI Development and Front Ends.
+
+`type_changed'
+ This is only present if the varobj is still valid. If the type
+ changed, then this will be the string `true'; otherwise it will be
+ `false'.
+
+`new_type'
+ If the varobj's type changed, then this field will be present and
+ will hold the new type.
+
+`new_num_children'
+ For a dynamic varobj, if the number of children changed, or if the
+ type changed, this will be the new number of children.
+
+ The `numchild' field in other varobj responses is generally not
+ valid for a dynamic varobj - it will show the number of children
+ that GDB knows about, but because dynamic varobjs lazily
+ instantiate their children, this will not reflect the number of
+ children which may be available.
+
+ The `new_num_children' attribute only reports changes to the
+ number of children known by GDB. This is the only way to detect
+ whether an update has removed children (which necessarily can only
+ happen at the end of the update range).
+
+`displayhint'
+ The display hint, if any.
+
+`has_more'
+ This is an integer value, which will be 1 if there are more
+ children available outside the varobj's update range.
+
+`dynamic'
+ This attribute will be present and have the value `1' if the
+ varobj is a dynamic varobj. If the varobj is not a dynamic varobj,
+ then this attribute will not be present.
+
+`new_children'
+ If new children were added to a dynamic varobj within the selected
+ update range (as set by `-var-set-update-range'), then they will
+ be listed in this attribute.
+
+Example
+.......
+
+ (gdb)
+ -var-assign var1 3
+ ^done,value="3"
+ (gdb)
+ -var-update --all-values var1
+ ^done,changelist=[{name="var1",value="3",in_scope="true",
+ type_changed="false"}]
+ (gdb)
+
+The `-var-set-frozen' Command
+-----------------------------
+
+Synopsis
+........
+
+ -var-set-frozen NAME FLAG
+
+ Set the frozenness flag on the variable object NAME. The FLAG
+parameter should be either `1' to make the variable frozen or `0' to
+make it unfrozen. If a variable object is frozen, then neither itself,
+nor any of its children, are implicitly updated by `-var-update' of a
+parent variable or by `-var-update *'. Only `-var-update' of the
+variable itself will update its value and values of its children.
+After a variable object is unfrozen, it is implicitly updated by all
+subsequent `-var-update' operations. Unfreezing a variable does not
+update it, only subsequent `-var-update' does.
+
+Example
+.......
+
+ (gdb)
+ -var-set-frozen V 1
+ ^done
+ (gdb)
+
+The `-var-set-update-range' command
+-----------------------------------
+
+Synopsis
+........
+
+ -var-set-update-range NAME FROM TO
+
+ Set the range of children to be returned by future invocations of
+`-var-update'.
+
+ FROM and TO indicate the range of children to report. If FROM or TO
+is less than zero, the range is reset and all children will be
+reported. Otherwise, children starting at FROM (zero-based) and up to
+and excluding TO will be reported.
+
+Example
+.......
+
+ (gdb)
+ -var-set-update-range V 1 2
+ ^done
+
+The `-var-set-visualizer' command
+---------------------------------
+
+Synopsis
+........
+
+ -var-set-visualizer NAME VISUALIZER
+
+ Set a visualizer for the variable object NAME.
+
+ VISUALIZER is the visualizer to use. The special value `None' means
+to disable any visualizer in use.
+
+ If not `None', VISUALIZER must be a Python expression. This
+expression must evaluate to a callable object which accepts a single
+argument. GDB will call this object with the value of the varobj NAME
+as an argument (this is done so that the same Python pretty-printing
+code can be used for both the CLI and MI). When called, this object
+must return an object which conforms to the pretty-printing interface
+(*note Pretty Printing API::).
+
+ The pre-defined function `gdb.default_visualizer' may be used to
+select a visualizer by following the built-in process (*note Selecting
+Pretty-Printers::). This is done automatically when a varobj is
+created, and so ordinarily is not needed.
+
+ This feature is only available if Python support is enabled. The MI
+command `-list-features' (*note GDB/MI Miscellaneous Commands::) can be
+used to check this.
+
+Example
+.......
+
+Resetting the visualizer:
+
+ (gdb)
+ -var-set-visualizer V None
+ ^done
+
+ Reselecting the default (type-based) visualizer:
+
+ (gdb)
+ -var-set-visualizer V gdb.default_visualizer
+ ^done
+
+ Suppose `SomeClass' is a visualizer class. A lambda expression can
+be used to instantiate this class for a varobj:
+
+ (gdb)
+ -var-set-visualizer V "lambda val: SomeClass()"
+ ^done
+
+
+File: gdb.info, Node: GDB/MI Data Manipulation, Next: GDB/MI Tracepoint Commands, Prev: GDB/MI Variable Objects, Up: GDB/MI
+
+27.14 GDB/MI Data Manipulation
+==============================
+
+This section describes the GDB/MI commands that manipulate data:
+examine memory and registers, evaluate expressions, etc.
+
+The `-data-disassemble' Command
+-------------------------------
+
+Synopsis
+........
+
+ -data-disassemble
+ [ -s START-ADDR -e END-ADDR ]
+ | [ -f FILENAME -l LINENUM [ -n LINES ] ]
+ -- MODE
+
+Where:
+
+`START-ADDR'
+ is the beginning address (or `$pc')
+
+`END-ADDR'
+ is the end address
+
+`FILENAME'
+ is the name of the file to disassemble
+
+`LINENUM'
+ is the line number to disassemble around
+
+`LINES'
+ is the number of disassembly lines to be produced. If it is -1,
+ the whole function will be disassembled, in case no END-ADDR is
+ specified. If END-ADDR is specified as a non-zero value, and
+ LINES is lower than the number of disassembly lines between
+ START-ADDR and END-ADDR, only LINES lines are displayed; if LINES
+ is higher than the number of lines between START-ADDR and
+ END-ADDR, only the lines up to END-ADDR are displayed.
+
+`MODE'
+ is either 0 (meaning only disassembly), 1 (meaning mixed source and
+ disassembly), 2 (meaning disassembly with raw opcodes), or 3
+ (meaning mixed source and disassembly with raw opcodes).
+
+Result
+......
+
+The output for each instruction is composed of four fields:
+
+ * Address
+
+ * Func-name
+
+ * Offset
+
+ * Instruction
+
+ Note that whatever included in the instruction field, is not
+manipulated directly by GDB/MI, i.e., it is not possible to adjust its
+format.
+
+GDB Command
+...........
+
+There's no direct mapping from this command to the CLI.
+
+Example
+.......
+
+Disassemble from the current value of `$pc' to `$pc + 20':
+
+ (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)
+
+ Disassemble the whole `main' function. Line 32 is part of `main'.
+
+ -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)
+
+ Disassemble 3 instructions from the start of `main':
+
+ (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)
+
+ Disassemble 3 instructions from the start of `main' in mixed mode:
+
+ (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)
+
+The `-data-evaluate-expression' Command
+---------------------------------------
+
+Synopsis
+........
+
+ -data-evaluate-expression EXPR
+
+ Evaluate 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.
+
+GDB Command
+...........
+
+The corresponding GDB commands are `print', `output', and `call'. In
+`gdbtk' only, there's a corresponding `gdb_eval' command.
+
+Example
+.......
+
+In the following example, the numbers that precede the commands are the
+"tokens" described in *note GDB/MI Command Syntax: GDB/MI Command
+Syntax. Notice how GDB/MI returns the same tokens in its output.
+
+ 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)
+
+The `-data-list-changed-registers' Command
+------------------------------------------
+
+Synopsis
+........
+
+ -data-list-changed-registers
+
+ Display a list of the registers that have changed.
+
+GDB Command
+...........
+
+GDB doesn't have a direct analog for this command; `gdbtk' has the
+corresponding command `gdb_changed_register_list'.
+
+Example
+.......
+
+On a PPC MBX board:
+
+ (gdb)
+ -exec-continue
+ ^running
+
+ (gdb)
+ *stopped,reason="breakpoint-hit",disp="keep",bkptno="1",frame={
+ func="main",args=[],file="try.c",fullname="/home/foo/bar/try.c",
+ line="5"}
+ (gdb)
+ -data-list-changed-registers
+ ^done,changed-registers=["0","1","2","4","5","6","7","8","9",
+ "10","11","13","14","15","16","17","18","19","20","21","22","23",
+ "24","25","26","27","28","30","31","64","65","66","67","69"]
+ (gdb)
+
+The `-data-list-register-names' Command
+---------------------------------------
+
+Synopsis
+........
+
+ -data-list-register-names [ ( REGNO )+ ]
+
+ Show a list of register names for the current target. If no
+arguments are given, it shows a list of the names of all the registers.
+If integer numbers are given as arguments, it will print a list of the
+names of the registers corresponding to the arguments. To ensure
+consistency between a register name and its number, the output list may
+include empty register names.
+
+GDB Command
+...........
+
+GDB does not have a command which corresponds to
+`-data-list-register-names'. In `gdbtk' there is a corresponding
+command `gdb_regnames'.
+
+Example
+.......
+
+For the PPC MBX board:
+ (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)
+
+The `-data-list-register-values' Command
+----------------------------------------
+
+Synopsis
+........
+
+ -data-list-register-values FMT [ ( REGNO )*]
+
+ Display the registers' contents. 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 FMT are:
+
+`x'
+ Hexadecimal
+
+`o'
+ Octal
+
+`t'
+ Binary
+
+`d'
+ Decimal
+
+`r'
+ Raw
+
+`N'
+ Natural
+
+GDB Command
+...........
+
+The corresponding GDB commands are `info reg', `info all-reg', and (in
+`gdbtk') `gdb_fetch_registers'.
+
+Example
+.......
+
+For a PPC MBX board (note: line breaks are for readability only, they
+don't appear in the actual output):
+
+ (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)
+
+The `-data-read-memory' Command
+-------------------------------
+
+This command is deprecated, use `-data-read-memory-bytes' instead.
+
+Synopsis
+........
+
+ -data-read-memory [ -o BYTE-OFFSET ]
+ ADDRESS WORD-FORMAT WORD-SIZE
+ NR-ROWS NR-COLS [ ASCHAR ]
+
+where:
+
+`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.
+
+`WORD-FORMAT'
+ The format to be used to print the memory words. The notation is
+ the same as for GDB's `print' command (*note Output Formats:
+ Output Formats.).
+
+`WORD-SIZE'
+ The size of each memory word in bytes.
+
+`NR-ROWS'
+ The number of rows in the output table.
+
+`NR-COLS'
+ The number of columns in the output table.
+
+`ASCHAR'
+ If present, indicates that each row should include an ASCII dump.
+ The value of ASCHAR is used as a padding character when a byte is
+ not a member of the printable ASCII character set (printable ASCII
+ characters are those whose code is between 32 and 126,
+ inclusively).
+
+`BYTE-OFFSET'
+ An offset to add to the ADDRESS before fetching memory.
+
+ This command displays memory contents as a table of NR-ROWS by
+NR-COLS words, each word being WORD-SIZE bytes. In total, `NR-ROWS *
+NR-COLS * WORD-SIZE' bytes are read (returned as `total-bytes').
+Should less than the requested number of bytes be returned by the
+target, the missing words are identified using `N/A'. The number of
+bytes read from the target is returned in `nr-bytes' and the starting
+address used to read memory in `addr'.
+
+ The address of the next/previous row or page is available in
+`next-row' and `prev-row', `next-page' and `prev-page'.
+
+GDB Command
+...........
+
+The corresponding GDB command is `x'. `gdbtk' has `gdb_get_mem' memory
+read command.
+
+Example
+.......
+
+Read six bytes of memory starting at `bytes+6' but then offset by `-6'
+bytes. Format as three rows of two columns. One byte per word.
+Display each word in hex.
+
+ (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)
+
+ Read two bytes of memory starting at address `shorts + 64' and
+display as a single word formatted in decimal.
+
+ (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)
+
+ Read thirty two bytes of memory starting at `bytes+16' and format as
+eight rows of four columns. Include a string encoding with `x' used as
+the non-printable character.
+
+ (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)
+
+The `-data-read-memory-bytes' Command
+-------------------------------------
+
+Synopsis
+........
+
+ -data-read-memory-bytes [ -o BYTE-OFFSET ]
+ ADDRESS COUNT
+
+where:
+
+`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.
+
+`COUNT'
+ The number of bytes to read. This should be an integer literal.
+
+`BYTE-OFFSET'
+ The offsets in bytes relative to ADDRESS at which to start
+ reading. This should be an integer literal. This option is
+ provided so that a frontend is not required to first evaluate
+ address and then perform address arithmetics itself.
+
+
+ This command attempts to read all accessible memory regions in the
+specified range. First, all regions marked as unreadable in the memory
+map (if one is defined) will be skipped. *Note Memory Region
+Attributes::. Second, GDB will attempt to read the remaining regions.
+For each one, if reading full region results in an errors, GDB will try
+to read a subset of the region.
+
+ In general, every single byte in the region may be readable or not,
+and the only way to read every readable byte is to try a read at every
+address, which is not practical. Therefore, GDB will attempt to read
+all accessible bytes at either beginning or the end of the region,
+using a binary division scheme. This heuristic works well for reading
+accross a memory map boundary. Note that if a region has a readable
+range that is neither at the beginning or the end, GDB will not read it.
+
+ The result record (*note GDB/MI Result Records::) that is output of
+the command includes a field named `memory' whose content is a list of
+tuples. Each tuple represent a successfully read memory block and has
+the following fields:
+
+`begin'
+ The start address of the memory block, as hexadecimal literal.
+
+`end'
+ The end address of the memory block, as hexadecimal literal.
+
+`offset'
+ The offset of the memory block, as hexadecimal literal, relative to
+ the start address passed to `-data-read-memory-bytes'.
+
+`contents'
+ The contents of the memory block, in hex.
+
+
+GDB Command
+...........
+
+The corresponding GDB command is `x'.
+
+Example
+.......
+
+ (gdb)
+ -data-read-memory-bytes &a 10
+ ^done,memory=[{begin="0xbffff154",offset="0x00000000",
+ end="0xbffff15e",
+ contents="01000000020000000300"}]
+ (gdb)
+
+The `-data-write-memory-bytes' Command
+--------------------------------------
+
+Synopsis
+........
+
+ -data-write-memory-bytes ADDRESS CONTENTS
+
+where:
+
+`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.
+
+`CONTENTS'
+ The hex-encoded bytes to write.
+
+
+GDB Command
+...........
+
+There's no corresponding GDB command.
+
+Example
+.......
+
+ (gdb)
+ -data-write-memory-bytes &a "aabbccdd"
+ ^done
+ (gdb)
+
+
+File: gdb.info, Node: GDB/MI Tracepoint Commands, Next: GDB/MI Symbol Query, Prev: GDB/MI Data Manipulation, Up: GDB/MI
+
+27.15 GDB/MI Tracepoint Commands
+================================
+
+The commands defined in this section implement MI support for
+tracepoints. For detailed introduction, see *note Tracepoints::.
+
+The `-trace-find' Command
+-------------------------
+
+Synopsis
+........
+
+ -trace-find MODE [PARAMETERS...]
+
+ Find a trace frame using criteria defined by MODE and PARAMETERS.
+The following table lists permissible modes and their parameters. For
+details of operation, see *note tfind::.
+
+`none'
+ No parameters are required. Stops examining trace frames.
+
+`frame-number'
+ An integer is required as parameter. Selects tracepoint frame with
+ that index.
+
+`tracepoint-number'
+ An integer is required as parameter. Finds next trace frame that
+ corresponds to tracepoint with the specified number.
+
+`pc'
+ An address is required as parameter. Finds next trace frame that
+ corresponds to any tracepoint at the specified address.
+
+`pc-inside-range'
+ Two addresses are required as parameters. Finds next trace frame
+ that corresponds to a tracepoint at an address inside the
+ specified range. Both bounds are considered to be inside the
+ range.
+
+`pc-outside-range'
+ Two addresses are required as parameters. Finds next trace frame
+ that corresponds to a tracepoint at an address outside the
+ specified range. Both bounds are considered to be inside the
+ range.
+
+`line'
+ Line specification is required as parameter. *Note Specify
+ Location::. Finds next trace frame that corresponds to a
+ tracepoint at the specified location.
+
+
+ If `none' was passed as MODE, the response does not have fields.
+Otherwise, the response may have the following fields:
+
+`found'
+ This field has either `0' or `1' as the value, depending on
+ whether a matching tracepoint was found.
+
+`traceframe'
+ The index of the found traceframe. This field is present iff the
+ `found' field has value of `1'.
+
+`tracepoint'
+ The index of the found tracepoint. This field is present iff the
+ `found' field has value of `1'.
+
+`frame'
+ The information about the frame corresponding to the found trace
+ frame. This field is present only if a trace frame was found.
+ *Note GDB/MI Frame Information::, for description of this field.
+
+
+GDB Command
+...........
+
+The corresponding GDB command is `tfind'.
+
+-trace-define-variable
+----------------------
+
+Synopsis
+........
+
+ -trace-define-variable NAME [ VALUE ]
+
+ Create trace variable NAME if it does not exist. If VALUE is
+specified, sets the initial value of the specified trace variable to
+that value. Note that the NAME should start with the `$' character.
+
+GDB Command
+...........
+
+The corresponding GDB command is `tvariable'.
+
+-trace-list-variables
+---------------------
+
+Synopsis
+........
+
+ -trace-list-variables
+
+ Return a table of all defined trace variables. Each element of the
+table has the following fields:
+
+`name'
+ The name of the trace variable. This field is always present.
+
+`initial'
+ The initial value. This is a 64-bit signed integer. This field
+ is always present.
+
+`current'
+ The value the trace variable has at the moment. This is a 64-bit
+ signed integer. This field is absent iff current value is not
+ defined, for example if the trace was never run, or is presently
+ running.
+
+
+GDB Command
+...........
+
+The corresponding GDB command is `tvariables'.
+
+Example
+.......
+
+ (gdb)
+ -trace-list-variables
+ ^done,trace-variables={nr_rows="1",nr_cols="3",
+ hdr=[{width="15",alignment="-1",col_name="name",colhdr="Name"},
+ {width="11",alignment="-1",col_name="initial",colhdr="Initial"},
+ {width="11",alignment="-1",col_name="current",colhdr="Current"}],
+ body=[variable={name="$trace_timestamp",initial="0"}
+ variable={name="$foo",initial="10",current="15"}]}
+ (gdb)
+
+-trace-save
+-----------
+
+Synopsis
+........
+
+ -trace-save [-r ] FILENAME
+
+ Saves the collected trace data to FILENAME. Without the `-r'
+option, the data is downloaded from the target and saved in a local
+file. With the `-r' option the target is asked to perform the save.
+
+GDB Command
+...........
+
+The corresponding GDB command is `tsave'.
+
+-trace-start
+------------
+
+Synopsis
+........
+
+ -trace-start
+
+ Starts a tracing experiments. The result of this command does not
+have any fields.
+
+GDB Command
+...........
+
+The corresponding GDB command is `tstart'.
+
+-trace-status
+-------------
+
+Synopsis
+........
+
+ -trace-status
+
+ Obtains the status of a tracing experiment. The result may include
+the following fields:
+
+`supported'
+ May have a value of either `0', when no tracing operations are
+ supported, `1', when all tracing operations are supported, or
+ `file' when examining trace file. In the latter case, examining
+ of trace frame is possible but new tracing experiement cannot be
+ started. This field is always present.
+
+`running'
+ May have a value of either `0' or `1' depending on whether tracing
+ experiement is in progress on target. This field is present if
+ `supported' field is not `0'.
+
+`stop-reason'
+ Report the reason why the tracing was stopped last time. This
+ field may be absent iff tracing was never stopped on target yet.
+ The value of `request' means the tracing was stopped as result of
+ the `-trace-stop' command. The value of `overflow' means the
+ tracing buffer is full. The value of `disconnection' means
+ tracing was automatically stopped when GDB has disconnected. The
+ value of `passcount' means tracing was stopped when a tracepoint
+ was passed a maximal number of times for that tracepoint. This
+ field is present if `supported' field is not `0'.
+
+`stopping-tracepoint'
+ The number of tracepoint whose passcount as exceeded. This field
+ is present iff the `stop-reason' field has the value of
+ `passcount'.
+
+`frames'
+`frames-created'
+ The `frames' field is a count of the total number of trace frames
+ in the trace buffer, while `frames-created' is the total created
+ during the run, including ones that were discarded, such as when a
+ circular trace buffer filled up. Both fields are optional.
+
+`buffer-size'
+`buffer-free'
+ These fields tell the current size of the tracing buffer and the
+ remaining space. These fields are optional.
+
+`circular'
+ The value of the circular trace buffer flag. `1' means that the
+ trace buffer is circular and old trace frames will be discarded if
+ necessary to make room, `0' means that the trace buffer is linear
+ and may fill up.
+
+`disconnected'
+ The value of the disconnected tracing flag. `1' means that
+ tracing will continue after GDB disconnects, `0' means that the
+ trace run will stop.
+
+
+GDB Command
+...........
+
+The corresponding GDB command is `tstatus'.
+
+-trace-stop
+-----------
+
+Synopsis
+........
+
+ -trace-stop
+
+ Stops a tracing experiment. The result of this command has the same
+fields as `-trace-status', except that the `supported' and `running'
+fields are not output.
+
+GDB Command
+...........
+
+The corresponding GDB command is `tstop'.
+
+
+File: gdb.info, Node: GDB/MI Symbol Query, Next: GDB/MI File Commands, Prev: GDB/MI Tracepoint Commands, Up: GDB/MI
+
+27.16 GDB/MI Symbol Query Commands
+==================================
+
+The `-symbol-list-lines' Command
+--------------------------------
+
+Synopsis
+........
+
+ -symbol-list-lines FILENAME
+
+ Print the list of lines that contain code and their associated
+program addresses for the given source filename. The entries are
+sorted in ascending PC order.
+
+GDB Command
+...........
+
+There is no corresponding GDB command.
+
+Example
+.......
+
+ (gdb)
+ -symbol-list-lines basics.c
+ ^done,lines=[{pc="0x08048554",line="7"},{pc="0x0804855a",line="8"}]
+ (gdb)
+
+
+File: gdb.info, Node: GDB/MI File Commands, Next: GDB/MI Target Manipulation, Prev: GDB/MI Symbol Query, Up: GDB/MI
+
+27.17 GDB/MI File Commands
+==========================
+
+This section describes the GDB/MI commands to specify executable file
+names and to read in and obtain symbol table information.
+
+The `-file-exec-and-symbols' Command
+------------------------------------
+
+Synopsis
+........
+
+ -file-exec-and-symbols FILE
+
+ 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.
+
+GDB Command
+...........
+
+The corresponding GDB command is `file'.
+
+Example
+.......
+
+ (gdb)
+ -file-exec-and-symbols /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
+ ^done
+ (gdb)
+
+The `-file-exec-file' Command
+-----------------------------
+
+Synopsis
+........
+
+ -file-exec-file FILE
+
+ Specify the executable file to be debugged. Unlike
+`-file-exec-and-symbols', the symbol table is _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.
+
+GDB Command
+...........
+
+The corresponding GDB command is `exec-file'.
+
+Example
+.......
+
+ (gdb)
+ -file-exec-file /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
+ ^done
+ (gdb)
+
+The `-file-list-exec-source-file' Command
+-----------------------------------------
+
+Synopsis
+........
+
+ -file-list-exec-source-file
+
+ List the line number, the current source file, and the absolute path
+to the current source file for the current executable. The macro
+information field has a value of `1' or `0' depending on whether or not
+the file includes preprocessor macro information.
+
+GDB Command
+...........
+
+The GDB equivalent is `info source'
+
+Example
+.......
+
+ (gdb)
+ 123-file-list-exec-source-file
+ 123^done,line="1",file="foo.c",fullname="/home/bar/foo.c,macro-info="1"
+ (gdb)
+
+The `-file-list-exec-source-files' Command
+------------------------------------------
+
+Synopsis
+........
+
+ -file-list-exec-source-files
+
+ List the source files for the current executable.
+
+ It will always output the filename, but only when GDB can find the
+absolute file name of a source file, will it output the fullname.
+
+GDB Command
+...........
+
+The GDB equivalent is `info sources'. `gdbtk' has an analogous command
+`gdb_listfiles'.
+
+Example
+.......
+
+ (gdb)
+ -file-list-exec-source-files
+ ^done,files=[
+ {file=foo.c,fullname=/home/foo.c},
+ {file=/home/bar.c,fullname=/home/bar.c},
+ {file=gdb_could_not_find_fullpath.c}]
+ (gdb)
+
+The `-file-symbol-file' Command
+-------------------------------
+
+Synopsis
+........
+
+ -file-symbol-file FILE
+
+ Read symbol table info from the specified FILE argument. When used
+without arguments, clears GDB's symbol table info. No output is
+produced, except for a completion notification.
+
+GDB Command
+...........
+
+The corresponding GDB command is `symbol-file'.
+
+Example
+.......
+
+ (gdb)
+ -file-symbol-file /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
+ ^done
+ (gdb)
+
+
+File: gdb.info, Node: GDB/MI Target Manipulation, Next: GDB/MI File Transfer Commands, Prev: GDB/MI File Commands, Up: GDB/MI
+
+27.18 GDB/MI Target Manipulation Commands
+=========================================
+
+The `-target-attach' Command
+----------------------------
+
+Synopsis
+........
+
+ -target-attach PID | GID | FILE
+
+ Attach to a process PID or a file FILE outside of GDB, or a thread
+group GID. If attaching to a thread group, the id previously returned
+by `-list-thread-groups --available' must be used.
+
+GDB Command
+...........
+
+The corresponding GDB command is `attach'.
+
+Example
+.......
+
+ (gdb)
+ -target-attach 34
+ =thread-created,id="1"
+ *stopped,thread-id="1",frame={addr="0xb7f7e410",func="bar",args=[]}
+ ^done
+ (gdb)
+
+The `-target-detach' Command
+----------------------------
+
+Synopsis
+........
+
+ -target-detach [ PID | GID ]
+
+ Detach from the remote target which normally resumes its execution.
+If either PID or GID is specified, detaches from either the specified
+process, or specified thread group. There's no output.
+
+GDB Command
+...........
+
+The corresponding GDB command is `detach'.
+
+Example
+.......
+
+ (gdb)
+ -target-detach
+ ^done
+ (gdb)
+
+The `-target-disconnect' Command
+--------------------------------
+
+Synopsis
+........
+
+ -target-disconnect
+
+ Disconnect from the remote target. There's no output and the target
+is generally not resumed.
+
+GDB Command
+...........
+
+The corresponding GDB command is `disconnect'.
+
+Example
+.......
+
+ (gdb)
+ -target-disconnect
+ ^done
+ (gdb)
+
+The `-target-download' Command
+------------------------------
+
+Synopsis
+........
+
+ -target-download
+
+ Loads the executable onto the remote target. It prints out an
+update message every half second, which includes the fields:
+
+`section'
+ The name of the section.
+
+`section-sent'
+ The size of what has been sent so far for that section.
+
+`section-size'
+ The size of the section.
+
+`total-sent'
+ The total size of what was sent so far (the current and the
+ previous sections).
+
+`total-size'
+ The size of the overall executable to download.
+
+Each message is sent as status record (*note GDB/MI Output Syntax:
+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:
+
+`section'
+ The name of the section.
+
+`section-size'
+ The size of the section.
+
+`total-size'
+ The size of the overall executable to download.
+
+At the end, a summary is printed.
+
+GDB Command
+...........
+
+The corresponding GDB command is `load'.
+
+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.
+
+ (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)
+
+GDB Command
+...........
+
+No equivalent.
+
+Example
+.......
+
+N.A.
+
+The `-target-select' Command
+----------------------------
+
+Synopsis
+........
+
+ -target-select TYPE PARAMETERS ...
+
+ Connect GDB to the remote target. This command takes two args:
+
+`TYPE'
+ The type of target, for instance `remote', etc.
+
+`PARAMETERS'
+ Device names, host names and the like. *Note Commands for
+ Managing Targets: Target Commands, for more details.
+
+ The output is a connection notification, followed by the address at
+which the target program is, in the following form:
+
+ ^connected,addr="ADDRESS",func="FUNCTION NAME",
+ args=[ARG LIST]
+
+GDB Command
+...........
+
+The corresponding GDB command is `target'.
+
+Example
+.......
+
+ (gdb)
+ -target-select remote /dev/ttya
+ ^connected,addr="0xfe00a300",func="??",args=[]
+ (gdb)
+
+
+File: gdb.info, Node: GDB/MI File Transfer Commands, Next: GDB/MI Miscellaneous Commands, Prev: GDB/MI Target Manipulation, Up: GDB/MI
+
+27.19 GDB/MI File Transfer Commands
+===================================
+
+The `-target-file-put' Command
+------------------------------
+
+Synopsis
+........
+
+ -target-file-put HOSTFILE TARGETFILE
+
+ Copy file HOSTFILE from the host system (the machine running GDB) to
+TARGETFILE on the target system.
+
+GDB Command
+...........
+
+The corresponding GDB command is `remote put'.
+
+Example
+.......
+
+ (gdb)
+ -target-file-put localfile remotefile
+ ^done
+ (gdb)
+
+The `-target-file-get' Command
+------------------------------
+
+Synopsis
+........
+
+ -target-file-get TARGETFILE HOSTFILE
+
+ Copy file TARGETFILE from the target system to HOSTFILE on the host
+system.
+
+GDB Command
+...........
+
+The corresponding GDB command is `remote get'.
+
+Example
+.......
+
+ (gdb)
+ -target-file-get remotefile localfile
+ ^done
+ (gdb)
+
+The `-target-file-delete' Command
+---------------------------------
+
+Synopsis
+........
+
+ -target-file-delete TARGETFILE
+
+ Delete TARGETFILE from the target system.
+
+GDB Command
+...........
+
+The corresponding GDB command is `remote delete'.
+
+Example
+.......
+
+ (gdb)
+ -target-file-delete remotefile
+ ^done
+ (gdb)
+
+
+File: gdb.info, Node: GDB/MI Miscellaneous Commands, Prev: GDB/MI File Transfer Commands, Up: GDB/MI
+
+27.20 Miscellaneous GDB/MI Commands
+===================================
+
+The `-gdb-exit' Command
+-----------------------
+
+Synopsis
+........
+
+ -gdb-exit
+
+ Exit GDB immediately.
+
+GDB Command
+...........
+
+Approximately corresponds to `quit'.
+
+Example
+.......
+
+ (gdb)
+ -gdb-exit
+ ^exit
+
+The `-gdb-set' Command
+----------------------
+
+Synopsis
+........
+
+ -gdb-set
+
+ Set an internal GDB variable.
+
+GDB Command
+...........
+
+The corresponding GDB command is `set'.
+
+Example
+.......
+
+ (gdb)
+ -gdb-set $foo=3
+ ^done
+ (gdb)
+
+The `-gdb-show' Command
+-----------------------
+
+Synopsis
+........
+
+ -gdb-show
+
+ Show the current value of a GDB variable.
+
+GDB Command
+...........
+
+The corresponding GDB command is `show'.
+
+Example
+.......
+
+ (gdb)
+ -gdb-show annotate
+ ^done,value="0"
+ (gdb)
+
+The `-gdb-version' Command
+--------------------------
+
+Synopsis
+........
+
+ -gdb-version
+
+ Show version information for GDB. Used mostly in testing.
+
+GDB Command
+...........
+
+The GDB equivalent is `show version'. GDB by default shows this
+information when you start an interactive session.
+
+Example
+.......
+
+ (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)
+
+The `-list-features' Command
+----------------------------
+
+Returns a list of particular features of the MI protocol that this
+version of gdb implements. A feature can be a command, or a new field
+in an output of some command, or even an important bugfix. While a
+frontend can sometimes detect presence of a feature at runtime, it is
+easier to perform detection at debugger startup.
+
+ The command returns a list of strings, with each string naming an
+available feature. Each returned string is just a name, it does not
+have any internal structure. The list of possible feature names is
+given below.
+
+ Example output:
+
+ (gdb) -list-features
+ ^done,result=["feature1","feature2"]
+
+ The current list of features is:
+
+`frozen-varobjs'
+ Indicates presence of the `-var-set-frozen' command, as well as
+ possible presense of the `frozen' field in the output of
+ `-varobj-create'.
+
+`pending-breakpoints'
+ Indicates presence of the `-f' option to the `-break-insert'
+ command.
+
+`python'
+ Indicates presence of Python scripting support, Python-based
+ pretty-printing commands, and possible presence of the
+ `display_hint' field in the output of `-var-list-children'
+
+`thread-info'
+ Indicates presence of the `-thread-info' command.
+
+`data-read-memory-bytes'
+ Indicates presense of the `-data-read-memory-bytes' and the
+ `-data-write-memory-bytes' commands.
+
+
+The `-list-target-features' Command
+-----------------------------------
+
+Returns a list of particular features that are supported by the target.
+Those features affect the permitted MI commands, but unlike the
+features reported by the `-list-features' command, the features depend
+on which target GDB is using at the moment. Whenever a target can
+change, due to commands such as `-target-select', `-target-attach' or
+`-exec-run', the list of target features may change, and the frontend
+should obtain it again. Example output:
+
+ (gdb) -list-features
+ ^done,result=["async"]
+
+ The current list of features is:
+
+`async'
+ Indicates that the target is capable of asynchronous command
+ execution, which means that GDB will accept further commands while
+ the target is running.
+
+`reverse'
+ Indicates that the target is capable of reverse execution. *Note
+ Reverse Execution::, for more information.
+
+
+The `-list-thread-groups' Command
+---------------------------------
+
+Synopsis
+--------
+
+ -list-thread-groups [ --available ] [ --recurse 1 ] [ GROUP ... ]
+
+ Lists thread groups (*note Thread groups::). When a single thread
+group is passed as the argument, lists the children of that group.
+When several thread group are passed, lists information about those
+thread groups. Without any parameters, lists information about all
+top-level thread groups.
+
+ Normally, thread groups that are being debugged are reported. With
+the `--available' option, GDB reports thread groups available on the
+target.
+
+ The output of this command may have either a `threads' result or a
+`groups' result. The `thread' result has a list of tuples as value,
+with each tuple describing a thread (*note GDB/MI Thread
+Information::). The `groups' result has a list of tuples as value,
+each tuple describing a thread group. If top-level groups are
+requested (that is, no parameter is passed), or when several groups are
+passed, the output always has a `groups' result. The format of the
+`group' result is described below.
+
+ To reduce the number of roundtrips it's possible to list thread
+groups together with their children, by passing the `--recurse' option
+and the recursion depth. Presently, only recursion depth of 1 is
+permitted. If this option is present, then every reported thread group
+will also include its children, either as `group' or `threads' field.
+
+ In general, any combination of option and parameters is permitted,
+with the following caveats:
+
+ * When a single thread group is passed, the output will typically be
+ the `threads' result. Because threads may not contain anything,
+ the `recurse' option will be ignored.
+
+ * When the `--available' option is passed, limited information may
+ be available. In particular, the list of threads of a process
+ might be inaccessible. Further, specifying specific thread groups
+ might not give any performance advantage over listing all thread
+ groups. The frontend should assume that `-list-thread-groups
+ --available' is always an expensive operation and cache the
+ results.
+
+
+ The `groups' result is a list of tuples, where each tuple may have
+the following fields:
+
+`id'
+ Identifier of the thread group. This field is always present.
+ The identifier is an opaque string; frontends should not try to
+ convert it to an integer, even though it might look like one.
+
+`type'
+ The type of the thread group. At present, only `process' is a
+ valid type.
+
+`pid'
+ The target-specific process identifier. This field is only present
+ for thread groups of type `process' and only if the process exists.
+
+`num_children'
+ The number of children this thread group has. This field may be
+ absent for an available thread group.
+
+`threads'
+ This field has a list of tuples as value, each tuple describing a
+ thread. It may be present if the `--recurse' option is specified,
+ and it's actually possible to obtain the threads.
+
+`cores'
+ This field is a list of integers, each identifying a core that one
+ thread of the group is running on. This field may be absent if
+ such information is not available.
+
+`executable'
+ The name of the executable file that corresponds to this thread
+ group. The field is only present for thread groups of type
+ `process', and only if there is a corresponding executable file.
+
+
+Example
+-------
+
+ gdb
+ -list-thread-groups
+ ^done,groups=[{id="17",type="process",pid="yyy",num_children="2"}]
+ -list-thread-groups 17
+ ^done,threads=[{id="2",target-id="Thread 0xb7e14b90 (LWP 21257)",
+ frame={level="0",addr="0xffffe410",func="__kernel_vsyscall",args=[]},state="running"},
+ {id="1",target-id="Thread 0xb7e156b0 (LWP 21254)",
+ frame={level="0",addr="0x0804891f",func="foo",args=[{name="i",value="10"}],
+ file="/tmp/a.c",fullname="/tmp/a.c",line="158"},state="running"}]]
+ -list-thread-groups --available
+ ^done,groups=[{id="17",type="process",pid="yyy",num_children="2",cores=[1,2]}]
+ -list-thread-groups --available --recurse 1
+ ^done,groups=[{id="17", types="process",pid="yyy",num_children="2",cores=[1,2],
+ threads=[{id="1",target-id="Thread 0xb7e14b90",cores=[1]},
+ {id="2",target-id="Thread 0xb7e14b90",cores=[2]}]},..]
+ -list-thread-groups --available --recurse 1 17 18
+ ^done,groups=[{id="17", types="process",pid="yyy",num_children="2",cores=[1,2],
+ threads=[{id="1",target-id="Thread 0xb7e14b90",cores=[1]},
+ {id="2",target-id="Thread 0xb7e14b90",cores=[2]}]},...]
+
+The `-add-inferior' Command
+---------------------------
+
+Synopsis
+--------
+
+ -add-inferior
+
+ Creates a new inferior (*note Inferiors and Programs::). The created
+inferior is not associated with any executable. Such association may
+be established with the `-file-exec-and-symbols' command (*note GDB/MI
+File Commands::). The command response has a single field,
+`thread-group', whose value is the identifier of the thread group
+corresponding to the new inferior.
+
+Example
+-------
+
+ gdb
+ -add-inferior
+ ^done,thread-group="i3"
+
+The `-interpreter-exec' Command
+-------------------------------
+
+Synopsis
+--------
+
+ -interpreter-exec INTERPRETER COMMAND
+Execute the specified COMMAND in the given INTERPRETER.
+
+GDB Command
+-----------
+
+The corresponding GDB command is `interpreter-exec'.
+
+Example
+-------
+
+ (gdb)
+ -interpreter-exec console "break main"
+ &"During symbol reading, couldn't parse type; debugger out of date?.\n"
+ &"During symbol reading, bad structure-type format.\n"
+ ~"Breakpoint 1 at 0x8074fc6: file ../../src/gdb/main.c, line 743.\n"
+ ^done
+ (gdb)
+
+The `-inferior-tty-set' Command
+-------------------------------
+
+Synopsis
+--------
+
+ -inferior-tty-set /dev/pts/1
+
+ Set terminal for future runs of the program being debugged.
+
+GDB Command
+-----------
+
+The corresponding GDB command is `set inferior-tty' /dev/pts/1.
+
+Example
+-------
+
+ (gdb)
+ -inferior-tty-set /dev/pts/1
+ ^done
+ (gdb)
+
+The `-inferior-tty-show' Command
+--------------------------------
+
+Synopsis
+--------
+
+ -inferior-tty-show
+
+ Show terminal for future runs of program being debugged.
+
+GDB Command
+-----------
+
+The corresponding GDB command is `show inferior-tty'.
+
+Example
+-------
+
+ (gdb)
+ -inferior-tty-set /dev/pts/1
+ ^done
+ (gdb)
+ -inferior-tty-show
+ ^done,inferior_tty_terminal="/dev/pts/1"
+ (gdb)
+
+The `-enable-timings' Command
+-----------------------------
+
+Synopsis
+--------
+
+ -enable-timings [yes | no]
+
+ Toggle the printing of the wallclock, user and system times for an MI
+command as a field in its output. This command is to help frontend
+developers optimize the performance of their code. No argument is
+equivalent to `yes'.
+
+GDB Command
+-----------
+
+No equivalent.
+
+Example
+-------
+
+ (gdb)
+ -enable-timings
+ ^done
+ (gdb)
+ -break-insert main
+ ^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+ addr="0x080484ed",func="main",file="myprog.c",
+ fullname="/home/nickrob/myprog.c",line="73",times="0"},
+ time={wallclock="0.05185",user="0.00800",system="0.00000"}
+ (gdb)
+ -enable-timings no
+ ^done
+ (gdb)
+ -exec-run
+ ^running
+ (gdb)
+ *stopped,reason="breakpoint-hit",disp="keep",bkptno="1",thread-id="0",
+ frame={addr="0x080484ed",func="main",args=[{name="argc",value="1"},
+ {name="argv",value="0xbfb60364"}],file="myprog.c",
+ fullname="/home/nickrob/myprog.c",line="73"}
+ (gdb)
+
+
+File: gdb.info, Node: Annotations, Next: JIT Interface, Prev: GDB/MI, Up: Top
+
+28 GDB Annotations
+******************
+
+This chapter describes annotations in GDB. Annotations were designed
+to interface GDB to graphical user interfaces or other similar programs
+which want to interact with GDB at a relatively high level.
+
+ The annotation mechanism has largely been superseded by GDB/MI
+(*note GDB/MI::).
+
+* Menu:
+
+* Annotations Overview:: What annotations are; the general syntax.
+* Server Prefix:: Issuing a command without affecting user state.
+* Prompting:: Annotations marking GDB's need for input.
+* Errors:: Annotations for error messages.
+* Invalidation:: Some annotations describe things now invalid.
+* Annotations for Running::
+ Whether the program is running, how it stopped, etc.
+* Source Annotations:: Annotations describing source code.
+
+
+File: gdb.info, Node: Annotations Overview, Next: Server Prefix, Up: Annotations
+
+28.1 What is an Annotation?
+===========================
+
+Annotations start with a newline character, two `control-z' characters,
+and the name of the annotation. If there is no additional information
+associated with this annotation, the name of the annotation is followed
+immediately by a newline. If there is additional information, the name
+of the annotation is followed by a space, the additional information,
+and a newline. The additional information cannot contain newline
+characters.
+
+ Any output not beginning with a newline and two `control-z'
+characters denotes literal output from GDB. Currently there is no need
+for GDB to output a newline followed by two `control-z' characters, but
+if there was such a need, the annotations could be extended with an
+`escape' annotation which means those three characters as output.
+
+ The annotation LEVEL, which is specified using the `--annotate'
+command line option (*note Mode Options::), controls how much
+information GDB prints together with its prompt, values of expressions,
+source lines, and other types of output. Level 0 is for no
+annotations, level 1 is for use when GDB is run as a subprocess of GNU
+Emacs, level 3 is the maximum annotation suitable for programs that
+control GDB, and level 2 annotations have been made obsolete (*note
+Limitations of the Annotation Interface: (annotate)Limitations.).
+
+`set annotate LEVEL'
+ The GDB command `set annotate' sets the level of annotations to
+ the specified LEVEL.
+
+`show annotate'
+ Show the current annotation level.
+
+ This chapter describes level 3 annotations.
+
+ A simple example of starting up GDB with annotations is:
+
+ $ gdb --annotate=3
+ GNU gdb 6.0
+ Copyright 2003 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 "i386-pc-linux-gnu"
+
+ ^Z^Zpre-prompt
+ (gdb)
+ ^Z^Zprompt
+ quit
+
+ ^Z^Zpost-prompt
+ $
+
+ Here `quit' is input to GDB; the rest is output from GDB. The three
+lines beginning `^Z^Z' (where `^Z' denotes a `control-z' character) are
+annotations; the rest is output from GDB.
+
+
+File: gdb.info, Node: Server Prefix, Next: Prompting, Prev: Annotations Overview, Up: Annotations
+
+28.2 The Server Prefix
+======================
+
+If you prefix a command with `server ' then it will not affect the
+command history, nor will it affect GDB's notion of which command to
+repeat if <RET> is pressed on a line by itself. This means that
+commands can be run behind a user's back by a front-end in a
+transparent manner.
+
+ The `server ' prefix does not affect the recording of values into
+the value history; to print a value without recording it into the value
+history, use the `output' command instead of the `print' command.
+
+ Using this prefix also disables confirmation requests (*note
+confirmation requests::).
+
+
+File: gdb.info, Node: Prompting, Next: Errors, Prev: Server Prefix, Up: Annotations
+
+28.3 Annotation for GDB Input
+=============================
+
+When GDB prompts for input, it annotates this fact so it is possible to
+know when to send output, when the output from a given command is over,
+etc.
+
+ Different kinds of input each have a different "input type". Each
+input type has three annotations: a `pre-' annotation, which denotes
+the beginning of any prompt which is being output, a plain annotation,
+which denotes the end of the prompt, and then a `post-' annotation
+which denotes the end of any echo which may (or may not) be associated
+with the input. For example, the `prompt' input type features the
+following annotations:
+
+ ^Z^Zpre-prompt
+ ^Z^Zprompt
+ ^Z^Zpost-prompt
+
+ The input types are
+
+`prompt'
+ When GDB is prompting for a command (the main GDB prompt).
+
+`commands'
+ When GDB prompts for a set of commands, like in the `commands'
+ command. The annotations are repeated for each command which is
+ input.
+
+`overload-choice'
+ When GDB wants the user to select between various overloaded
+ functions.
+
+`query'
+ When GDB wants the user to confirm a potentially dangerous
+ operation.
+
+`prompt-for-continue'
+ When GDB is asking the user to press return to continue. Note:
+ Don't expect this to work well; instead use `set height 0' to
+ disable prompting. This is because the counting of lines is buggy
+ in the presence of annotations.
+
+
+File: gdb.info, Node: Errors, Next: Invalidation, Prev: Prompting, Up: Annotations
+
+28.4 Errors
+===========
+
+ ^Z^Zquit
+
+ This annotation occurs right before GDB responds to an interrupt.
+
+ ^Z^Zerror
+
+ This annotation occurs right before GDB responds to an error.
+
+ Quit and error annotations indicate that any annotations which GDB
+was in the middle of may end abruptly. For example, if a
+`value-history-begin' annotation is followed by a `error', one cannot
+expect to receive the matching `value-history-end'. One cannot expect
+not to receive it either, however; an error annotation does not
+necessarily mean that GDB is immediately returning all the way to the
+top level.
+
+ A quit or error annotation may be preceded by
+
+ ^Z^Zerror-begin
+
+ Any output between that and the quit or error annotation is the error
+message.
+
+ Warning messages are not yet annotated.
+
+
+File: gdb.info, Node: Invalidation, Next: Annotations for Running, Prev: Errors, Up: Annotations
+
+28.5 Invalidation Notices
+=========================
+
+The following annotations say that certain pieces of state may have
+changed.
+
+`^Z^Zframes-invalid'
+ The frames (for example, output from the `backtrace' command) may
+ have changed.
+
+`^Z^Zbreakpoints-invalid'
+ The breakpoints may have changed. For example, the user just
+ added or deleted a breakpoint.
+
+
+File: gdb.info, Node: Annotations for Running, Next: Source Annotations, Prev: Invalidation, Up: Annotations
+
+28.6 Running the Program
+========================
+
+When the program starts executing due to a GDB command such as `step'
+or `continue',
+
+ ^Z^Zstarting
+
+ is output. When the program stops,
+
+ ^Z^Zstopped
+
+ is output. Before the `stopped' annotation, a variety of
+annotations describe how the program stopped.
+
+`^Z^Zexited EXIT-STATUS'
+ The program exited, and EXIT-STATUS is the exit status (zero for
+ successful exit, otherwise nonzero).
+
+`^Z^Zsignalled'
+ The program exited with a signal. After the `^Z^Zsignalled', the
+ annotation continues:
+
+ INTRO-TEXT
+ ^Z^Zsignal-name
+ NAME
+ ^Z^Zsignal-name-end
+ MIDDLE-TEXT
+ ^Z^Zsignal-string
+ STRING
+ ^Z^Zsignal-string-end
+ END-TEXT
+
+ where NAME is the name of the signal, such as `SIGILL' or
+ `SIGSEGV', and STRING is the explanation of the signal, such as
+ `Illegal Instruction' or `Segmentation fault'. INTRO-TEXT,
+ MIDDLE-TEXT, and END-TEXT are for the user's benefit and have no
+ particular format.
+
+`^Z^Zsignal'
+ The syntax of this annotation is just like `signalled', but GDB is
+ just saying that the program received the signal, not that it was
+ terminated with it.
+
+`^Z^Zbreakpoint NUMBER'
+ The program hit breakpoint number NUMBER.
+
+`^Z^Zwatchpoint NUMBER'
+ The program hit watchpoint number NUMBER.
+
+
+File: gdb.info, Node: Source Annotations, Prev: Annotations for Running, Up: Annotations
+
+28.7 Displaying Source
+======================
+
+The following annotation is used instead of displaying source code:
+
+ ^Z^Zsource FILENAME:LINE:CHARACTER:MIDDLE:ADDR
+
+ where FILENAME is an absolute file name indicating which source
+file, LINE is the line number within that file (where 1 is the first
+line in the file), CHARACTER is the character position within the file
+(where 0 is the first character in the file) (for most debug formats
+this will necessarily point to the beginning of a line), MIDDLE is
+`middle' if ADDR is in the middle of the line, or `beg' if ADDR is at
+the beginning of the line, and ADDR is the address in the target
+program associated with the source which is being displayed. ADDR is
+in the form `0x' followed by one or more lowercase hex digits (note
+that this does not depend on the language).
+
+
+File: gdb.info, Node: JIT Interface, Next: GDB Bugs, Prev: Annotations, Up: Top
+
+29 JIT Compilation Interface
+****************************
+
+This chapter documents GDB's "just-in-time" (JIT) compilation
+interface. A JIT compiler is a program or library that generates native
+executable code at runtime and executes it, usually in order to achieve
+good performance while maintaining platform independence.
+
+ Programs that use JIT compilation are normally difficult to debug
+because portions of their code are generated at runtime, instead of
+being loaded from object files, which is where GDB normally finds the
+program's symbols and debug information. In order to debug programs
+that use JIT compilation, GDB has an interface that allows the program
+to register in-memory symbol files with GDB at runtime.
+
+ If you are using GDB to debug a program that uses this interface,
+then it should work transparently so long as you have not stripped the
+binary. If you are developing a JIT compiler, then the interface is
+documented in the rest of this chapter. At this time, the only known
+client of this interface is the LLVM JIT.
+
+ Broadly speaking, the JIT interface mirrors the dynamic loader
+interface. The JIT compiler communicates with GDB by writing data into
+a global variable and calling a fuction at a well-known symbol. When
+GDB attaches, it reads a linked list of symbol files from the global
+variable to find existing code, and puts a breakpoint in the function
+so that it can find out about additional code.
+
+* Menu:
+
+* Declarations:: Relevant C struct declarations
+* Registering Code:: Steps to register code
+* Unregistering Code:: Steps to unregister code
+
+
+File: gdb.info, Node: Declarations, Next: Registering Code, Up: JIT Interface
+
+29.1 JIT Declarations
+=====================
+
+These are the relevant struct declarations that a C program should
+include to implement the interface:
+
+ typedef enum
+ {
+ JIT_NOACTION = 0,
+ JIT_REGISTER_FN,
+ JIT_UNREGISTER_FN
+ } jit_actions_t;
+
+ struct jit_code_entry
+ {
+ struct jit_code_entry *next_entry;
+ struct jit_code_entry *prev_entry;
+ const char *symfile_addr;
+ uint64_t symfile_size;
+ };
+
+ struct jit_descriptor
+ {
+ uint32_t version;
+ /* This type should be jit_actions_t, but we use uint32_t
+ to be explicit about the bitwidth. */
+ uint32_t action_flag;
+ struct jit_code_entry *relevant_entry;
+ struct jit_code_entry *first_entry;
+ };
+
+ /* GDB puts a breakpoint in this function. */
+ void __attribute__((noinline)) __jit_debug_register_code() { };
+
+ /* Make sure to specify the version statically, because the
+ debugger may check the version before we can set it. */
+ struct jit_descriptor __jit_debug_descriptor = { 1, 0, 0, 0 };
+
+ If the JIT is multi-threaded, then it is important that the JIT
+synchronize any modifications to this global data properly, which can
+easily be done by putting a global mutex around modifications to these
+structures.
+
+
+File: gdb.info, Node: Registering Code, Next: Unregistering Code, Prev: Declarations, Up: JIT Interface
+
+29.2 Registering Code
+=====================
+
+To register code with GDB, the JIT should follow this protocol:
+
+ * Generate an object file in memory with symbols and other desired
+ debug information. The file must include the virtual addresses of
+ the sections.
+
+ * Create a code entry for the file, which gives the start and size
+ of the symbol file.
+
+ * Add it to the linked list in the JIT descriptor.
+
+ * Point the relevant_entry field of the descriptor at the entry.
+
+ * Set `action_flag' to `JIT_REGISTER' and call
+ `__jit_debug_register_code'.
+
+ When GDB is attached and the breakpoint fires, GDB uses the
+`relevant_entry' pointer so it doesn't have to walk the list looking for
+new code. However, the linked list must still be maintained in order
+to allow GDB to attach to a running process and still find the symbol
+files.
+
+
+File: gdb.info, Node: Unregistering Code, Prev: Registering Code, Up: JIT Interface
+
+29.3 Unregistering Code
+=======================
+
+If code is freed, then the JIT should use the following protocol:
+
+ * Remove the code entry corresponding to the code from the linked
+ list.
+
+ * Point the `relevant_entry' field of the descriptor at the code
+ entry.
+
+ * Set `action_flag' to `JIT_UNREGISTER' and call
+ `__jit_debug_register_code'.
+
+ If the JIT frees or recompiles code without unregistering it, then
+GDB and the JIT will leak the memory used for the associated symbol
+files.
+
+
+File: gdb.info, Node: GDB Bugs, Next: Command Line Editing, Prev: JIT Interface, Up: Top
+
+30 Reporting Bugs in GDB
+************************
+
+Your bug reports play an essential role in making GDB reliable.
+
+ Reporting a bug may help you by bringing a solution to your problem,
+or it may not. But in any case the principal function of a bug report
+is to help the entire community by making the next version of GDB work
+better. Bug reports are your contribution to the maintenance of GDB.
+
+ In order for a bug report to serve its purpose, you must include the
+information that enables us to fix the bug.
+
+* Menu:
+
+* Bug Criteria:: Have you found a bug?
+* Bug Reporting:: How to report bugs
+
+
+File: gdb.info, Node: Bug Criteria, Next: Bug Reporting, Up: GDB Bugs
+
+30.1 Have You Found a Bug?
+==========================
+
+If you are not sure whether you have found a bug, here are some
+guidelines:
+
+ * If the debugger gets a fatal signal, for any input whatever, that
+ is a GDB bug. Reliable debuggers never crash.
+
+ * If GDB produces an error message for valid input, that is a bug.
+ (Note that if you're cross debugging, the problem may also be
+ somewhere in the connection to the target.)
+
+ * If GDB does not produce an error message for invalid input, that
+ is a bug. However, you should note that your idea of "invalid
+ input" might be our idea of "an extension" or "support for
+ traditional practice".
+
+ * If you are an experienced user of debugging tools, your suggestions
+ for improvement of GDB are welcome in any case.
+
+
+File: gdb.info, Node: Bug Reporting, Prev: Bug Criteria, Up: GDB Bugs
+
+30.2 How to Report Bugs
+=======================
+
+A number of companies and individuals offer support for GNU products.
+If you obtained GDB from a support organization, we recommend you
+contact that organization first.
+
+ You can find contact information for many support companies and
+individuals in the file `etc/SERVICE' in the GNU Emacs distribution.
+
+ In any event, we also recommend that you submit bug reports for GDB.
+The preferred method is to submit them directly using GDB's Bugs web
+page (http://www.gnu.org/software/gdb/bugs/). Alternatively, the
+e-mail gateway <bug-gdb@gnu.org> can be used.
+
+ *Do not send bug reports to `info-gdb', or to `help-gdb', or to any
+newsgroups.* Most users of GDB do not want to receive bug reports.
+Those that do have arranged to receive `bug-gdb'.
+
+ The mailing list `bug-gdb' has a newsgroup `gnu.gdb.bug' which
+serves as a repeater. The mailing list and the newsgroup carry exactly
+the same messages. Often people think of posting bug reports to the
+newsgroup instead of mailing them. This appears to work, but it has one
+problem which can be crucial: a newsgroup posting often lacks a mail
+path back to the sender. Thus, if we need to ask for more information,
+we may be unable to reach you. For this reason, it is better to send
+bug reports to the mailing list.
+
+ The fundamental principle of reporting bugs usefully is this:
+*report all the facts*. If you are not sure whether to state a fact or
+leave it out, state it!
+
+ Often people omit facts because they think they know what causes the
+problem and assume that some details do not matter. Thus, you might
+assume that the name of the variable you use in an example does not
+matter. Well, probably it does not, but one cannot be sure. Perhaps
+the bug is a stray memory reference which happens to fetch from the
+location where that name is stored in memory; perhaps, if the name were
+different, the contents of that location would fool the debugger into
+doing the right thing despite the bug. Play it safe and give a
+specific, complete example. That is the easiest thing for you to do,
+and the most helpful.
+
+ Keep in mind that the purpose of a bug report is to enable us to fix
+the bug. It may be that the bug has been reported previously, but
+neither you nor we can know that unless your bug report is complete and
+self-contained.
+
+ Sometimes people give a few sketchy facts and ask, "Does this ring a
+bell?" Those bug reports are useless, and we urge everyone to _refuse
+to respond to them_ except to chide the sender to report bugs properly.
+
+ To enable us to fix the bug, you should include all these things:
+
+ * The version of GDB. GDB announces it if you start with no
+ arguments; you can also print it at any time using `show version'.
+
+ Without this, we will not know whether there is any point in
+ looking for the bug in the current version of GDB.
+
+ * The type of machine you are using, and the operating system name
+ and version number.
+
+ * What compiler (and its version) was used to compile GDB--e.g.
+ "gcc-2.8.1".
+
+ * What compiler (and its version) was used to compile the program
+ you are debugging--e.g. "gcc-2.8.1", or "HP92453-01 A.10.32.03 HP
+ C Compiler". For GCC, you can say `gcc --version' to get this
+ information; for other compilers, see the documentation for those
+ compilers.
+
+ * The command arguments you gave the compiler to compile your
+ example and observe the bug. For example, did you use `-O'? To
+ guarantee you will not omit something important, list them all. A
+ copy of the Makefile (or the output from make) is sufficient.
+
+ If we were to try to guess the arguments, we would probably guess
+ wrong and then we might not encounter the bug.
+
+ * A complete input script, and all necessary source files, that will
+ reproduce the bug.
+
+ * A description of what behavior you observe that you believe is
+ incorrect. For example, "It gets a fatal signal."
+
+ Of course, if the bug is that GDB gets a fatal signal, then we
+ will certainly notice it. But if the bug is incorrect output, we
+ might not notice unless it is glaringly wrong. You might as well
+ not give us a chance to make a mistake.
+
+ Even if the problem you experience is a fatal signal, you should
+ still say so explicitly. Suppose something strange is going on,
+ such as, your copy of GDB is out of synch, or you have encountered
+ a bug in the C library on your system. (This has happened!) Your
+ copy might crash and ours would not. If you told us to expect a
+ crash, then when ours fails to crash, we would know that the bug
+ was not happening for us. If you had not told us to expect a
+ crash, then we would not be able to draw any conclusion from our
+ observations.
+
+ To collect all this information, you can use a session recording
+ program such as `script', which is available on many Unix systems.
+ Just run your GDB session inside `script' and then include the
+ `typescript' file with your bug report.
+
+ Another way to record a GDB session is to run GDB inside Emacs and
+ then save the entire buffer to a file.
+
+ * If you wish to suggest changes to the GDB source, send us context
+ diffs. If you even discuss something in the GDB source, refer to
+ it by context, not by line number.
+
+ The line numbers in our development sources will not match those
+ in your sources. Your line numbers would convey no useful
+ information to us.
+
+
+ Here are some things that are not necessary:
+
+ * A description of the envelope of the bug.
+
+ Often people who encounter a bug spend a lot of time investigating
+ which changes to the input file will make the bug go away and which
+ changes will not affect it.
+
+ This is often time consuming and not very useful, because the way
+ we will find the bug is by running a single example under the
+ debugger with breakpoints, not by pure deduction from a series of
+ examples. We recommend that you save your time for something else.
+
+ Of course, if you can find a simpler example to report _instead_
+ of the original one, that is a convenience for us. Errors in the
+ output will be easier to spot, running under the debugger will take
+ less time, and so on.
+
+ However, simplification is not vital; if you do not want to do
+ this, report the bug anyway and send us the entire test case you
+ used.
+
+ * A patch for the bug.
+
+ A patch for the bug does help us if it is a good one. But do not
+ omit the necessary information, such as the test case, on the
+ assumption that a patch is all we need. We might see problems
+ with your patch and decide to fix the problem another way, or we
+ might not understand it at all.
+
+ Sometimes with a program as complicated as GDB it is very hard to
+ construct an example that will make the program follow a certain
+ path through the code. If you do not send us the example, we will
+ not be able to construct one, so we will not be able to verify
+ that the bug is fixed.
+
+ And if we cannot understand what bug you are trying to fix, or why
+ your patch should be an improvement, we will not install it. A
+ test case will help us to understand.
+
+ * A guess about what the bug is or what it depends on.
+
+ Such guesses are usually wrong. Even we cannot guess right about
+ such things without first using the debugger to find the facts.
+
+
+File: gdb.info, Node: Command Line Editing, Next: Using History Interactively, Prev: GDB Bugs, Up: Top
+
+31 Command Line Editing
+***********************
+
+This chapter describes the basic features of the GNU command line
+editing interface.
+
+* Menu:
+
+* Introduction and Notation:: Notation used in this text.
+* Readline Interaction:: The minimum set of commands for editing a line.
+* Readline Init File:: Customizing Readline from a user's view.
+* Bindable Readline Commands:: A description of most of the Readline commands
+ available for binding
+* Readline vi Mode:: A short description of how to make Readline
+ behave like the vi editor.
+
+
+File: gdb.info, Node: Introduction and Notation, Next: Readline Interaction, Up: Command Line Editing
+
+31.1 Introduction to Line Editing
+=================================
+
+The following paragraphs describe the notation used to represent
+keystrokes.
+
+ The text `C-k' is read as `Control-K' and describes the character
+produced when the <k> key is pressed while the Control key is depressed.
+
+ The text `M-k' is read as `Meta-K' and describes the character
+produced when the Meta key (if you have one) is depressed, and the <k>
+key is pressed. The Meta key is labeled <ALT> on many keyboards. On
+keyboards with two keys labeled <ALT> (usually to either side of the
+space bar), the <ALT> on the left side is generally set to work as a
+Meta key. The <ALT> key on the right may also be configured to work as
+a Meta key or may be configured as some other modifier, such as a
+Compose key for typing accented characters.
+
+ If you do not have a Meta or <ALT> key, or another key working as a
+Meta key, the identical keystroke can be generated by typing <ESC>
+_first_, and then typing <k>. Either process is known as "metafying"
+the <k> key.
+
+ The text `M-C-k' is read as `Meta-Control-k' and describes the
+character produced by "metafying" `C-k'.
+
+ In addition, several keys have their own names. Specifically,
+<DEL>, <ESC>, <LFD>, <SPC>, <RET>, and <TAB> all stand for themselves
+when seen in this text, or in an init file (*note Readline Init File::).
+If your keyboard lacks a <LFD> key, typing <C-j> will produce the
+desired character. The <RET> key may be labeled <Return> or <Enter> on
+some keyboards.
+
+
+File: gdb.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing
+
+31.2 Readline Interaction
+=========================
+
+Often during an interactive session you type in a long line of text,
+only to notice that the first word on the line is misspelled. The
+Readline library gives you a set of commands for manipulating the text
+as you type it in, allowing you to just fix your typo, and not forcing
+you to retype the majority of the line. Using these editing commands,
+you move the cursor to the place that needs correction, and delete or
+insert the text of the corrections. Then, when you are satisfied with
+the line, you simply press <RET>. You do not have to be at the end of
+the line to press <RET>; the entire line is accepted regardless of the
+location of the cursor within the line.
+
+* Menu:
+
+* Readline Bare Essentials:: The least you need to know about Readline.
+* Readline Movement Commands:: Moving about the input line.
+* Readline Killing Commands:: How to delete text, and how to get it back!
+* Readline Arguments:: Giving numeric arguments to commands.
+* Searching:: Searching through previous lines.
+
+
+File: gdb.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction
+
+31.2.1 Readline Bare Essentials
+-------------------------------
+
+In order to enter characters into the line, simply type them. The typed
+character appears where the cursor was, and then the cursor moves one
+space to the right. If you mistype a character, you can use your erase
+character to back up and delete the mistyped character.
+
+ Sometimes you may mistype a character, and not notice the error
+until you have typed several other characters. In that case, you can
+type `C-b' to move the cursor to the left, and then correct your
+mistake. Afterwards, you can move the cursor to the right with `C-f'.
+
+ When you add text in the middle of a line, you will notice that
+characters to the right of the cursor are `pushed over' to make room
+for the text that you have inserted. Likewise, when you delete text
+behind the cursor, characters to the right of the cursor are `pulled
+back' to fill in the blank space created by the removal of the text. A
+list of the bare essentials for editing the text of an input line
+follows.
+
+`C-b'
+ Move back one character.
+
+`C-f'
+ Move forward one character.
+
+<DEL> or <Backspace>
+ Delete the character to the left of the cursor.
+
+`C-d'
+ Delete the character underneath the cursor.
+
+Printing characters
+ Insert the character into the line at the cursor.
+
+`C-_' or `C-x C-u'
+ Undo the last editing command. You can undo all the way back to an
+ empty line.
+
+(Depending on your configuration, the <Backspace> key be set to delete
+the character to the left of the cursor and the <DEL> key set to delete
+the character underneath the cursor, like `C-d', rather than the
+character to the left of the cursor.)
+
+
+File: gdb.info, Node: Readline Movement Commands, Next: Readline Killing Commands, Prev: Readline Bare Essentials, Up: Readline Interaction
+
+31.2.2 Readline Movement Commands
+---------------------------------
+
+The above table describes the most basic keystrokes that you need in
+order to do editing of the input line. For your convenience, many
+other commands have been added in addition to `C-b', `C-f', `C-d', and
+<DEL>. Here are some commands for moving more rapidly about the line.
+
+`C-a'
+ Move to the start of the line.
+
+`C-e'
+ Move to the end of the line.
+
+`M-f'
+ Move forward a word, where a word is composed of letters and
+ digits.
+
+`M-b'
+ Move backward a word.
+
+`C-l'
+ Clear the screen, reprinting the current line at the top.
+
+ Notice how `C-f' moves forward a character, while `M-f' moves
+forward a word. It is a loose convention that control keystrokes
+operate on characters while meta keystrokes operate on words.
+
+
+File: gdb.info, Node: Readline Killing Commands, Next: Readline Arguments, Prev: Readline Movement Commands, Up: Readline Interaction
+
+31.2.3 Readline Killing Commands
+--------------------------------
+
+"Killing" text means to delete the text from the line, but to save it
+away for later use, usually by "yanking" (re-inserting) it back into
+the line. (`Cut' and `paste' are more recent jargon for `kill' and
+`yank'.)
+
+ If the description for a command says that it `kills' text, then you
+can be sure that you can get the text back in a different (or the same)
+place later.
+
+ When you use a kill command, the text is saved in a "kill-ring".
+Any number of consecutive kills save all of the killed text together, so
+that when you yank it back, you get it all. The kill ring is not line
+specific; the text that you killed on a previously typed line is
+available to be yanked back later, when you are typing another line.
+
+ Here is the list of commands for killing text.
+
+`C-k'
+ Kill the text from the current cursor position to the end of the
+ line.
+
+`M-d'
+ Kill from the cursor to the end of the current word, or, if between
+ words, to the end of the next word. Word boundaries are the same
+ as those used by `M-f'.
+
+`M-<DEL>'
+ Kill from the cursor the start of the current word, or, if between
+ words, to the start of the previous word. Word boundaries are the
+ same as those used by `M-b'.
+
+`C-w'
+ Kill from the cursor to the previous whitespace. This is
+ different than `M-<DEL>' because the word boundaries differ.
+
+
+ Here is how to "yank" the text back into the line. Yanking means to
+copy the most-recently-killed text from the kill buffer.
+
+`C-y'
+ Yank the most recently killed text back into the buffer at the
+ cursor.
+
+`M-y'
+ Rotate the kill-ring, and yank the new top. You can only do this
+ if the prior command is `C-y' or `M-y'.
+
+
+File: gdb.info, Node: Readline Arguments, Next: Searching, Prev: Readline Killing Commands, Up: Readline Interaction
+
+31.2.4 Readline Arguments
+-------------------------
+
+You can pass numeric arguments to Readline commands. Sometimes the
+argument acts as a repeat count, other times it is the sign of the
+argument that is significant. If you pass a negative argument to a
+command which normally acts in a forward direction, that command will
+act in a backward direction. For example, to kill text back to the
+start of the line, you might type `M-- C-k'.
+
+ The general way to pass numeric arguments to a command is to type
+meta digits before the command. If the first `digit' typed is a minus
+sign (`-'), then the sign of the argument will be negative. Once you
+have typed one meta digit to get the argument started, you can type the
+remainder of the digits, and then the command. For example, to give
+the `C-d' command an argument of 10, you could type `M-1 0 C-d', which
+will delete the next ten characters on the input line.
+
+
+File: gdb.info, Node: Searching, Prev: Readline Arguments, Up: Readline Interaction
+
+31.2.5 Searching for Commands in the History
+--------------------------------------------
+
+Readline provides commands for searching through the command history
+for lines containing a specified string. There are two search modes:
+"incremental" and "non-incremental".
+
+ Incremental searches begin before the user has finished typing the
+search string. As each character of the search string is typed,
+Readline displays the next entry from the history matching the string
+typed so far. An incremental search requires only as many characters
+as needed to find the desired history entry. To search backward in the
+history for a particular string, type `C-r'. Typing `C-s' searches
+forward through the history. The characters present in the value of
+the `isearch-terminators' variable are used to terminate an incremental
+search. If that variable has not been assigned a value, the <ESC> and
+`C-J' characters will terminate an incremental search. `C-g' will
+abort an incremental search and restore the original line. When the
+search is terminated, the history entry containing the search string
+becomes the current line.
+
+ To find other matching entries in the history list, type `C-r' or
+`C-s' as appropriate. This will search backward or forward in the
+history for the next entry matching the search string typed so far.
+Any other key sequence bound to a Readline command will terminate the
+search and execute that command. For instance, a <RET> will terminate
+the search and accept the line, thereby executing the command from the
+history list. A movement command will terminate the search, make the
+last line found the current line, and begin editing.
+
+ Readline remembers the last incremental search string. If two
+`C-r's are typed without any intervening characters defining a new
+search string, any remembered search string is used.
+
+ Non-incremental searches read the entire search string before
+starting to search for matching history lines. The search string may be
+typed by the user or be part of the contents of the current line.
+
+
+File: gdb.info, Node: Readline Init File, Next: Bindable Readline Commands, Prev: Readline Interaction, Up: Command Line Editing
+
+31.3 Readline Init File
+=======================
+
+Although the Readline library comes with a set of Emacs-like
+keybindings installed by default, it is possible to use a different set
+of keybindings. Any user can customize programs that use Readline by
+putting commands in an "inputrc" file, conventionally in his home
+directory. The name of this file is taken from the value of the
+environment variable `INPUTRC'. If that variable is unset, the default
+is `~/.inputrc'.
+
+ When a program which uses the Readline library starts up, the init
+file is read, and the key bindings are set.
+
+ In addition, the `C-x C-r' command re-reads this init file, thus
+incorporating any changes that you might have made to it.
+
+* Menu:
+
+* Readline Init File Syntax:: Syntax for the commands in the inputrc file.
+
+* Conditional Init Constructs:: Conditional key bindings in the inputrc file.
+
+* Sample Init File:: An example inputrc file.
+
+
+File: gdb.info, Node: Readline Init File Syntax, Next: Conditional Init Constructs, Up: Readline Init File
+
+31.3.1 Readline Init File Syntax
+--------------------------------
+
+There are only a few basic constructs allowed in the Readline init
+file. Blank lines are ignored. Lines beginning with a `#' are
+comments. Lines beginning with a `$' indicate conditional constructs
+(*note Conditional Init Constructs::). Other lines denote variable
+settings and key bindings.
+
+Variable Settings
+ You can modify the run-time behavior of Readline by altering the
+ values of variables in Readline using the `set' command within the
+ init file. The syntax is simple:
+
+ set VARIABLE VALUE
+
+ Here, for example, is how to change from the default Emacs-like
+ key binding to use `vi' line editing commands:
+
+ set editing-mode vi
+
+ Variable names and values, where appropriate, are recognized
+ without regard to case. Unrecognized variable names are ignored.
+
+ Boolean variables (those that can be set to on or off) are set to
+ on if the value is null or empty, ON (case-insensitive), or 1.
+ Any other value results in the variable being set to off.
+
+ A great deal of run-time behavior is changeable with the following
+ variables.
+
+ `bell-style'
+ Controls what happens when Readline wants to ring the
+ terminal bell. If set to `none', Readline never rings the
+ bell. If set to `visible', Readline uses a visible bell if
+ one is available. If set to `audible' (the default),
+ Readline attempts to ring the terminal's bell.
+
+ `bind-tty-special-chars'
+ If set to `on', Readline attempts to bind the control
+ characters treated specially by the kernel's terminal driver
+ to their Readline equivalents.
+
+ `comment-begin'
+ The string to insert at the beginning of the line when the
+ `insert-comment' command is executed. The default value is
+ `"#"'.
+
+ `completion-ignore-case'
+ If set to `on', Readline performs filename matching and
+ completion in a case-insensitive fashion. The default value
+ is `off'.
+
+ `completion-query-items'
+ The number of possible completions that determines when the
+ user is asked whether the list of possibilities should be
+ displayed. If the number of possible completions is greater
+ than this value, Readline will ask the user whether or not he
+ wishes to view them; otherwise, they are simply listed. This
+ variable must be set to an integer value greater than or
+ equal to 0. A negative value means Readline should never ask.
+ The default limit is `100'.
+
+ `convert-meta'
+ If set to `on', Readline will convert characters with the
+ eighth bit set to an ASCII key sequence by stripping the
+ eighth bit and prefixing an <ESC> character, converting them
+ to a meta-prefixed key sequence. The default value is `on'.
+
+ `disable-completion'
+ If set to `On', Readline will inhibit word completion.
+ Completion characters will be inserted into the line as if
+ they had been mapped to `self-insert'. The default is `off'.
+
+ `editing-mode'
+ The `editing-mode' variable controls which default set of key
+ bindings is used. By default, Readline starts up in Emacs
+ editing mode, where the keystrokes are most similar to Emacs.
+ This variable can be set to either `emacs' or `vi'.
+
+ `enable-keypad'
+ When set to `on', Readline will try to enable the application
+ keypad when it is called. Some systems need this to enable
+ the arrow keys. The default is `off'.
+
+ `expand-tilde'
+ If set to `on', tilde expansion is performed when Readline
+ attempts word completion. The default is `off'.
+
+ `history-preserve-point'
+ If set to `on', the history code attempts to place point at
+ the same location on each history line retrieved with
+ `previous-history' or `next-history'. The default is `off'.
+
+ `horizontal-scroll-mode'
+ This variable can be set to either `on' or `off'. Setting it
+ to `on' means that the text of the lines being edited will
+ scroll horizontally on a single screen line when they are
+ longer than the width of the screen, instead of wrapping onto
+ a new screen line. By default, this variable is set to `off'.
+
+ `input-meta'
+ If set to `on', Readline will enable eight-bit input (it will
+ not clear the eighth bit in the characters it reads),
+ regardless of what the terminal claims it can support. The
+ default value is `off'. The name `meta-flag' is a synonym
+ for this variable.
+
+ `isearch-terminators'
+ The string of characters that should terminate an incremental
+ search without subsequently executing the character as a
+ command (*note Searching::). If this variable has not been
+ given a value, the characters <ESC> and `C-J' will terminate
+ an incremental search.
+
+ `keymap'
+ Sets Readline's idea of the current keymap for key binding
+ commands. Acceptable `keymap' names are `emacs',
+ `emacs-standard', `emacs-meta', `emacs-ctlx', `vi', `vi-move',
+ `vi-command', and `vi-insert'. `vi' is equivalent to
+ `vi-command'; `emacs' is equivalent to `emacs-standard'. The
+ default value is `emacs'. The value of the `editing-mode'
+ variable also affects the default keymap.
+
+ `mark-directories'
+ If set to `on', completed directory names have a slash
+ appended. The default is `on'.
+
+ `mark-modified-lines'
+ This variable, when set to `on', causes Readline to display an
+ asterisk (`*') at the start of history lines which have been
+ modified. This variable is `off' by default.
+
+ `mark-symlinked-directories'
+ If set to `on', completed names which are symbolic links to
+ directories have a slash appended (subject to the value of
+ `mark-directories'). The default is `off'.
+
+ `match-hidden-files'
+ This variable, when set to `on', causes Readline to match
+ files whose names begin with a `.' (hidden files) when
+ performing filename completion, unless the leading `.' is
+ supplied by the user in the filename to be completed. This
+ variable is `on' by default.
+
+ `output-meta'
+ If set to `on', Readline will display characters with the
+ eighth bit set directly rather than as a meta-prefixed escape
+ sequence. The default is `off'.
+
+ `page-completions'
+ If set to `on', Readline uses an internal `more'-like pager
+ to display a screenful of possible completions at a time.
+ This variable is `on' by default.
+
+ `print-completions-horizontally'
+ If set to `on', Readline will display completions with matches
+ sorted horizontally in alphabetical order, rather than down
+ the screen. The default is `off'.
+
+ `show-all-if-ambiguous'
+ This alters the default behavior of the completion functions.
+ If set to `on', words which have more than one possible
+ completion cause the matches to be listed immediately instead
+ of ringing the bell. The default value is `off'.
+
+ `show-all-if-unmodified'
+ This alters the default behavior of the completion functions
+ in a fashion similar to SHOW-ALL-IF-AMBIGUOUS. If set to
+ `on', words which have more than one possible completion
+ without any possible partial completion (the possible
+ completions don't share a common prefix) cause the matches to
+ be listed immediately instead of ringing the bell. The
+ default value is `off'.
+
+ `visible-stats'
+ If set to `on', a character denoting a file's type is
+ appended to the filename when listing possible completions.
+ The default is `off'.
+
+
+Key Bindings
+ The syntax for controlling key bindings in the init file is
+ simple. First you need to find the name of the command that you
+ want to change. The following sections contain tables of the
+ command name, the default keybinding, if any, and a short
+ description of what the command does.
+
+ Once you know the name of the command, simply place on a line in
+ the init file the name of the key you wish to bind the command to,
+ a colon, and then the name of the command. The name of the key
+ can be expressed in different ways, depending on what you find most
+ comfortable.
+
+ In addition to command names, readline allows keys to be bound to
+ a string that is inserted when the key is pressed (a MACRO).
+
+ KEYNAME: FUNCTION-NAME or MACRO
+ KEYNAME is the name of a key spelled out in English. For
+ example:
+ Control-u: universal-argument
+ Meta-Rubout: backward-kill-word
+ Control-o: "> output"
+
+ In the above example, `C-u' is bound to the function
+ `universal-argument', `M-DEL' is bound to the function
+ `backward-kill-word', and `C-o' is bound to run the macro
+ expressed on the right hand side (that is, to insert the text
+ `> output' into the line).
+
+ A number of symbolic character names are recognized while
+ processing this key binding syntax: DEL, ESC, ESCAPE, LFD,
+ NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB.
+
+ "KEYSEQ": FUNCTION-NAME or MACRO
+ KEYSEQ differs from KEYNAME above in that strings denoting an
+ entire key sequence can be specified, by placing the key
+ sequence in double quotes. Some GNU Emacs style key escapes
+ can be used, as in the following example, but the special
+ character names are not recognized.
+
+ "\C-u": universal-argument
+ "\C-x\C-r": re-read-init-file
+ "\e[11~": "Function Key 1"
+
+ In the above example, `C-u' is again bound to the function
+ `universal-argument' (just as it was in the first example),
+ `C-x C-r' is bound to the function `re-read-init-file', and
+ `<ESC> <[> <1> <1> <~>' is bound to insert the text `Function
+ Key 1'.
+
+
+ The following GNU Emacs style escape sequences are available when
+ specifying key sequences:
+
+ `\C-'
+ control prefix
+
+ `\M-'
+ meta prefix
+
+ `\e'
+ an escape character
+
+ `\\'
+ backslash
+
+ `\"'
+ <">, a double quotation mark
+
+ `\''
+ <'>, a single quote or apostrophe
+
+ In addition to the GNU Emacs style escape sequences, a second set
+ of backslash escapes is available:
+
+ `\a'
+ alert (bell)
+
+ `\b'
+ backspace
+
+ `\d'
+ delete
+
+ `\f'
+ form feed
+
+ `\n'
+ newline
+
+ `\r'
+ carriage return
+
+ `\t'
+ horizontal tab
+
+ `\v'
+ vertical tab
+
+ `\NNN'
+ the eight-bit character whose value is the octal value NNN
+ (one to three digits)
+
+ `\xHH'
+ the eight-bit character whose value is the hexadecimal value
+ HH (one or two hex digits)
+
+ When entering the text of a macro, single or double quotes must be
+ used to indicate a macro definition. Unquoted text is assumed to
+ be a function name. In the macro body, the backslash escapes
+ described above are expanded. Backslash will quote any other
+ character in the macro text, including `"' and `''. For example,
+ the following binding will make `C-x \' insert a single `\' into
+ the line:
+ "\C-x\\": "\\"
+
+
+
+File: gdb.info, Node: Conditional Init Constructs, Next: Sample Init File, Prev: Readline Init File Syntax, Up: Readline Init File
+
+31.3.2 Conditional Init Constructs
+----------------------------------
+
+Readline implements a facility similar in spirit to the conditional
+compilation features of the C preprocessor which allows key bindings
+and variable settings to be performed as the result of tests. There
+are four parser directives used.
+
+`$if'
+ The `$if' construct allows bindings to be made based on the
+ editing mode, the terminal being used, or the application using
+ Readline. The text of the test extends to the end of the line; no
+ characters are required to isolate it.
+
+ `mode'
+ The `mode=' form of the `$if' directive is used to test
+ whether Readline is in `emacs' or `vi' mode. This may be
+ used in conjunction with the `set keymap' command, for
+ instance, to set bindings in the `emacs-standard' and
+ `emacs-ctlx' keymaps only if Readline is starting out in
+ `emacs' mode.
+
+ `term'
+ The `term=' form may be used to include terminal-specific key
+ bindings, perhaps to bind the key sequences output by the
+ terminal's function keys. The word on the right side of the
+ `=' is tested against both the full name of the terminal and
+ the portion of the terminal name before the first `-'. This
+ allows `sun' to match both `sun' and `sun-cmd', for instance.
+
+ `application'
+ The APPLICATION construct is used to include
+ application-specific settings. Each program using the
+ Readline library sets the APPLICATION NAME, and you can test
+ for a particular value. This could be used to bind key
+ sequences to functions useful for a specific program. For
+ instance, the following command adds a key sequence that
+ quotes the current or previous word in Bash:
+ $if Bash
+ # Quote the current or previous word
+ "\C-xq": "\eb\"\ef\""
+ $endif
+
+`$endif'
+ This command, as seen in the previous example, terminates an `$if'
+ command.
+
+`$else'
+ Commands in this branch of the `$if' directive are executed if the
+ test fails.
+
+`$include'
+ This directive takes a single filename as an argument and reads
+ commands and bindings from that file. For example, the following
+ directive reads from `/etc/inputrc':
+ $include /etc/inputrc
+
+
+File: gdb.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File
+
+31.3.3 Sample Init File
+-----------------------
+
+Here is an example of an INPUTRC file. This illustrates key binding,
+variable assignment, and conditional syntax.
+
+
+ # This file controls the behaviour of line input editing for
+ # programs that use the GNU Readline library. Existing
+ # programs include FTP, Bash, and GDB.
+ #
+ # You can re-read the inputrc file with C-x C-r.
+ # Lines beginning with '#' are comments.
+ #
+ # First, include any systemwide bindings and variable
+ # assignments from /etc/Inputrc
+ $include /etc/Inputrc
+
+ #
+ # Set various bindings for emacs mode.
+
+ set editing-mode emacs
+
+ $if mode=emacs
+
+ Meta-Control-h: backward-kill-word Text after the function name is ignored
+
+ #
+ # Arrow keys in keypad mode
+ #
+ #"\M-OD": backward-char
+ #"\M-OC": forward-char
+ #"\M-OA": previous-history
+ #"\M-OB": next-history
+ #
+ # Arrow keys in ANSI mode
+ #
+ "\M-[D": backward-char
+ "\M-[C": forward-char
+ "\M-[A": previous-history
+ "\M-[B": next-history
+ #
+ # Arrow keys in 8 bit keypad mode
+ #
+ #"\M-\C-OD": backward-char
+ #"\M-\C-OC": forward-char
+ #"\M-\C-OA": previous-history
+ #"\M-\C-OB": next-history
+ #
+ # Arrow keys in 8 bit ANSI mode
+ #
+ #"\M-\C-[D": backward-char
+ #"\M-\C-[C": forward-char
+ #"\M-\C-[A": previous-history
+ #"\M-\C-[B": next-history
+
+ C-q: quoted-insert
+
+ $endif
+
+ # An old-style binding. This happens to be the default.
+ TAB: complete
+
+ # Macros that are convenient for shell interaction
+ $if Bash
+ # edit the path
+ "\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
+ # prepare to type a quoted word --
+ # insert open and close double quotes
+ # and move to just after the open quote
+ "\C-x\"": "\"\"\C-b"
+ # insert a backslash (testing backslash escapes
+ # in sequences and macros)
+ "\C-x\\": "\\"
+ # Quote the current or previous word
+ "\C-xq": "\eb\"\ef\""
+ # Add a binding to refresh the line, which is unbound
+ "\C-xr": redraw-current-line
+ # Edit variable on current line.
+ "\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
+ $endif
+
+ # use a visible bell if one is available
+ set bell-style visible
+
+ # don't strip characters to 7 bits when reading
+ set input-meta on
+
+ # allow iso-latin1 characters to be inserted rather
+ # than converted to prefix-meta sequences
+ set convert-meta off
+
+ # display characters with the eighth bit set directly
+ # rather than as meta-prefixed characters
+ set output-meta on
+
+ # if there are more than 150 possible completions for
+ # a word, ask the user if he wants to see all of them
+ set completion-query-items 150
+
+ # For FTP
+ $if Ftp
+ "\C-xg": "get \M-?"
+ "\C-xt": "put \M-?"
+ "\M-.": yank-last-arg
+ $endif
+
+
+File: gdb.info, Node: Bindable Readline Commands, Next: Readline vi Mode, Prev: Readline Init File, Up: Command Line Editing
+
+31.4 Bindable Readline Commands
+===============================
+
+* Menu:
+
+* Commands For Moving:: Moving about the line.
+* Commands For History:: Getting at previous lines.
+* Commands For Text:: Commands for changing text.
+* Commands For Killing:: Commands for killing and yanking.
+* Numeric Arguments:: Specifying numeric arguments, repeat counts.
+* Commands For Completion:: Getting Readline to do the typing for you.
+* Keyboard Macros:: Saving and re-executing typed characters
+* Miscellaneous Commands:: Other miscellaneous commands.
+
+ This section describes Readline commands that may be bound to key
+sequences. Command names without an accompanying key sequence are
+unbound by default.
+
+ In the following descriptions, "point" refers to the current cursor
+position, and "mark" refers to a cursor position saved by the
+`set-mark' command. The text between the point and mark is referred to
+as the "region".
+
+
+File: gdb.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands
+
+31.4.1 Commands For Moving
+--------------------------
+
+`beginning-of-line (C-a)'
+ Move to the start of the current line.
+
+`end-of-line (C-e)'
+ Move to the end of the line.
+
+`forward-char (C-f)'
+ Move forward a character.
+
+`backward-char (C-b)'
+ Move back a character.
+
+`forward-word (M-f)'
+ Move forward to the end of the next word. Words are composed of
+ letters and digits.
+
+`backward-word (M-b)'
+ Move back to the start of the current or previous word. Words are
+ composed of letters and digits.
+
+`clear-screen (C-l)'
+ Clear the screen and redraw the current line, leaving the current
+ line at the top of the screen.
+
+`redraw-current-line ()'
+ Refresh the current line. By default, this is unbound.
+
+
+
+File: gdb.info, Node: Commands For History, Next: Commands For Text, Prev: Commands For Moving, Up: Bindable Readline Commands
+
+31.4.2 Commands For Manipulating The History
+--------------------------------------------
+
+`accept-line (Newline or Return)'
+ Accept the line regardless of where the cursor is. If this line is
+ non-empty, it may be added to the history list for future recall
+ with `add_history()'. If this line is a modified history line,
+ the history line is restored to its original state.
+
+`previous-history (C-p)'
+ Move `back' through the history list, fetching the previous
+ command.
+
+`next-history (C-n)'
+ Move `forward' through the history list, fetching the next command.
+
+`beginning-of-history (M-<)'
+ Move to the first line in the history.
+
+`end-of-history (M->)'
+ Move to the end of the input history, i.e., the line currently
+ being entered.
+
+`reverse-search-history (C-r)'
+ Search backward starting at the current line and moving `up'
+ through the history as necessary. This is an incremental search.
+
+`forward-search-history (C-s)'
+ Search forward starting at the current line and moving `down'
+ through the the history as necessary. This is an incremental
+ search.
+
+`non-incremental-reverse-search-history (M-p)'
+ Search backward starting at the current line and moving `up'
+ through the history as necessary using a non-incremental search
+ for a string supplied by the user.
+
+`non-incremental-forward-search-history (M-n)'
+ Search forward starting at the current line and moving `down'
+ through the the history as necessary using a non-incremental search
+ for a string supplied by the user.
+
+`history-search-forward ()'
+ Search forward through the history for the string of characters
+ between the start of the current line and the point. This is a
+ non-incremental search. By default, this command is unbound.
+
+`history-search-backward ()'
+ Search backward through the history for the string of characters
+ between the start of the current line and the point. This is a
+ non-incremental search. By default, this command is unbound.
+
+`yank-nth-arg (M-C-y)'
+ Insert the first argument to the previous command (usually the
+ second word on the previous line) at point. With an argument N,
+ insert the Nth word from the previous command (the words in the
+ previous command begin with word 0). A negative argument inserts
+ the Nth word from the end of the previous command. Once the
+ argument N is computed, the argument is extracted as if the `!N'
+ history expansion had been specified.
+
+`yank-last-arg (M-. or M-_)'
+ Insert last argument to the previous command (the last word of the
+ previous history entry). With an argument, behave exactly like
+ `yank-nth-arg'. Successive calls to `yank-last-arg' move back
+ through the history list, inserting the last argument of each line
+ in turn. The history expansion facilities are used to extract the
+ last argument, as if the `!$' history expansion had been specified.
+
+
+
+File: gdb.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands
+
+31.4.3 Commands For Changing Text
+---------------------------------
+
+`delete-char (C-d)'
+ Delete the character at point. If point is at the beginning of
+ the line, there are no characters in the line, and the last
+ character typed was not bound to `delete-char', then return EOF.
+
+`backward-delete-char (Rubout)'
+ Delete the character behind the cursor. A numeric argument means
+ to kill the characters instead of deleting them.
+
+`forward-backward-delete-char ()'
+ Delete the character under the cursor, unless the cursor is at the
+ end of the line, in which case the character behind the cursor is
+ deleted. By default, this is not bound to a key.
+
+`quoted-insert (C-q or C-v)'
+ Add the next character typed to the line verbatim. This is how to
+ insert key sequences like `C-q', for example.
+
+`tab-insert (M-<TAB>)'
+ Insert a tab character.
+
+`self-insert (a, b, A, 1, !, ...)'
+ Insert yourself.
+
+`transpose-chars (C-t)'
+ Drag the character before the cursor forward over the character at
+ the cursor, moving the cursor forward as well. If the insertion
+ point is at the end of the line, then this transposes the last two
+ characters of the line. Negative arguments have no effect.
+
+`transpose-words (M-t)'
+ Drag the word before point past the word after point, moving point
+ past that word as well. If the insertion point is at the end of
+ the line, this transposes the last two words on the line.
+
+`upcase-word (M-u)'
+ Uppercase the current (or following) word. With a negative
+ argument, uppercase the previous word, but do not move the cursor.
+
+`downcase-word (M-l)'
+ Lowercase the current (or following) word. With a negative
+ argument, lowercase the previous word, but do not move the cursor.
+
+`capitalize-word (M-c)'
+ Capitalize the current (or following) word. With a negative
+ argument, capitalize the previous word, but do not move the cursor.
+
+`overwrite-mode ()'
+ Toggle overwrite mode. With an explicit positive numeric argument,
+ switches to overwrite mode. With an explicit non-positive numeric
+ argument, switches to insert mode. This command affects only
+ `emacs' mode; `vi' mode does overwrite differently. Each call to
+ `readline()' starts in insert mode.
+
+ In overwrite mode, characters bound to `self-insert' replace the
+ text at point rather than pushing the text to the right.
+ Characters bound to `backward-delete-char' replace the character
+ before point with a space.
+
+ By default, this command is unbound.
+
+
+
+File: gdb.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands
+
+31.4.4 Killing And Yanking
+--------------------------
+
+`kill-line (C-k)'
+ Kill the text from point to the end of the line.
+
+`backward-kill-line (C-x Rubout)'
+ Kill backward to the beginning of the line.
+
+`unix-line-discard (C-u)'
+ Kill backward from the cursor to the beginning of the current line.
+
+`kill-whole-line ()'
+ Kill all characters on the current line, no matter where point is.
+ By default, this is unbound.
+
+`kill-word (M-d)'
+ Kill from point to the end of the current word, or if between
+ words, to the end of the next word. Word boundaries are the same
+ as `forward-word'.
+
+`backward-kill-word (M-<DEL>)'
+ Kill the word behind point. Word boundaries are the same as
+ `backward-word'.
+
+`unix-word-rubout (C-w)'
+ Kill the word behind point, using white space as a word boundary.
+ The killed text is saved on the kill-ring.
+
+`unix-filename-rubout ()'
+ Kill the word behind point, using white space and the slash
+ character as the word boundaries. The killed text is saved on the
+ kill-ring.
+
+`delete-horizontal-space ()'
+ Delete all spaces and tabs around point. By default, this is
+ unbound.
+
+`kill-region ()'
+ Kill the text in the current region. By default, this command is
+ unbound.
+
+`copy-region-as-kill ()'
+ Copy the text in the region to the kill buffer, so it can be yanked
+ right away. By default, this command is unbound.
+
+`copy-backward-word ()'
+ Copy the word before point to the kill buffer. The word
+ boundaries are the same as `backward-word'. By default, this
+ command is unbound.
+
+`copy-forward-word ()'
+ Copy the word following point to the kill buffer. The word
+ boundaries are the same as `forward-word'. By default, this
+ command is unbound.
+
+`yank (C-y)'
+ Yank the top of the kill ring into the buffer at point.
+
+`yank-pop (M-y)'
+ Rotate the kill-ring, and yank the new top. You can only do this
+ if the prior command is `yank' or `yank-pop'.
+
+
+File: gdb.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands
+
+31.4.5 Specifying Numeric Arguments
+-----------------------------------
+
+`digit-argument (M-0, M-1, ... M--)'
+ Add this digit to the argument already accumulating, or start a new
+ argument. `M--' starts a negative argument.
+
+`universal-argument ()'
+ This is another way to specify an argument. If this command is
+ followed by one or more digits, optionally with a leading minus
+ sign, those digits define the argument. If the command is
+ followed by digits, executing `universal-argument' again ends the
+ numeric argument, but is otherwise ignored. As a special case, if
+ this command is immediately followed by a character that is
+ neither a digit or minus sign, the argument count for the next
+ command is multiplied by four. The argument count is initially
+ one, so executing this function the first time makes the argument
+ count four, a second time makes the argument count sixteen, and so
+ on. By default, this is not bound to a key.
+
+
+File: gdb.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: Numeric Arguments, Up: Bindable Readline Commands
+
+31.4.6 Letting Readline Type For You
+------------------------------------
+
+`complete (<TAB>)'
+ Attempt to perform completion on the text before point. The
+ actual completion performed is application-specific. The default
+ is filename completion.
+
+`possible-completions (M-?)'
+ List the possible completions of the text before point.
+
+`insert-completions (M-*)'
+ Insert all completions of the text before point that would have
+ been generated by `possible-completions'.
+
+`menu-complete ()'
+ Similar to `complete', but replaces the word to be completed with
+ a single match from the list of possible completions. Repeated
+ execution of `menu-complete' steps through the list of possible
+ completions, inserting each match in turn. At the end of the list
+ of completions, the bell is rung (subject to the setting of
+ `bell-style') and the original text is restored. An argument of N
+ moves N positions forward in the list of matches; a negative
+ argument may be used to move backward through the list. This
+ command is intended to be bound to <TAB>, but is unbound by
+ default.
+
+`delete-char-or-list ()'
+ Deletes the character under the cursor if not at the beginning or
+ end of the line (like `delete-char'). If at the end of the line,
+ behaves identically to `possible-completions'. This command is
+ unbound by default.
+
+
+
+File: gdb.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: Commands For Completion, Up: Bindable Readline Commands
+
+31.4.7 Keyboard Macros
+----------------------
+
+`start-kbd-macro (C-x ()'
+ Begin saving the characters typed into the current keyboard macro.
+
+`end-kbd-macro (C-x ))'
+ Stop saving the characters typed into the current keyboard macro
+ and save the definition.
+
+`call-last-kbd-macro (C-x e)'
+ Re-execute the last keyboard macro defined, by making the
+ characters in the macro appear as if typed at the keyboard.
+
+
+
+File: gdb.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bindable Readline Commands
+
+31.4.8 Some Miscellaneous Commands
+----------------------------------
+
+`re-read-init-file (C-x C-r)'
+ Read in the contents of the INPUTRC file, and incorporate any
+ bindings or variable assignments found there.
+
+`abort (C-g)'
+ Abort the current editing command and ring the terminal's bell
+ (subject to the setting of `bell-style').
+
+`do-uppercase-version (M-a, M-b, M-X, ...)'
+ If the metafied character X is lowercase, run the command that is
+ bound to the corresponding uppercase character.
+
+`prefix-meta (<ESC>)'
+ Metafy the next character typed. This is for keyboards without a
+ meta key. Typing `<ESC> f' is equivalent to typing `M-f'.
+
+`undo (C-_ or C-x C-u)'
+ Incremental undo, separately remembered for each line.
+
+`revert-line (M-r)'
+ Undo all changes made to this line. This is like executing the
+ `undo' command enough times to get back to the beginning.
+
+`tilde-expand (M-~)'
+ Perform tilde expansion on the current word.
+
+`set-mark (C-@)'
+ Set the mark to the point. If a numeric argument is supplied, the
+ mark is set to that position.
+
+`exchange-point-and-mark (C-x C-x)'
+ Swap the point with the mark. The current cursor position is set
+ to the saved position, and the old cursor position is saved as the
+ mark.
+
+`character-search (C-])'
+ A character is read and point is moved to the next occurrence of
+ that character. A negative count searches for previous
+ occurrences.
+
+`character-search-backward (M-C-])'
+ A character is read and point is moved to the previous occurrence
+ of that character. A negative count searches for subsequent
+ occurrences.
+
+`insert-comment (M-#)'
+ Without a numeric argument, the value of the `comment-begin'
+ variable is inserted at the beginning of the current line. If a
+ numeric argument is supplied, this command acts as a toggle: if
+ the characters at the beginning of the line do not match the value
+ of `comment-begin', the value is inserted, otherwise the
+ characters in `comment-begin' are deleted from the beginning of
+ the line. In either case, the line is accepted as if a newline
+ had been typed.
+
+`dump-functions ()'
+ Print all of the functions and their key bindings to the Readline
+ output stream. If a numeric argument is supplied, the output is
+ formatted in such a way that it can be made part of an INPUTRC
+ file. This command is unbound by default.
+
+`dump-variables ()'
+ Print all of the settable variables and their values to the
+ Readline output stream. If a numeric argument is supplied, the
+ output is formatted in such a way that it can be made part of an
+ INPUTRC file. This command is unbound by default.
+
+`dump-macros ()'
+ Print all of the Readline key sequences bound to macros and the
+ strings they output. If a numeric argument is supplied, the
+ output is formatted in such a way that it can be made part of an
+ INPUTRC file. This command is unbound by default.
+
+`emacs-editing-mode (C-e)'
+ When in `vi' command mode, this causes a switch to `emacs' editing
+ mode.
+
+`vi-editing-mode (M-C-j)'
+ When in `emacs' editing mode, this causes a switch to `vi' editing
+ mode.
+
+
+
+File: gdb.info, Node: Readline vi Mode, Prev: Bindable Readline Commands, Up: Command Line Editing
+
+31.5 Readline vi Mode
+=====================
+
+While the Readline library does not have a full set of `vi' editing
+functions, it does contain enough to allow simple editing of the line.
+The Readline `vi' mode behaves as specified in the POSIX 1003.2
+standard.
+
+ In order to switch interactively between `emacs' and `vi' editing
+modes, use the command `M-C-j' (bound to emacs-editing-mode when in
+`vi' mode and to vi-editing-mode in `emacs' mode). The Readline
+default is `emacs' mode.
+
+ When you enter a line in `vi' mode, you are already placed in
+`insertion' mode, as if you had typed an `i'. Pressing <ESC> switches
+you into `command' mode, where you can edit the text of the line with
+the standard `vi' movement keys, move to previous history lines with
+`k' and subsequent lines with `j', and so forth.
+
+
+File: gdb.info, Node: Using History Interactively, Next: In Memoriam, Prev: Command Line Editing, Up: Top
+
+32 Using History Interactively
+******************************
+
+This chapter describes how to use the GNU History Library interactively,
+from a user's standpoint. It should be considered a user's guide. For
+information on using the GNU History Library in other programs, see the
+GNU Readline Library Manual.
+
+* Menu:
+
+* History Interaction:: What it feels like using History as a user.
+
+
+File: gdb.info, Node: History Interaction, Up: Using History Interactively
+
+32.1 History Expansion
+======================
+
+The History library provides a history expansion feature that is similar
+to the history expansion provided by `csh'. This section describes the
+syntax used to manipulate the history information.
+
+ History expansions introduce words from the history list into the
+input stream, making it easy to repeat commands, insert the arguments
+to a previous command into the current input line, or fix errors in
+previous commands quickly.
+
+ History expansion takes place in two parts. The first is to
+determine which line from the history list should be used during
+substitution. The second is to select portions of that line for
+inclusion into the current one. The line selected from the history is
+called the "event", and the portions of that line that are acted upon
+are called "words". Various "modifiers" are available to manipulate
+the selected words. The line is broken into words in the same fashion
+that Bash does, so that several words surrounded by quotes are
+considered one word. History expansions are introduced by the
+appearance of the history expansion character, which is `!' by default.
+
+* Menu:
+
+* Event Designators:: How to specify which history line to use.
+* Word Designators:: Specifying which words are of interest.
+* Modifiers:: Modifying the results of substitution.
+
+
+File: gdb.info, Node: Event Designators, Next: Word Designators, Up: History Interaction
+
+32.1.1 Event Designators
+------------------------
+
+An event designator is a reference to a command line entry in the
+history list.
+
+`!'
+ Start a history substitution, except when followed by a space, tab,
+ the end of the line, or `='.
+
+`!N'
+ Refer to command line N.
+
+`!-N'
+ Refer to the command N lines back.
+
+`!!'
+ Refer to the previous command. This is a synonym for `!-1'.
+
+`!STRING'
+ Refer to the most recent command starting with STRING.
+
+`!?STRING[?]'
+ Refer to the most recent command containing STRING. The trailing
+ `?' may be omitted if the STRING is followed immediately by a
+ newline.
+
+`^STRING1^STRING2^'
+ Quick Substitution. Repeat the last command, replacing STRING1
+ with STRING2. Equivalent to `!!:s/STRING1/STRING2/'.
+
+`!#'
+ The entire command line typed so far.
+
+
+
+File: gdb.info, Node: Word Designators, Next: Modifiers, Prev: Event Designators, Up: History Interaction
+
+32.1.2 Word Designators
+-----------------------
+
+Word designators are used to select desired words from the event. A
+`:' separates the event specification from the word designator. It may
+be omitted if the word designator begins with a `^', `$', `*', `-', or
+`%'. Words are numbered from the beginning of the line, with the first
+word being denoted by 0 (zero). Words are inserted into the current
+line separated by single spaces.
+
+ For example,
+
+`!!'
+ designates the preceding command. When you type this, the
+ preceding command is repeated in toto.
+
+`!!:$'
+ designates the last argument of the preceding command. This may be
+ shortened to `!$'.
+
+`!fi:2'
+ designates the second argument of the most recent command starting
+ with the letters `fi'.
+
+ Here are the word designators:
+
+`0 (zero)'
+ The `0'th word. For many applications, this is the command word.
+
+`N'
+ The Nth word.
+
+`^'
+ The first argument; that is, word 1.
+
+`$'
+ The last argument.
+
+`%'
+ The word matched by the most recent `?STRING?' search.
+
+`X-Y'
+ A range of words; `-Y' abbreviates `0-Y'.
+
+`*'
+ All of the words, except the `0'th. This is a synonym for `1-$'.
+ It is not an error to use `*' if there is just one word in the
+ event; the empty string is returned in that case.
+
+`X*'
+ Abbreviates `X-$'
+
+`X-'
+ Abbreviates `X-$' like `X*', but omits the last word.
+
+
+ If a word designator is supplied without an event specification, the
+previous command is used as the event.
+
+
+File: gdb.info, Node: Modifiers, Prev: Word Designators, Up: History Interaction
+
+32.1.3 Modifiers
+----------------
+
+After the optional word designator, you can add a sequence of one or
+more of the following modifiers, each preceded by a `:'.
+
+`h'
+ Remove a trailing pathname component, leaving only the head.
+
+`t'
+ Remove all leading pathname components, leaving the tail.
+
+`r'
+ Remove a trailing suffix of the form `.SUFFIX', leaving the
+ basename.
+
+`e'
+ Remove all but the trailing suffix.
+
+`p'
+ Print the new command but do not execute it.
+
+`s/OLD/NEW/'
+ Substitute NEW for the first occurrence of OLD in the event line.
+ Any delimiter may be used in place of `/'. The delimiter may be
+ quoted in OLD and NEW with a single backslash. If `&' appears in
+ NEW, it is replaced by OLD. A single backslash will quote the
+ `&'. The final delimiter is optional if it is the last character
+ on the input line.
+
+`&'
+ Repeat the previous substitution.
+
+`g'
+`a'
+ Cause changes to be applied over the entire event line. Used in
+ conjunction with `s', as in `gs/OLD/NEW/', or with `&'.
+
+`G'
+ Apply the following `s' modifier once to each word in the event.
+
+
+
+File: gdb.info, Node: In Memoriam, Next: Formatting Documentation, Prev: Using History Interactively, Up: Top
+
+Appendix A In Memoriam
+**********************
+
+The GDB project mourns the loss of the following long-time contributors:
+
+`Fred Fish'
+ Fred was a long-standing contributor to GDB (1991-2006), and to
+ Free Software in general. Outside of GDB, he was known in the
+ Amiga world for his series of Fish Disks, and the GeekGadget
+ project.
+
+`Michael Snyder'
+ Michael was one of the Global Maintainers of the GDB project, with
+ contributions recorded as early as 1996, until 2011. In addition
+ to his day to day participation, he was a large driving force
+ behind adding Reverse Debugging to GDB.
+
+ Beyond their technical contributions to the project, they were also
+enjoyable members of the Free Software Community. We will miss them.
+
+
+File: gdb.info, Node: Formatting Documentation, Next: Installing GDB, Prev: In Memoriam, Up: Top
+
+Appendix B Formatting Documentation
+***********************************
+
+The GDB 4 release includes an already-formatted reference card, ready
+for printing with PostScript or Ghostscript, in the `gdb' subdirectory
+of the main source directory(1). If you can use PostScript or
+Ghostscript with your printer, you can print the reference card
+immediately with `refcard.ps'.
+
+ The release also includes the source for the reference card. You
+can format it, using TeX, by typing:
+
+ make refcard.dvi
+
+ The GDB reference card is designed to print in "landscape" mode on
+US "letter" size paper; that is, on a sheet 11 inches wide by 8.5 inches
+high. You will need to specify this form of printing as an option to
+your DVI output program.
+
+ All the documentation for GDB comes as part of the machine-readable
+distribution. The documentation is written in Texinfo format, which is
+a documentation system that uses a single source file to produce both
+on-line information and a printed manual. You can use one of the Info
+formatting commands to create the on-line version of the documentation
+and TeX (or `texi2roff') to typeset the printed version.
+
+ GDB includes an already formatted copy of the on-line Info version
+of this manual in the `gdb' subdirectory. The main Info file is
+`gdb-7.3.1-gg2/gdb/gdb.info', and it refers to subordinate files
+matching `gdb.info*' in the same directory. If necessary, you can
+print out these files, or read them with any editor; but they are
+easier to read using the `info' subsystem in GNU Emacs or the
+standalone `info' program, available as part of the GNU Texinfo
+distribution.
+
+ If you want to format these Info files yourself, you need one of the
+Info formatting programs, such as `texinfo-format-buffer' or `makeinfo'.
+
+ If you have `makeinfo' installed, and are in the top level GDB
+source directory (`gdb-7.3.1-gg2', in the case of version 7.3.1-gg2),
+you can make the Info file by typing:
+
+ cd gdb
+ make gdb.info
+
+ If you want to typeset and print copies of this manual, you need TeX,
+a program to print its DVI output files, and `texinfo.tex', the Texinfo
+definitions file.
+
+ TeX is a typesetting program; it does not print files directly, but
+produces output files called DVI files. To print a typeset document,
+you need a program to print DVI files. If your system has TeX
+installed, chances are it has such a program. The precise command to
+use depends on your system; `lpr -d' is common; another (for PostScript
+devices) is `dvips'. The DVI print command may require a file name
+without any extension or a `.dvi' extension.
+
+ TeX also requires a macro definitions file called `texinfo.tex'.
+This file tells TeX how to typeset a document written in Texinfo
+format. On its own, TeX cannot either read or typeset a Texinfo file.
+`texinfo.tex' is distributed with GDB and is located in the
+`gdb-VERSION-NUMBER/texinfo' directory.
+
+ If you have TeX and a DVI printer program installed, you can typeset
+and print this manual. First switch to the `gdb' subdirectory of the
+main source directory (for example, to `gdb-7.3.1-gg2/gdb') and type:
+
+ make gdb.dvi
+
+ Then give `gdb.dvi' to your DVI printing program.
+
+ ---------- Footnotes ----------
+
+ (1) In `gdb-7.3.1-gg2/gdb/refcard.ps' of the version 7.3.1-gg2
+release.
+
+
+File: gdb.info, Node: Installing GDB, Next: Maintenance Commands, Prev: Formatting Documentation, Up: Top
+
+Appendix C Installing GDB
+*************************
+
+* Menu:
+
+* Requirements:: Requirements for building GDB
+* Running Configure:: Invoking the GDB `configure' script
+* Separate Objdir:: Compiling GDB in another directory
+* Config Names:: Specifying names for hosts and targets
+* Configure Options:: Summary of options for configure
+* System-wide configuration:: Having a system-wide init file
+
+
+File: gdb.info, Node: Requirements, Next: Running Configure, Up: Installing GDB
+
+C.1 Requirements for Building GDB
+=================================
+
+Building GDB requires various tools and packages to be available.
+Other packages will be used only if they are found.
+
+Tools/Packages Necessary for Building GDB
+=========================================
+
+ISO C90 compiler
+ GDB is written in ISO C90. It should be buildable with any
+ working C90 compiler, e.g. GCC.
+
+
+Tools/Packages Optional for Building GDB
+========================================
+
+Expat
+ GDB can use the Expat XML parsing library. This library may be
+ included with your operating system distribution; if it is not, you
+ can get the latest version from `http://expat.sourceforge.net'.
+ The `configure' script will search for this library in several
+ standard locations; if it is installed in an unusual path, you can
+ use the `--with-libexpat-prefix' option to specify its location.
+
+ Expat is used for:
+
+ * Remote protocol memory maps (*note Memory Map Format::)
+
+ * Target descriptions (*note Target Descriptions::)
+
+ * Remote shared library lists (*note Library List Format::)
+
+ * MS-Windows shared libraries (*note Shared Libraries::)
+
+ * Traceframe info (*note Traceframe Info Format::)
+
+zlib
+ GDB will use the `zlib' library, if available, to read compressed
+ debug sections. Some linkers, such as GNU gold, are capable of
+ producing binaries with compressed debug sections. If GDB is
+ compiled with `zlib', it will be able to read the debug
+ information in such binaries.
+
+ The `zlib' library is likely included with your operating system
+ distribution; if it is not, you can get the latest version from
+ `http://zlib.net'.
+
+iconv
+ GDB's features related to character sets (*note Character Sets::)
+ require a functioning `iconv' implementation. If you are on a GNU
+ system, then this is provided by the GNU C Library. Some other
+ systems also provide a working `iconv'.
+
+ If GDB is using the `iconv' program which is installed in a
+ non-standard place, you will need to tell GDB where to find it.
+ This is done with `--with-iconv-bin' which specifies the directory
+ that contains the `iconv' program.
+
+ On systems without `iconv', you can install GNU Libiconv. If you
+ have previously installed Libiconv, you can use the
+ `--with-libiconv-prefix' option to configure.
+
+ GDB's top-level `configure' and `Makefile' will arrange to build
+ Libiconv if a directory named `libiconv' appears in the top-most
+ source directory. If Libiconv is built this way, and if the
+ operating system does not provide a suitable `iconv'
+ implementation, then the just-built library will automatically be
+ used by GDB. One easy way to set this up is to download GNU
+ Libiconv, unpack it, and then rename the directory holding the
+ Libiconv source code to `libiconv'.
+
+
+File: gdb.info, Node: Running Configure, Next: Separate Objdir, Prev: Requirements, Up: Installing GDB
+
+C.2 Invoking the GDB `configure' Script
+=======================================
+
+GDB comes with a `configure' script that automates the process of
+preparing GDB for installation; you can then use `make' to build the
+`gdb' program.
+
+ The GDB distribution includes all the source code you need for GDB
+in a single directory, whose name is usually composed by appending the
+version number to `gdb'.
+
+ For example, the GDB version 7.3.1-gg2 distribution is in the
+`gdb-7.3.1-gg2' directory. That directory contains:
+
+`gdb-7.3.1-gg2/configure (and supporting files)'
+ script for configuring GDB and all its supporting libraries
+
+`gdb-7.3.1-gg2/gdb'
+ the source specific to GDB itself
+
+`gdb-7.3.1-gg2/bfd'
+ source for the Binary File Descriptor library
+
+`gdb-7.3.1-gg2/include'
+ GNU include files
+
+`gdb-7.3.1-gg2/libiberty'
+ source for the `-liberty' free software library
+
+`gdb-7.3.1-gg2/opcodes'
+ source for the library of opcode tables and disassemblers
+
+`gdb-7.3.1-gg2/readline'
+ source for the GNU command-line interface
+
+`gdb-7.3.1-gg2/glob'
+ source for the GNU filename pattern-matching subroutine
+
+`gdb-7.3.1-gg2/mmalloc'
+ source for the GNU memory-mapped malloc package
+
+ The simplest way to configure and build GDB is to run `configure'
+from the `gdb-VERSION-NUMBER' source directory, which in this example
+is the `gdb-7.3.1-gg2' directory.
+
+ First switch to the `gdb-VERSION-NUMBER' source directory if you are
+not already in it; then run `configure'. Pass the identifier for the
+platform on which GDB will run as an argument.
+
+ For example:
+
+ cd gdb-7.3.1-gg2
+ ./configure HOST
+ make
+
+where HOST is an identifier such as `sun4' or `decstation', that
+identifies the platform where GDB will run. (You can often leave off
+HOST; `configure' tries to guess the correct value by examining your
+system.)
+
+ Running `configure HOST' and then running `make' builds the `bfd',
+`readline', `mmalloc', and `libiberty' libraries, then `gdb' itself.
+The configured source files, and the binaries, are left in the
+corresponding source directories.
+
+ `configure' is a Bourne-shell (`/bin/sh') script; if your system
+does not recognize this automatically when you run a different shell,
+you may need to run `sh' on it explicitly:
+
+ sh configure HOST
+
+ If you run `configure' from a directory that contains source
+directories for multiple libraries or programs, such as the
+`gdb-7.3.1-gg2' source directory for version 7.3.1-gg2, `configure'
+creates configuration files for every directory level underneath (unless
+you tell it not to, with the `--norecursion' option).
+
+ You should run the `configure' script from the top directory in the
+source tree, the `gdb-VERSION-NUMBER' directory. If you run
+`configure' from one of the subdirectories, you will configure only
+that subdirectory. That is usually not what you want. In particular,
+if you run the first `configure' from the `gdb' subdirectory of the
+`gdb-VERSION-NUMBER' directory, you will omit the configuration of
+`bfd', `readline', and other sibling directories of the `gdb'
+subdirectory. This leads to build errors about missing include files
+such as `bfd/bfd.h'.
+
+ You can install `gdb' anywhere; it has no hardwired paths. However,
+you should make sure that the shell on your path (named by the `SHELL'
+environment variable) is publicly readable. Remember that GDB uses the
+shell to start your program--some systems refuse to let GDB debug child
+processes whose programs are not readable.
+
+
+File: gdb.info, Node: Separate Objdir, Next: Config Names, Prev: Running Configure, Up: Installing GDB
+
+C.3 Compiling GDB in Another Directory
+======================================
+
+If you want to run GDB versions for several host or target machines,
+you need a different `gdb' compiled for each combination of host and
+target. `configure' is designed to make this easy by allowing you to
+generate each configuration in a separate subdirectory, rather than in
+the source directory. If your `make' program handles the `VPATH'
+feature (GNU `make' does), running `make' in each of these directories
+builds the `gdb' program specified there.
+
+ To build `gdb' in a separate directory, run `configure' with the
+`--srcdir' option to specify where to find the source. (You also need
+to specify a path to find `configure' itself from your working
+directory. If the path to `configure' would be the same as the
+argument to `--srcdir', you can leave out the `--srcdir' option; it is
+assumed.)
+
+ For example, with version 7.3.1-gg2, you can build GDB in a separate
+directory for a Sun 4 like this:
+
+ cd gdb-7.3.1-gg2
+ mkdir ../gdb-sun4
+ cd ../gdb-sun4
+ ../gdb-7.3.1-gg2/configure sun4
+ make
+
+ When `configure' builds a configuration using a remote source
+directory, it creates a tree for the binaries with the same structure
+(and using the same names) as the tree under the source directory. In
+the example, you'd find the Sun 4 library `libiberty.a' in the
+directory `gdb-sun4/libiberty', and GDB itself in `gdb-sun4/gdb'.
+
+ Make sure that your path to the `configure' script has just one
+instance of `gdb' in it. If your path to `configure' looks like
+`../gdb-7.3.1-gg2/gdb/configure', you are configuring only one
+subdirectory of GDB, not the whole package. This leads to build errors
+about missing include files such as `bfd/bfd.h'.
+
+ One popular reason to build several GDB configurations in separate
+directories is to configure GDB for cross-compiling (where GDB runs on
+one machine--the "host"--while debugging programs that run on another
+machine--the "target"). You specify a cross-debugging target by giving
+the `--target=TARGET' option to `configure'.
+
+ When you run `make' to build a program or library, you must run it
+in a configured directory--whatever directory you were in when you
+called `configure' (or one of its subdirectories).
+
+ The `Makefile' that `configure' generates in each source directory
+also runs recursively. If you type `make' in a source directory such
+as `gdb-7.3.1-gg2' (or in a separate configured directory configured
+with `--srcdir=DIRNAME/gdb-7.3.1-gg2'), you will build all the required
+libraries, and then build GDB.
+
+ When you have multiple hosts or targets configured in separate
+directories, you can run `make' on them in parallel (for example, if
+they are NFS-mounted on each of the hosts); they will not interfere
+with each other.
+
+
+File: gdb.info, Node: Config Names, Next: Configure Options, Prev: Separate Objdir, Up: Installing GDB
+
+C.4 Specifying Names for Hosts and Targets
+==========================================
+
+The specifications used for hosts and targets in the `configure' script
+are based on a three-part naming scheme, but some short predefined
+aliases are also supported. The full naming scheme encodes three pieces
+of information in the following pattern:
+
+ ARCHITECTURE-VENDOR-OS
+
+ For example, you can use the alias `sun4' as a HOST argument, or as
+the value for TARGET in a `--target=TARGET' option. The equivalent
+full name is `sparc-sun-sunos4'.
+
+ The `configure' script accompanying GDB does not provide any query
+facility to list all supported host and target names or aliases.
+`configure' calls the Bourne shell script `config.sub' to map
+abbreviations to full names; you can read the script, if you wish, or
+you can use it to test your guesses on abbreviations--for example:
+
+ % sh config.sub i386-linux
+ i386-pc-linux-gnu
+ % sh config.sub alpha-linux
+ alpha-unknown-linux-gnu
+ % sh config.sub hp9k700
+ hppa1.1-hp-hpux
+ % sh config.sub sun4
+ sparc-sun-sunos4.1.1
+ % sh config.sub sun3
+ m68k-sun-sunos4.1.1
+ % sh config.sub i986v
+ Invalid configuration `i986v': machine `i986v' not recognized
+
+`config.sub' is also distributed in the GDB source directory
+(`gdb-7.3.1-gg2', for version 7.3.1-gg2).
+
+
+File: gdb.info, Node: Configure Options, Next: System-wide configuration, Prev: Config Names, Up: Installing GDB
+
+C.5 `configure' Options
+=======================
+
+Here is a summary of the `configure' options and arguments that are
+most often useful for building GDB. `configure' also has several other
+options not listed here. *note (configure.info)What Configure Does::,
+for a full explanation of `configure'.
+
+ configure [--help]
+ [--prefix=DIR]
+ [--exec-prefix=DIR]
+ [--srcdir=DIRNAME]
+ [--norecursion] [--rm]
+ [--target=TARGET]
+ HOST
+
+You may introduce options with a single `-' rather than `--' if you
+prefer; but you may abbreviate option names if you use `--'.
+
+`--help'
+ Display a quick summary of how to invoke `configure'.
+
+`--prefix=DIR'
+ Configure the source to install programs and files under directory
+ `DIR'.
+
+`--exec-prefix=DIR'
+ Configure the source to install programs under directory `DIR'.
+
+`--srcdir=DIRNAME'
+ *Warning: using this option requires GNU `make', or another `make'
+ that implements the `VPATH' feature.*
+ Use this option to make configurations in directories separate
+ from the GDB source directories. Among other things, you can use
+ this to build (or maintain) several configurations simultaneously,
+ in separate directories. `configure' writes
+ configuration-specific files in the current directory, but
+ arranges for them to use the source in the directory DIRNAME.
+ `configure' creates directories under the working directory in
+ parallel to the source directories below DIRNAME.
+
+`--norecursion'
+ Configure only the directory level where `configure' is executed;
+ do not propagate configuration to subdirectories.
+
+`--target=TARGET'
+ Configure GDB for cross-debugging programs running on the specified
+ TARGET. Without this option, GDB is configured to debug programs
+ that run on the same machine (HOST) as GDB itself.
+
+ There is no convenient way to generate a list of all available
+ targets.
+
+`HOST ...'
+ Configure GDB to run on the specified HOST.
+
+ There is no convenient way to generate a list of all available
+ hosts.
+
+ There are many other options available as well, but they are
+generally needed for special purposes only.
+
+
+File: gdb.info, Node: System-wide configuration, Prev: Configure Options, Up: Installing GDB
+
+C.6 System-wide configuration and settings
+==========================================
+
+GDB can be configured to have a system-wide init file; this file will
+be read and executed at startup (*note What GDB does during startup:
+Startup.).
+
+ Here is the corresponding configure option:
+
+`--with-system-gdbinit=FILE'
+ Specify that the default location of the system-wide init file is
+ FILE.
+
+ If GDB has been configured with the option `--prefix=$prefix', it
+may be subject to relocation. Two possible cases:
+
+ * If the default location of this init file contains `$prefix', it
+ will be subject to relocation. Suppose that the configure options
+ are `--prefix=$prefix --with-system-gdbinit=$prefix/etc/gdbinit';
+ if GDB is moved from `$prefix' to `$install', the system init file
+ is looked for as `$install/etc/gdbinit' instead of
+ `$prefix/etc/gdbinit'.
+
+ * By contrast, if the default location does not contain the prefix,
+ it will not be relocated. E.g. if GDB has been configured with
+ `--prefix=/usr/local --with-system-gdbinit=/usr/share/gdb/gdbinit',
+ then GDB will always look for `/usr/share/gdb/gdbinit', wherever
+ GDB is installed.
+
+
+File: gdb.info, Node: Maintenance Commands, Next: Remote Protocol, Prev: Installing GDB, Up: Top
+
+Appendix D Maintenance Commands
+*******************************
+
+In addition to commands intended for GDB users, GDB includes a number
+of commands intended for GDB developers, that are not documented
+elsewhere in this manual. These commands are provided here for
+reference. (For commands that turn on debugging messages, see *note
+Debugging Output::.)
+
+`maint agent EXPRESSION'
+`maint agent-eval EXPRESSION'
+ Translate the given EXPRESSION into remote agent bytecodes. This
+ command is useful for debugging the Agent Expression mechanism
+ (*note Agent Expressions::). The `agent' version produces an
+ expression useful for data collection, such as by tracepoints,
+ while `maint agent-eval' produces an expression that evaluates
+ directly to a result. For instance, a collection expression for
+ `globa + globb' will include bytecodes to record four bytes of
+ memory at each of the addresses of `globa' and `globb', while
+ discarding the result of the addition, while an evaluation
+ expression will do the addition and return the sum.
+
+`maint info breakpoints'
+ Using the same format as `info breakpoints', display both the
+ breakpoints you've set explicitly, and those GDB is using for
+ internal purposes. Internal breakpoints are shown with negative
+ breakpoint numbers. The type column identifies what kind of
+ breakpoint is shown:
+
+ `breakpoint'
+ Normal, explicitly set breakpoint.
+
+ `watchpoint'
+ Normal, explicitly set watchpoint.
+
+ `longjmp'
+ Internal breakpoint, used to handle correctly stepping through
+ `longjmp' calls.
+
+ `longjmp resume'
+ Internal breakpoint at the target of a `longjmp'.
+
+ `until'
+ Temporary internal breakpoint used by the GDB `until' command.
+
+ `finish'
+ Temporary internal breakpoint used by the GDB `finish'
+ command.
+
+ `shlib events'
+ Shared library events.
+
+
+`set displaced-stepping'
+`show displaced-stepping'
+ Control whether or not GDB will do "displaced stepping" if the
+ target supports it. Displaced stepping is a way to single-step
+ over breakpoints without removing them from the inferior, by
+ executing an out-of-line copy of the instruction that was
+ originally at the breakpoint location. It is also known as
+ out-of-line single-stepping.
+
+ `set displaced-stepping on'
+ If the target architecture supports it, GDB will use
+ displaced stepping to step over breakpoints.
+
+ `set displaced-stepping off'
+ GDB will not use displaced stepping to step over breakpoints,
+ even if such is supported by the target architecture.
+
+ `set displaced-stepping auto'
+ This is the default mode. GDB will use displaced stepping
+ only if non-stop mode is active (*note Non-Stop Mode::) and
+ the target architecture supports displaced stepping.
+
+`maint check-symtabs'
+ Check the consistency of psymtabs and symtabs.
+
+`maint cplus first_component NAME'
+ Print the first C++ class/namespace component of NAME.
+
+`maint cplus namespace'
+ Print the list of possible C++ namespaces.
+
+`maint demangle NAME'
+ Demangle a C++ or Objective-C mangled NAME.
+
+`maint deprecate COMMAND [REPLACEMENT]'
+`maint undeprecate COMMAND'
+ Deprecate or undeprecate the named COMMAND. Deprecated commands
+ cause GDB to issue a warning when you use them. The optional
+ argument REPLACEMENT says which newer command should be used in
+ favor of the deprecated one; if it is given, GDB will mention the
+ replacement as part of the warning.
+
+`maint dump-me'
+ Cause a fatal signal in the debugger and force it to dump its core.
+ This is supported only on systems which support aborting a program
+ with the `SIGQUIT' signal.
+
+`maint internal-error [MESSAGE-TEXT]'
+`maint internal-warning [MESSAGE-TEXT]'
+ Cause GDB to call the internal function `internal_error' or
+ `internal_warning' and hence behave as though an internal error or
+ internal warning has been detected. In addition to reporting the
+ internal problem, these functions give the user the opportunity to
+ either quit GDB or create a core file of the current GDB session.
+
+ These commands take an optional parameter MESSAGE-TEXT that is
+ used as the text of the error or warning message.
+
+ Here's an example of using `internal-error':
+
+ (gdb) maint internal-error testing, 1, 2
+ .../maint.c:121: internal-error: testing, 1, 2
+ A problem internal to GDB has been detected. Further
+ debugging may prove unreliable.
+ Quit this debugging session? (y or n) n
+ Create a core file? (y or n) n
+ (gdb)
+
+`maint set internal-error ACTION [ask|yes|no]'
+`maint show internal-error ACTION'
+`maint set internal-warning ACTION [ask|yes|no]'
+`maint show internal-warning ACTION'
+ When GDB reports an internal problem (error or warning) it gives
+ the user the opportunity to both quit GDB and create a core file
+ of the current GDB session. These commands let you override the
+ default behaviour for each particular ACTION, described in the
+ table below.
+
+ `quit'
+ You can specify that GDB should always (yes) or never (no)
+ quit. The default is to ask the user what to do.
+
+ `corefile'
+ You can specify that GDB should always (yes) or never (no)
+ create a core file. The default is to ask the user what to
+ do.
+
+`maint packet TEXT'
+ If GDB is talking to an inferior via the serial protocol, then
+ this command sends the string TEXT to the inferior, and displays
+ the response packet. GDB supplies the initial `$' character, the
+ terminating `#' character, and the checksum.
+
+`maint print architecture [FILE]'
+ Print the entire architecture configuration. The optional argument
+ FILE names the file where the output goes.
+
+`maint print c-tdesc'
+ Print the current target description (*note Target Descriptions::)
+ as a C source file. The created source file can be used in GDB
+ when an XML parser is not available to parse the description.
+
+`maint print dummy-frames'
+ Prints the contents of GDB's internal dummy-frame stack.
+
+ (gdb) b add
+ ...
+ (gdb) print add(2,3)
+ Breakpoint 2, add (a=2, b=3) at ...
+ 58 return (a + b);
+ The program being debugged stopped while in a function called from GDB.
+ ...
+ (gdb) maint print dummy-frames
+ 0x1a57c80: pc=0x01014068 fp=0x0200bddc sp=0x0200bdd6
+ top=0x0200bdd4 id={stack=0x200bddc,code=0x101405c}
+ call_lo=0x01014000 call_hi=0x01014001
+ (gdb)
+
+ Takes an optional file parameter.
+
+`maint print registers [FILE]'
+`maint print raw-registers [FILE]'
+`maint print cooked-registers [FILE]'
+`maint print register-groups [FILE]'
+ Print GDB's internal register data structures.
+
+ The command `maint print raw-registers' includes the contents of
+ the raw register cache; the command `maint print cooked-registers'
+ includes the (cooked) value of all registers, including registers
+ which aren't available on the target nor visible to user; and the
+ command `maint print register-groups' includes the groups that each
+ register is a member of. *Note Registers: (gdbint)Registers.
+
+ These commands take an optional parameter, a file name to which to
+ write the information.
+
+`maint print reggroups [FILE]'
+ Print GDB's internal register group data structures. The optional
+ argument FILE tells to what file to write the information.
+
+ The register groups info looks like this:
+
+ (gdb) maint print reggroups
+ Group Type
+ general user
+ float user
+ all user
+ vector user
+ system user
+ save internal
+ restore internal
+
+`flushregs'
+ This command forces GDB to flush its internal register cache.
+
+`maint print objfiles'
+ Print a dump of all known object files. For each object file, this
+ command prints its name, address in memory, and all of its psymtabs
+ and symtabs.
+
+`maint print section-scripts [REGEXP]'
+ Print a dump of scripts specified in the `.debug_gdb_section'
+ section. If REGEXP is specified, only print scripts loaded by
+ object files matching REGEXP. For each script, this command
+ prints its name as specified in the objfile, and the full path if
+ known. *Note .debug_gdb_scripts section::.
+
+`maint print statistics'
+ This command prints, for each object file in the program, various
+ data about that object file followed by the byte cache ("bcache")
+ statistics for the object file. The objfile data includes the
+ number of minimal, partial, full, and stabs symbols, the number of
+ types defined by the objfile, the number of as yet unexpanded psym
+ tables, the number of line tables and string tables, and the
+ amount of memory used by the various tables. The bcache
+ statistics include the counts, sizes, and counts of duplicates of
+ all and unique objects, max, average, and median entry size, total
+ memory used and its overhead and savings, and various measures of
+ the hash table size and chain lengths.
+
+`maint print target-stack'
+ A "target" is an interface between the debugger and a particular
+ kind of file or process. Targets can be stacked in "strata", so
+ that more than one target can potentially respond to a request.
+ In particular, memory accesses will walk down the stack of targets
+ until they find a target that is interested in handling that
+ particular address.
+
+ This command prints a short description of each layer that was
+ pushed on the "target stack", starting from the top layer down to
+ the bottom one.
+
+`maint print type EXPR'
+ Print the type chain for a type specified by EXPR. The argument
+ can be either a type name or a symbol. If it is a symbol, the
+ type of that symbol is described. The type chain produced by this
+ command is a recursive definition of the data type as stored in
+ GDB's data structures, including its flags and contained types.
+
+`maint set dwarf2 always-disassemble'
+
+`maint show dwarf2 always-disassemble'
+ Control the behavior of `info address' when using DWARF debugging
+ information.
+
+ The default is `off', which means that GDB should try to describe
+ a variable's location in an easily readable format. When `on',
+ GDB will instead display the DWARF location expression in an
+ assembly-like format. Note that some locations are too complex
+ for GDB to describe simply; in this case you will always see the
+ disassembly form.
+
+ Here is an example of the resulting disassembly:
+
+ (gdb) info addr argc
+ Symbol "argc" is a complex DWARF expression:
+ 1: DW_OP_fbreg 0
+
+ For more information on these expressions, see the DWARF standard
+ (http://www.dwarfstd.org/).
+
+`maint set dwarf2 max-cache-age'
+`maint show dwarf2 max-cache-age'
+ Control the DWARF 2 compilation unit cache.
+
+ In object files with inter-compilation-unit references, such as
+ those produced by the GCC option `-feliminate-dwarf2-dups', the
+ DWARF 2 reader needs to frequently refer to previously read
+ compilation units. This setting controls how long a compilation
+ unit will remain in the cache if it is not referenced. A higher
+ limit means that cached compilation units will be stored in memory
+ longer, and more total memory will be used. Setting it to zero
+ disables caching, which will slow down GDB startup, but reduce
+ memory consumption.
+
+`maint set profile'
+`maint show profile'
+ Control profiling of GDB.
+
+ Profiling will be disabled until you use the `maint set profile'
+ command to enable it. When you enable profiling, the system will
+ begin collecting timing and execution count data; when you disable
+ profiling or exit GDB, the results will be written to a log file.
+ Remember that if you use profiling, GDB will overwrite the
+ profiling log file (often called `gmon.out'). If you have a
+ record of important profiling data in a `gmon.out' file, be sure
+ to move it to a safe location.
+
+ Configuring with `--enable-profiling' arranges for GDB to be
+ compiled with the `-pg' compiler option.
+
+`maint set show-debug-regs'
+`maint show show-debug-regs'
+ Control whether to show variables that mirror the hardware debug
+ registers. Use `ON' to enable, `OFF' to disable. If enabled, the
+ debug registers values are shown when GDB inserts or removes a
+ hardware breakpoint or watchpoint, and when the inferior triggers
+ a hardware-assisted breakpoint or watchpoint.
+
+`maint set show-all-tib'
+`maint show show-all-tib'
+ Control whether to show all non zero areas within a 1k block
+ starting at thread local base, when using the `info w32
+ thread-information-block' command.
+
+`maint space'
+ Control whether to display memory usage for each command. If set
+ to a nonzero value, GDB will display how much memory each command
+ took, following the command's own output. This can also be
+ requested by invoking GDB with the `--statistics' command-line
+ switch (*note Mode Options::).
+
+`maint time'
+ Control whether to display the execution time for each command. If
+ set to a nonzero value, GDB will display how much time it took to
+ execute each command, following the command's own output. The
+ time is not printed for the commands that run the target, since
+ there's no mechanism currently to compute how much time was spend
+ by GDB and how much time was spend by the program been debugged.
+ it's not possibly currently This can also be requested by invoking
+ GDB with the `--statistics' command-line switch (*note Mode
+ Options::).
+
+`maint translate-address [SECTION] ADDR'
+ Find the symbol stored at the location specified by the address
+ ADDR and an optional section name SECTION. If found, GDB prints
+ the name of the closest symbol and an offset from the symbol's
+ location to the specified address. This is similar to the `info
+ address' command (*note Symbols::), except that this command also
+ allows to find symbols in other sections.
+
+ If section was not specified, the section in which the symbol was
+ found is also printed. For dynamically linked executables, the
+ name of executable or shared library containing the symbol is
+ printed as well.
+
+
+ The following command is useful for non-interactive invocations of
+GDB, such as in the test suite.
+
+`set watchdog NSEC'
+ Set the maximum number of seconds GDB will wait for the target
+ operation to finish. If this time expires, GDB reports and error
+ and the command is aborted.
+
+`show watchdog'
+ Show the current setting of the target wait timeout.
+
+
+File: gdb.info, Node: Remote Protocol, Next: Agent Expressions, Prev: Maintenance Commands, Up: Top
+
+Appendix E GDB Remote Serial Protocol
+*************************************
+
+* Menu:
+
+* Overview::
+* Packets::
+* Stop Reply Packets::
+* General Query Packets::
+* Architecture-Specific Protocol Details::
+* Tracepoint Packets::
+* Host I/O Packets::
+* Interrupts::
+* Notification Packets::
+* Remote Non-Stop::
+* Packet Acknowledgment::
+* Examples::
+* File-I/O Remote Protocol Extension::
+* Library List Format::
+* Memory Map Format::
+* Thread List Format::
+* Traceframe Info Format::
+
+
+File: gdb.info, Node: Overview, Next: Packets, Up: Remote Protocol
+
+E.1 Overview
+============
+
+There may be occasions when you need to know something about the
+protocol--for example, if there is only one serial port to your target
+machine, you might want your program to do something special if it
+recognizes a packet meant for GDB.
+
+ In the examples below, `->' and `<-' are used to indicate
+transmitted and received data, respectively.
+
+ All GDB commands and responses (other than acknowledgments and
+notifications, see *note Notification Packets::) are sent as a PACKET.
+A PACKET is introduced with the character `$', the actual PACKET-DATA,
+and the terminating character `#' followed by a two-digit CHECKSUM:
+
+ `$'PACKET-DATA`#'CHECKSUM
+ The two-digit CHECKSUM is computed as the modulo 256 sum of all
+characters between the leading `$' and the trailing `#' (an eight bit
+unsigned checksum).
+
+ Implementors should note that prior to GDB 5.0 the protocol
+specification also included an optional two-digit SEQUENCE-ID:
+
+ `$'SEQUENCE-ID`:'PACKET-DATA`#'CHECKSUM
+
+That SEQUENCE-ID was appended to the acknowledgment. GDB has never
+output SEQUENCE-IDs. Stubs that handle packets added since GDB 5.0
+must not accept SEQUENCE-ID.
+
+ When either the host or the target machine receives a packet, the
+first response expected is an acknowledgment: either `+' (to indicate
+the package was received correctly) or `-' (to request retransmission):
+
+ -> `$'PACKET-DATA`#'CHECKSUM
+ <- `+'
+ The `+'/`-' acknowledgments can be disabled once a connection is
+established. *Note Packet Acknowledgment::, for details.
+
+ The host (GDB) sends COMMANDs, and the target (the debugging stub
+incorporated in your program) sends a RESPONSE. In the case of step
+and continue COMMANDs, the response is only sent when the operation has
+completed, and the target has again stopped all threads in all attached
+processes. This is the default all-stop mode behavior, but the remote
+protocol also supports GDB's non-stop execution mode; see *note Remote
+Non-Stop::, for details.
+
+ PACKET-DATA consists of a sequence of characters with the exception
+of `#' and `$' (see `X' packet for additional exceptions).
+
+ Fields within the packet should be separated using `,' `;' or `:'.
+Except where otherwise noted all numbers are represented in HEX with
+leading zeros suppressed.
+
+ Implementors should note that prior to GDB 5.0, the character `:'
+could not appear as the third character in a packet (as it would
+potentially conflict with the SEQUENCE-ID).
+
+ Binary data in most packets is encoded either as two hexadecimal
+digits per byte of binary data. This allowed the traditional remote
+protocol to work over connections which were only seven-bit clean.
+Some packets designed more recently assume an eight-bit clean
+connection, and use a more efficient encoding to send and receive
+binary data.
+
+ The binary data representation uses `7d' (ASCII `}') as an escape
+character. Any escaped byte is transmitted as the escape character
+followed by the original character XORed with `0x20'. For example, the
+byte `0x7d' would be transmitted as the two bytes `0x7d 0x5d'. The
+bytes `0x23' (ASCII `#'), `0x24' (ASCII `$'), and `0x7d' (ASCII `}')
+must always be escaped. Responses sent by the stub must also escape
+`0x2a' (ASCII `*'), so that it is not interpreted as the start of a
+run-length encoded sequence (described next).
+
+ Response DATA can be run-length encoded to save space. Run-length
+encoding replaces runs of identical characters with one instance of the
+repeated character, followed by a `*' and a repeat count. The repeat
+count is itself sent encoded, to avoid binary characters in DATA: a
+value of N is sent as `N+29'. For a repeat count greater or equal to
+3, this produces a printable ASCII character, e.g. a space (ASCII code
+32) for a repeat count of 3. (This is because run-length encoding
+starts to win for counts 3 or more.) Thus, for example, `0* ' is a
+run-length encoding of "0000": the space character after `*' means
+repeat the leading `0' `32 - 29 = 3' more times.
+
+ The printable characters `#' and `$' or with a numeric value greater
+than 126 must not be used. Runs of six repeats (`#') or seven repeats
+(`$') can be expanded using a repeat count of only five (`"'). For
+example, `00000000' can be encoded as `0*"00'.
+
+ The error response returned for some packets includes a two character
+error number. That number is not well defined.
+
+ For any COMMAND not supported by the stub, an empty response
+(`$#00') should be returned. That way it is possible to extend the
+protocol. A newer GDB can tell if a packet is supported based on that
+response.
+
+ A stub is required to support the `g', `G', `m', `M', `c', and `s'
+COMMANDs. All other COMMANDs are optional.
+
+
+File: gdb.info, Node: Packets, Next: Stop Reply Packets, Prev: Overview, Up: Remote Protocol
+
+E.2 Packets
+===========
+
+The following table provides a complete list of all currently defined
+COMMANDs and their corresponding response DATA. *Note File-I/O Remote
+Protocol Extension::, for details about the File I/O extension of the
+remote protocol.
+
+ Each packet's description has a template showing the packet's overall
+syntax, followed by an explanation of the packet's meaning. We include
+spaces in some of the templates for clarity; these are not part of the
+packet's syntax. No GDB packet uses spaces to separate its components.
+For example, a template like `foo BAR BAZ' describes a packet beginning
+with the three ASCII bytes `foo', followed by a BAR, followed directly
+by a BAZ. GDB does not transmit a space character between the `foo'
+and the BAR, or between the BAR and the BAZ.
+
+ Several packets and replies include a THREAD-ID field to identify a
+thread. Normally these are positive numbers with a target-specific
+interpretation, formatted as big-endian hex strings. A THREAD-ID can
+also be a literal `-1' to indicate all threads, or `0' to pick any
+thread.
+
+ In addition, the remote protocol supports a multiprocess feature in
+which the THREAD-ID syntax is extended to optionally include both
+process and thread ID fields, as `pPID.TID'. The PID (process) and TID
+(thread) components each have the format described above: a positive
+number with target-specific interpretation formatted as a big-endian
+hex string, literal `-1' to indicate all processes or threads
+(respectively), or `0' to indicate an arbitrary process or thread.
+Specifying just a process, as `pPID', is equivalent to `pPID.-1'. It
+is an error to specify all processes but a specific thread, such as
+`p-1.TID'. Note that the `p' prefix is _not_ used for those packets
+and replies explicitly documented to include a process ID, rather than
+a THREAD-ID.
+
+ The multiprocess THREAD-ID syntax extensions are only used if both
+GDB and the stub report support for the `multiprocess' feature using
+`qSupported'. *Note multiprocess extensions::, for more information.
+
+ Note that all packet forms beginning with an upper- or lower-case
+letter, other than those described here, are reserved for future use.
+
+ Here are the packet descriptions.
+
+`!'
+ Enable extended mode. In extended mode, the remote server is made
+ persistent. The `R' packet is used to restart the program being
+ debugged.
+
+ Reply:
+ `OK'
+ The remote target both supports and has enabled extended mode.
+
+`?'
+ Indicate the reason the target halted. The reply is the same as
+ for step and continue. This packet has a special interpretation
+ when the target is in non-stop mode; see *note Remote Non-Stop::.
+
+ Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+`A ARGLEN,ARGNUM,ARG,...'
+ Initialized `argv[]' array passed into program. ARGLEN specifies
+ the number of bytes in the hex encoded byte stream ARG. See
+ `gdbserver' for more details.
+
+ Reply:
+ `OK'
+ The arguments were set.
+
+ `E NN'
+ An error occurred.
+
+`b BAUD'
+ (Don't use this packet; its behavior is not well-defined.) Change
+ the serial line speed to BAUD.
+
+ JTC: _When does the transport layer state change? When it's
+ received, or after the ACK is transmitted. In either case, there
+ are problems if the command or the acknowledgment packet is
+ dropped._
+
+ Stan: _If people really wanted to add something like this, and get
+ it working for the first time, they ought to modify ser-unix.c to
+ send some kind of out-of-band message to a specially-setup stub
+ and have the switch happen "in between" packets, so that from
+ remote protocol's point of view, nothing actually happened._
+
+`B ADDR,MODE'
+ Set (MODE is `S') or clear (MODE is `C') a breakpoint at ADDR.
+
+ Don't use this packet. Use the `Z' and `z' packets instead (*note
+ insert breakpoint or watchpoint packet::).
+
+`bc'
+ Backward continue. Execute the target system in reverse. No
+ parameter. *Note Reverse Execution::, for more information.
+
+ Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+`bs'
+ Backward single step. Execute one instruction in reverse. No
+ parameter. *Note Reverse Execution::, for more information.
+
+ Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+`c [ADDR]'
+ Continue. ADDR is address to resume. If ADDR is omitted, resume
+ at current address.
+
+ Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+`C SIG[;ADDR]'
+ Continue with signal SIG (hex signal number). If `;ADDR' is
+ omitted, resume at same address.
+
+ Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+`d'
+ Toggle debug flag.
+
+ Don't use this packet; instead, define a general set packet (*note
+ General Query Packets::).
+
+`D'
+`D;PID'
+ The first form of the packet is used to detach GDB from the remote
+ system. It is sent to the remote target before GDB disconnects
+ via the `detach' command.
+
+ The second form, including a process ID, is used when multiprocess
+ protocol extensions are enabled (*note multiprocess extensions::),
+ to detach only a specific process. The PID is specified as a
+ big-endian hex string.
+
+ Reply:
+ `OK'
+ for success
+
+ `E NN'
+ for an error
+
+`F RC,EE,CF;XX'
+ A reply from GDB to an `F' packet sent by the target. This is
+ part of the File-I/O protocol extension. *Note File-I/O Remote
+ Protocol Extension::, for the specification.
+
+`g'
+ Read general registers.
+
+ Reply:
+ `XX...'
+ Each byte of register data is described by two hex digits.
+ The bytes with the register are transmitted in target byte
+ order. The size of each register and their position within
+ the `g' packet are determined by the GDB internal gdbarch
+ functions `DEPRECATED_REGISTER_RAW_SIZE' and
+ `gdbarch_register_name'. The specification of several
+ standard `g' packets is specified below.
+
+ When reading registers from a trace frame (*note Using the
+ Collected Data: Analyze Collected Data.), the stub may also
+ return a string of literal `x''s in place of the register
+ data digits, to indicate that the corresponding register has
+ not been collected, thus its value is unavailable. For
+ example, for an architecture with 4 registers of 4 bytes
+ each, the following reply indicates to GDB that registers 0
+ and 2 have not been collected, while registers 1 and 3 have
+ been collected, and both have zero value:
+
+ -> `g'
+ <- `xxxxxxxx00000000xxxxxxxx00000000'
+
+ `E NN'
+ for an error.
+
+`G XX...'
+ Write general registers. *Note read registers packet::, for a
+ description of the XX... data.
+
+ Reply:
+ `OK'
+ for success
+
+ `E NN'
+ for an error
+
+`H C THREAD-ID'
+ Set thread for subsequent operations (`m', `M', `g', `G', et.al.).
+ C depends on the operation to be performed: it should be `c' for
+ step and continue operations, `g' for other operations. The
+ thread designator THREAD-ID has the format and interpretation
+ described in *note thread-id syntax::.
+
+ Reply:
+ `OK'
+ for success
+
+ `E NN'
+ for an error
+
+`i [ADDR[,NNN]]'
+ Step the remote target by a single clock cycle. If `,NNN' is
+ present, cycle step NNN cycles. If ADDR is present, cycle step
+ starting at that address.
+
+`I'
+ Signal, then cycle step. *Note step with signal packet::. *Note
+ cycle step packet::.
+
+`k'
+ Kill request.
+
+ FIXME: _There is no description of how to operate when a specific
+ thread context has been selected (i.e. does 'k' kill only that
+ thread?)_.
+
+`m ADDR,LENGTH'
+ Read LENGTH bytes of memory starting at address ADDR. Note that
+ ADDR may not be aligned to any particular boundary.
+
+ The stub need not use any particular size or alignment when
+ gathering data from memory for the response; even if ADDR is
+ word-aligned and LENGTH is a multiple of the word size, the stub
+ is free to use byte accesses, or not. For this reason, this
+ packet may not be suitable for accessing memory-mapped I/O devices.
+
+ Reply:
+ `XX...'
+ Memory contents; each byte is transmitted as a two-digit
+ hexadecimal number. The reply may contain fewer bytes than
+ requested if the server was able to read only part of the
+ region of memory.
+
+ `E NN'
+ NN is errno
+
+`M ADDR,LENGTH:XX...'
+ Write LENGTH bytes of memory starting at address ADDR. XX... is
+ the data; each byte is transmitted as a two-digit hexadecimal
+ number.
+
+ Reply:
+ `OK'
+ for success
+
+ `E NN'
+ for an error (this includes the case where only part of the
+ data was written).
+
+`p N'
+ Read the value of register N; N is in hex. *Note read registers
+ packet::, for a description of how the returned register value is
+ encoded.
+
+ Reply:
+ `XX...'
+ the register's value
+
+ `E NN'
+ for an error
+
+ `'
+ Indicating an unrecognized QUERY.
+
+`P N...=R...'
+ Write register N... with value R.... The register number N is in
+ hexadecimal, and R... contains two hex digits for each byte in the
+ register (target byte order).
+
+ Reply:
+ `OK'
+ for success
+
+ `E NN'
+ for an error
+
+`q NAME PARAMS...'
+`Q NAME PARAMS...'
+ General query (`q') and set (`Q'). These packets are described
+ fully in *note General Query Packets::.
+
+`r'
+ Reset the entire system.
+
+ Don't use this packet; use the `R' packet instead.
+
+`R XX'
+ Restart the program being debugged. XX, while needed, is ignored.
+ This packet is only available in extended mode (*note extended
+ mode::).
+
+ The `R' packet has no reply.
+
+`s [ADDR]'
+ Single step. ADDR is the address at which to resume. If ADDR is
+ omitted, resume at same address.
+
+ Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+`S SIG[;ADDR]'
+ Step with signal. This is analogous to the `C' packet, but
+ requests a single-step, rather than a normal resumption of
+ execution.
+
+ Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+`t ADDR:PP,MM'
+ Search backwards starting at address ADDR for a match with pattern
+ PP and mask MM. PP and MM are 4 bytes. ADDR must be at least 3
+ digits.
+
+`T THREAD-ID'
+ Find out if the thread THREAD-ID is alive. *Note thread-id
+ syntax::.
+
+ Reply:
+ `OK'
+ thread is still alive
+
+ `E NN'
+ thread is dead
+
+`v'
+ Packets starting with `v' are identified by a multi-letter name,
+ up to the first `;' or `?' (or the end of the packet).
+
+`vAttach;PID'
+ Attach to a new process with the specified process ID PID. The
+ process ID is a hexadecimal integer identifying the process. In
+ all-stop mode, all threads in the attached process are stopped; in
+ non-stop mode, it may be attached without being stopped if that is
+ supported by the target.
+
+ This packet is only available in extended mode (*note extended
+ mode::).
+
+ Reply:
+ `E NN'
+ for an error
+
+ `Any stop packet'
+ for success in all-stop mode (*note Stop Reply Packets::)
+
+ `OK'
+ for success in non-stop mode (*note Remote Non-Stop::)
+
+`vCont[;ACTION[:THREAD-ID]]...'
+ Resume the inferior, specifying different actions for each thread.
+ If an action is specified with no THREAD-ID, then it is applied to
+ any threads that don't have a specific action specified; if no
+ default action is specified then other threads should remain
+ stopped in all-stop mode and in their current state in non-stop
+ mode. Specifying multiple default actions is an error; specifying
+ no actions is also an error. Thread IDs are specified using the
+ syntax described in *note thread-id syntax::.
+
+ Currently supported actions are:
+
+ `c'
+ Continue.
+
+ `C SIG'
+ Continue with signal SIG. The signal SIG should be two hex
+ digits.
+
+ `s'
+ Step.
+
+ `S SIG'
+ Step with signal SIG. The signal SIG should be two hex
+ digits.
+
+ `t'
+ Stop.
+
+ The optional argument ADDR normally associated with the `c', `C',
+ `s', and `S' packets is not supported in `vCont'.
+
+ The `t' action is only relevant in non-stop mode (*note Remote
+ Non-Stop::) and may be ignored by the stub otherwise. A stop
+ reply should be generated for any affected thread not already
+ stopped. When a thread is stopped by means of a `t' action, the
+ corresponding stop reply should indicate that the thread has
+ stopped with signal `0', regardless of whether the target uses
+ some other signal as an implementation detail.
+
+ Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+`vCont?'
+ Request a list of actions supported by the `vCont' packet.
+
+ Reply:
+ `vCont[;ACTION...]'
+ The `vCont' packet is supported. Each ACTION is a supported
+ command in the `vCont' packet.
+
+ `'
+ The `vCont' packet is not supported.
+
+`vFile:OPERATION:PARAMETER...'
+ Perform a file operation on the target system. For details, see
+ *note Host I/O Packets::.
+
+`vFlashErase:ADDR,LENGTH'
+ Direct the stub to erase LENGTH bytes of flash starting at ADDR.
+ The region may enclose any number of flash blocks, but its start
+ and end must fall on block boundaries, as indicated by the flash
+ block size appearing in the memory map (*note Memory Map
+ Format::). GDB groups flash memory programming operations
+ together, and sends a `vFlashDone' request after each group; the
+ stub is allowed to delay erase operation until the `vFlashDone'
+ packet is received.
+
+ The stub must support `vCont' if it reports support for
+ multiprocess extensions (*note multiprocess extensions::). Note
+ that in this case `vCont' actions can be specified to apply to all
+ threads in a process by using the `pPID.-1' form of the THREAD-ID.
+
+ Reply:
+ `OK'
+ for success
+
+ `E NN'
+ for an error
+
+`vFlashWrite:ADDR:XX...'
+ Direct the stub to write data to flash address ADDR. The data is
+ passed in binary form using the same encoding as for the `X'
+ packet (*note Binary Data::). The memory ranges specified by
+ `vFlashWrite' packets preceding a `vFlashDone' packet must not
+ overlap, and must appear in order of increasing addresses
+ (although `vFlashErase' packets for higher addresses may already
+ have been received; the ordering is guaranteed only between
+ `vFlashWrite' packets). If a packet writes to an address that was
+ neither erased by a preceding `vFlashErase' packet nor by some
+ other target-specific method, the results are unpredictable.
+
+ Reply:
+ `OK'
+ for success
+
+ `E.memtype'
+ for vFlashWrite addressing non-flash memory
+
+ `E NN'
+ for an error
+
+`vFlashDone'
+ Indicate to the stub that flash programming operation is finished.
+ The stub is permitted to delay or batch the effects of a group of
+ `vFlashErase' and `vFlashWrite' packets until a `vFlashDone'
+ packet is received. The contents of the affected regions of flash
+ memory are unpredictable until the `vFlashDone' request is
+ completed.
+
+`vKill;PID'
+ Kill the process with the specified process ID. PID is a
+ hexadecimal integer identifying the process. This packet is used
+ in preference to `k' when multiprocess protocol extensions are
+ supported; see *note multiprocess extensions::.
+
+ Reply:
+ `E NN'
+ for an error
+
+ `OK'
+ for success
+
+`vRun;FILENAME[;ARGUMENT]...'
+ Run the program FILENAME, passing it each ARGUMENT on its command
+ line. The file and arguments are hex-encoded strings. If
+ FILENAME is an empty string, the stub may use a default program
+ (e.g. the last program run). The program is created in the stopped
+ state.
+
+ This packet is only available in extended mode (*note extended
+ mode::).
+
+ Reply:
+ `E NN'
+ for an error
+
+ `Any stop packet'
+ for success (*note Stop Reply Packets::)
+
+`vStopped'
+ In non-stop mode (*note Remote Non-Stop::), acknowledge a previous
+ stop reply and prompt for the stub to report another one.
+
+ Reply:
+ `Any stop packet'
+ if there is another unreported stop event (*note Stop Reply
+ Packets::)
+
+ `OK'
+ if there are no unreported stop events
+
+`X ADDR,LENGTH:XX...'
+ Write data to memory, where the data is transmitted in binary.
+ ADDR is address, LENGTH is number of bytes, `XX...' is binary data
+ (*note Binary Data::).
+
+ Reply:
+ `OK'
+ for success
+
+ `E NN'
+ for an error
+
+`z TYPE,ADDR,KIND'
+`Z TYPE,ADDR,KIND'
+ Insert (`Z') or remove (`z') a TYPE breakpoint or watchpoint
+ starting at address ADDRESS of kind KIND.
+
+ Each breakpoint and watchpoint packet TYPE is documented
+ separately.
+
+ _Implementation notes: A remote target shall return an empty string
+ for an unrecognized breakpoint or watchpoint packet TYPE. A
+ remote target shall support either both or neither of a given
+ `ZTYPE...' and `zTYPE...' packet pair. To avoid potential
+ problems with duplicate packets, the operations should be
+ implemented in an idempotent way._
+
+`z0,ADDR,KIND'
+`Z0,ADDR,KIND'
+ Insert (`Z0') or remove (`z0') a memory breakpoint at address ADDR
+ of type KIND.
+
+ A memory breakpoint is implemented by replacing the instruction at
+ ADDR with a software breakpoint or trap instruction. The KIND is
+ target-specific and typically indicates the size of the breakpoint
+ in bytes that should be inserted. E.g., the ARM and MIPS can
+ insert either a 2 or 4 byte breakpoint. Some architectures have
+ additional meanings for KIND; see *note Architecture-Specific
+ Protocol Details::.
+
+ _Implementation note: It is possible for a target to copy or move
+ code that contains memory breakpoints (e.g., when implementing
+ overlays). The behavior of this packet, in the presence of such a
+ target, is not defined._
+
+ Reply:
+ `OK'
+ success
+
+ `'
+ not supported
+
+ `E NN'
+ for an error
+
+`z1,ADDR,KIND'
+`Z1,ADDR,KIND'
+ Insert (`Z1') or remove (`z1') a hardware breakpoint at address
+ ADDR.
+
+ A hardware breakpoint is implemented using a mechanism that is not
+ dependant on being able to modify the target's memory. KIND has
+ the same meaning as in `Z0' packets.
+
+ _Implementation note: A hardware breakpoint is not affected by code
+ movement._
+
+ Reply:
+ `OK'
+ success
+
+ `'
+ not supported
+
+ `E NN'
+ for an error
+
+`z2,ADDR,KIND'
+`Z2,ADDR,KIND'
+ Insert (`Z2') or remove (`z2') a write watchpoint at ADDR. KIND
+ is interpreted as the number of bytes to watch.
+
+ Reply:
+ `OK'
+ success
+
+ `'
+ not supported
+
+ `E NN'
+ for an error
+
+`z3,ADDR,KIND'
+`Z3,ADDR,KIND'
+ Insert (`Z3') or remove (`z3') a read watchpoint at ADDR. KIND is
+ interpreted as the number of bytes to watch.
+
+ Reply:
+ `OK'
+ success
+
+ `'
+ not supported
+
+ `E NN'
+ for an error
+
+`z4,ADDR,KIND'
+`Z4,ADDR,KIND'
+ Insert (`Z4') or remove (`z4') an access watchpoint at ADDR. KIND
+ is interpreted as the number of bytes to watch.
+
+ Reply:
+ `OK'
+ success
+
+ `'
+ not supported
+
+ `E NN'
+ for an error
+
+
+
+File: gdb.info, Node: Stop Reply Packets, Next: General Query Packets, Prev: Packets, Up: Remote Protocol
+
+E.3 Stop Reply Packets
+======================
+
+The `C', `c', `S', `s', `vCont', `vAttach', `vRun', `vStopped', and `?'
+packets can receive any of the below as a reply. Except for `?' and
+`vStopped', that reply is only returned when the target halts. In the
+below the exact meaning of "signal number" is defined by the header
+`include/gdb/signals.h' in the GDB source code.
+
+ As in the description of request packets, we include spaces in the
+reply templates for clarity; these are not part of the reply packet's
+syntax. No GDB stop reply packet uses spaces to separate its
+components.
+
+`S AA'
+ The program received signal number AA (a two-digit hexadecimal
+ number). This is equivalent to a `T' response with no N:R pairs.
+
+`T AA N1:R1;N2:R2;...'
+ The program received signal number AA (a two-digit hexadecimal
+ number). This is equivalent to an `S' response, except that the
+ `N:R' pairs can carry values of important registers and other
+ information directly in the stop reply packet, reducing round-trip
+ latency. Single-step and breakpoint traps are reported this way.
+ Each `N:R' pair is interpreted as follows:
+
+ * If N is a hexadecimal number, it is a register number, and the
+ corresponding R gives that register's value. R is a series
+ of bytes in target byte order, with each byte given by a
+ two-digit hex number.
+
+ * If N is `thread', then R is the THREAD-ID of the stopped
+ thread, as specified in *note thread-id syntax::.
+
+ * If N is `core', then R is the hexadecimal number of the core
+ on which the stop event was detected.
+
+ * If N is a recognized "stop reason", it describes a more
+ specific event that stopped the target. The currently
+ defined stop reasons are listed below. AA should be `05',
+ the trap signal. At most one stop reason should be present.
+
+ * Otherwise, GDB should ignore this `N:R' pair and go on to the
+ next; this allows us to extend the protocol in the future.
+
+ The currently defined stop reasons are:
+
+ `watch'
+ `rwatch'
+ `awatch'
+ The packet indicates a watchpoint hit, and R is the data
+ address, in hex.
+
+ `library'
+ The packet indicates that the loaded libraries have changed.
+ GDB should use `qXfer:libraries:read' to fetch a new list of
+ loaded libraries. R is ignored.
+
+ `replaylog'
+ The packet indicates that the target cannot continue replaying
+ logged execution events, because it has reached the end (or
+ the beginning when executing backward) of the log. The value
+ of R will be either `begin' or `end'. *Note Reverse
+ Execution::, for more information.
+
+`W AA'
+`W AA ; process:PID'
+ The process exited, and AA is the exit status. This is only
+ applicable to certain targets.
+
+ The second form of the response, including the process ID of the
+ exited process, can be used only when GDB has reported support for
+ multiprocess protocol extensions; see *note multiprocess
+ extensions::. The PID is formatted as a big-endian hex string.
+
+`X AA'
+`X AA ; process:PID'
+ The process terminated with signal AA.
+
+ The second form of the response, including the process ID of the
+ terminated process, can be used only when GDB has reported support
+ for multiprocess protocol extensions; see *note multiprocess
+ extensions::. The PID is formatted as a big-endian hex string.
+
+`O XX...'
+ `XX...' is hex encoding of ASCII data, to be written as the
+ program's console output. This can happen at any time while the
+ program is running and the debugger should continue to wait for
+ `W', `T', etc. This reply is not permitted in non-stop mode.
+
+`F CALL-ID,PARAMETER...'
+ CALL-ID is the identifier which says which host system call should
+ be called. This is just the name of the function. Translation
+ into the correct system call is only applicable as it's defined in
+ GDB. *Note File-I/O Remote Protocol Extension::, for a list of
+ implemented system calls.
+
+ `PARAMETER...' is a list of parameters as defined for this very
+ system call.
+
+ The target replies with this packet when it expects GDB to call a
+ host system call on behalf of the target. GDB replies with an
+ appropriate `F' packet and keeps up waiting for the next reply
+ packet from the target. The latest `C', `c', `S' or `s' action is
+ expected to be continued. *Note File-I/O Remote Protocol
+ Extension::, for more details.
+
+
+
+File: gdb.info, Node: General Query Packets, Next: Architecture-Specific Protocol Details, Prev: Stop Reply Packets, Up: Remote Protocol
+
+E.4 General Query Packets
+=========================
+
+Packets starting with `q' are "general query packets"; packets starting
+with `Q' are "general set packets". General query and set packets are
+a semi-unified form for retrieving and sending information to and from
+the stub.
+
+ The initial letter of a query or set packet is followed by a name
+indicating what sort of thing the packet applies to. For example, GDB
+may use a `qSymbol' packet to exchange symbol definitions with the
+stub. These packet names follow some conventions:
+
+ * The name must not contain commas, colons or semicolons.
+
+ * Most GDB query and set packets have a leading upper case letter.
+
+ * The names of custom vendor packets should use a company prefix, in
+ lower case, followed by a period. For example, packets designed at
+ the Acme Corporation might begin with `qacme.foo' (for querying
+ foos) or `Qacme.bar' (for setting bars).
+
+ The name of a query or set packet should be separated from any
+parameters by a `:'; the parameters themselves should be separated by
+`,' or `;'. Stubs must be careful to match the full packet name, and
+check for a separator or the end of the packet, in case two packet
+names share a common prefix. New packets should not begin with `qC',
+`qP', or `qL'(1).
+
+ Like the descriptions of the other packets, each description here
+has a template showing the packet's overall syntax, followed by an
+explanation of the packet's meaning. We include spaces in some of the
+templates for clarity; these are not part of the packet's syntax. No
+GDB packet uses spaces to separate its components.
+
+ Here are the currently defined query and set packets:
+
+`QAllow:OP:VAL...'
+ Specify which operations GDB expects to request of the target, as
+ a semicolon-separated list of operation name and value pairs.
+ Possible values for OP include `WriteReg', `WriteMem',
+ `InsertBreak', `InsertTrace', `InsertFastTrace', and `Stop'. VAL
+ is either 0, indicating that GDB will not request the operation,
+ or 1, indicating that it may. (The target can then use this to
+ set up its own internals optimally, for instance if the debugger
+ never expects to insert breakpoints, it may not need to install
+ its own trap handler.)
+
+`qC'
+ Return the current thread ID.
+
+ Reply:
+ `QC THREAD-ID'
+ Where THREAD-ID is a thread ID as documented in *note
+ thread-id syntax::.
+
+ `(anything else)'
+ Any other reply implies the old thread ID.
+
+`qCRC:ADDR,LENGTH'
+ Compute the CRC checksum of a block of memory using CRC-32 defined
+ in IEEE 802.3. The CRC is computed byte at a time, taking the most
+ significant bit of each byte first. The initial pattern code
+ `0xffffffff' is used to ensure leading zeros affect the CRC.
+
+ _Note:_ This is the same CRC used in validating separate debug
+ files (*note Debugging Information in Separate Files: Separate
+ Debug Files.). However the algorithm is slightly different. When
+ validating separate debug files, the CRC is computed taking the
+ _least_ significant bit of each byte first, and the final result
+ is inverted to detect trailing zeros.
+
+ Reply:
+ `E NN'
+ An error (such as memory fault)
+
+ `C CRC32'
+ The specified memory region's checksum is CRC32.
+
+`qfThreadInfo'
+`qsThreadInfo'
+ Obtain a list of all active thread IDs from the target (OS).
+ Since there may be too many active threads to fit into one reply
+ packet, this query works iteratively: it may require more than one
+ query/reply sequence to obtain the entire list of threads. The
+ first query of the sequence will be the `qfThreadInfo' query;
+ subsequent queries in the sequence will be the `qsThreadInfo'
+ query.
+
+ NOTE: This packet replaces the `qL' query (see below).
+
+ Reply:
+ `m THREAD-ID'
+ A single thread ID
+
+ `m THREAD-ID,THREAD-ID...'
+ a comma-separated list of thread IDs
+
+ `l'
+ (lower case letter `L') denotes end of list.
+
+ In response to each query, the target will reply with a list of
+ one or more thread IDs, separated by commas. GDB will respond to
+ each reply with a request for more thread ids (using the `qs' form
+ of the query), until the target responds with `l' (lower-case ell,
+ for "last"). Refer to *note thread-id syntax::, for the format of
+ the THREAD-ID fields.
+
+`qGetTLSAddr:THREAD-ID,OFFSET,LM'
+ Fetch the address associated with thread local storage specified
+ by THREAD-ID, OFFSET, and LM.
+
+ THREAD-ID is the thread ID associated with the thread for which to
+ fetch the TLS address. *Note thread-id syntax::.
+
+ OFFSET is the (big endian, hex encoded) offset associated with the
+ thread local variable. (This offset is obtained from the debug
+ information associated with the variable.)
+
+ LM is the (big endian, hex encoded) OS/ABI-specific encoding of the
+ the load module associated with the thread local storage. For
+ example, a GNU/Linux system will pass the link map address of the
+ shared object associated with the thread local storage under
+ consideration. Other operating environments may choose to
+ represent the load module differently, so the precise meaning of
+ this parameter will vary.
+
+ Reply:
+ `XX...'
+ Hex encoded (big endian) bytes representing the address of
+ the thread local storage requested.
+
+ `E NN'
+ An error occurred. NN are hex digits.
+
+ `'
+ An empty reply indicates that `qGetTLSAddr' is not supported
+ by the stub.
+
+`qGetTIBAddr:THREAD-ID'
+ Fetch address of the Windows OS specific Thread Information Block.
+
+ THREAD-ID is the thread ID associated with the thread.
+
+ Reply:
+ `XX...'
+ Hex encoded (big endian) bytes representing the linear
+ address of the thread information block.
+
+ `E NN'
+ An error occured. This means that either the thread was not
+ found, or the address could not be retrieved.
+
+ `'
+ An empty reply indicates that `qGetTIBAddr' is not supported
+ by the stub.
+
+`qL STARTFLAG THREADCOUNT NEXTTHREAD'
+ Obtain thread information from RTOS. Where: STARTFLAG (one hex
+ digit) is one to indicate the first query and zero to indicate a
+ subsequent query; THREADCOUNT (two hex digits) is the maximum
+ number of threads the response packet can contain; and NEXTTHREAD
+ (eight hex digits), for subsequent queries (STARTFLAG is zero), is
+ returned in the response as ARGTHREAD.
+
+ Don't use this packet; use the `qfThreadInfo' query instead (see
+ above).
+
+ Reply:
+ `qM COUNT DONE ARGTHREAD THREAD...'
+ Where: COUNT (two hex digits) is the number of threads being
+ returned; DONE (one hex digit) is zero to indicate more
+ threads and one indicates no further threads; ARGTHREADID
+ (eight hex digits) is NEXTTHREAD from the request packet;
+ THREAD... is a sequence of thread IDs from the target.
+ THREADID (eight hex digits). See
+ `remote.c:parse_threadlist_response()'.
+
+`qOffsets'
+ Get section offsets that the target used when relocating the
+ downloaded image.
+
+ Reply:
+ `Text=XXX;Data=YYY[;Bss=ZZZ]'
+ Relocate the `Text' section by XXX from its original address.
+ Relocate the `Data' section by YYY from its original address.
+ If the object file format provides segment information (e.g.
+ ELF `PT_LOAD' program headers), GDB will relocate entire
+ segments by the supplied offsets.
+
+ _Note: while a `Bss' offset may be included in the response,
+ GDB ignores this and instead applies the `Data' offset to the
+ `Bss' section._
+
+ `TextSeg=XXX[;DataSeg=YYY]'
+ Relocate the first segment of the object file, which
+ conventionally contains program code, to a starting address
+ of XXX. If `DataSeg' is specified, relocate the second
+ segment, which conventionally contains modifiable data, to a
+ starting address of YYY. GDB will report an error if the
+ object file does not contain segment information, or does not
+ contain at least as many segments as mentioned in the reply.
+ Extra segments are kept at fixed offsets relative to the last
+ relocated segment.
+
+`qP MODE THREAD-ID'
+ Returns information on THREAD-ID. Where: MODE is a hex encoded 32
+ bit mode; THREAD-ID is a thread ID (*note thread-id syntax::).
+
+ Don't use this packet; use the `qThreadExtraInfo' query instead
+ (see below).
+
+ Reply: see `remote.c:remote_unpack_thread_info_response()'.
+
+`QNonStop:1'
+
+`QNonStop:0'
+ Enter non-stop (`QNonStop:1') or all-stop (`QNonStop:0') mode.
+ *Note Remote Non-Stop::, for more information.
+
+ Reply:
+ `OK'
+ The request succeeded.
+
+ `E NN'
+ An error occurred. NN are hex digits.
+
+ `'
+ An empty reply indicates that `QNonStop' is not supported by
+ the stub.
+
+ This packet is not probed by default; the remote stub must request
+ it, by supplying an appropriate `qSupported' response (*note
+ qSupported::). Use of this packet is controlled by the `set
+ non-stop' command; *note Non-Stop Mode::.
+
+`QPassSignals: SIGNAL [;SIGNAL]...'
+ Each listed SIGNAL should be passed directly to the inferior
+ process. Signals are numbered identically to continue packets and
+ stop replies (*note Stop Reply Packets::). Each SIGNAL list item
+ should be strictly greater than the previous item. These signals
+ do not need to stop the inferior, or be reported to GDB. All
+ other signals should be reported to GDB. Multiple `QPassSignals'
+ packets do not combine; any earlier `QPassSignals' list is
+ completely replaced by the new list. This packet improves
+ performance when using `handle SIGNAL nostop noprint pass'.
+
+ Reply:
+ `OK'
+ The request succeeded.
+
+ `E NN'
+ An error occurred. NN are hex digits.
+
+ `'
+ An empty reply indicates that `QPassSignals' is not supported
+ by the stub.
+
+ Use of this packet is controlled by the `set remote pass-signals'
+ command (*note set remote pass-signals: Remote Configuration.).
+ This packet is not probed by default; the remote stub must request
+ it, by supplying an appropriate `qSupported' response (*note
+ qSupported::).
+
+`qRcmd,COMMAND'
+ COMMAND (hex encoded) is passed to the local interpreter for
+ execution. Invalid commands should be reported using the output
+ string. Before the final result packet, the target may also
+ respond with a number of intermediate `OOUTPUT' console output
+ packets. _Implementors should note that providing access to a
+ stubs's interpreter may have security implications_.
+
+ Reply:
+ `OK'
+ A command response with no output.
+
+ `OUTPUT'
+ A command response with the hex encoded output string OUTPUT.
+
+ `E NN'
+ Indicate a badly formed request.
+
+ `'
+ An empty reply indicates that `qRcmd' is not recognized.
+
+ (Note that the `qRcmd' packet's name is separated from the command
+ by a `,', not a `:', contrary to the naming conventions above.
+ Please don't use this packet as a model for new packets.)
+
+`qSearch:memory:ADDRESS;LENGTH;SEARCH-PATTERN'
+ Search LENGTH bytes at ADDRESS for SEARCH-PATTERN. ADDRESS and
+ LENGTH are encoded in hex. SEARCH-PATTERN is a sequence of bytes,
+ hex encoded.
+
+ Reply:
+ `0'
+ The pattern was not found.
+
+ `1,address'
+ The pattern was found at ADDRESS.
+
+ `E NN'
+ A badly formed request or an error was encountered while
+ searching memory.
+
+ `'
+ An empty reply indicates that `qSearch:memory' is not
+ recognized.
+
+`QStartNoAckMode'
+ Request that the remote stub disable the normal `+'/`-' protocol
+ acknowledgments (*note Packet Acknowledgment::).
+
+ Reply:
+ `OK'
+ The stub has switched to no-acknowledgment mode. GDB
+ acknowledges this reponse, but neither the stub nor GDB shall
+ send or expect further `+'/`-' acknowledgments in the current
+ connection.
+
+ `'
+ An empty reply indicates that the stub does not support
+ no-acknowledgment mode.
+
+`qSupported [:GDBFEATURE [;GDBFEATURE]... ]'
+ Tell the remote stub about features supported by GDB, and query
+ the stub for features it supports. This packet allows GDB and the
+ remote stub to take advantage of each others' features.
+ `qSupported' also consolidates multiple feature probes at startup,
+ to improve GDB performance--a single larger packet performs better
+ than multiple smaller probe packets on high-latency links. Some
+ features may enable behavior which must not be on by default, e.g.
+ because it would confuse older clients or stubs. Other features
+ may describe packets which could be automatically probed for, but
+ are not. These features must be reported before GDB will use
+ them. This "default unsupported" behavior is not appropriate for
+ all packets, but it helps to keep the initial connection time
+ under control with new versions of GDB which support increasing
+ numbers of packets.
+
+ Reply:
+ `STUBFEATURE [;STUBFEATURE]...'
+ The stub supports or does not support each returned
+ STUBFEATURE, depending on the form of each STUBFEATURE (see
+ below for the possible forms).
+
+ `'
+ An empty reply indicates that `qSupported' is not recognized,
+ or that no features needed to be reported to GDB.
+
+ The allowed forms for each feature (either a GDBFEATURE in the
+ `qSupported' packet, or a STUBFEATURE in the response) are:
+
+ `NAME=VALUE'
+ The remote protocol feature NAME is supported, and associated
+ with the specified VALUE. The format of VALUE depends on the
+ feature, but it must not include a semicolon.
+
+ `NAME+'
+ The remote protocol feature NAME is supported, and does not
+ need an associated value.
+
+ `NAME-'
+ The remote protocol feature NAME is not supported.
+
+ `NAME?'
+ The remote protocol feature NAME may be supported, and GDB
+ should auto-detect support in some other way when it is
+ needed. This form will not be used for GDBFEATURE
+ notifications, but may be used for STUBFEATURE responses.
+
+ Whenever the stub receives a `qSupported' request, the supplied
+ set of GDB features should override any previous request. This
+ allows GDB to put the stub in a known state, even if the stub had
+ previously been communicating with a different version of GDB.
+
+ The following values of GDBFEATURE (for the packet sent by GDB)
+ are defined:
+
+ `multiprocess'
+ This feature indicates whether GDB supports multiprocess
+ extensions to the remote protocol. GDB does not use such
+ extensions unless the stub also reports that it supports them
+ by including `multiprocess+' in its `qSupported' reply.
+ *Note multiprocess extensions::, for details.
+
+ `xmlRegisters'
+ This feature indicates that GDB supports the XML target
+ description. If the stub sees `xmlRegisters=' with target
+ specific strings separated by a comma, it will report register
+ description.
+
+ `qRelocInsn'
+ This feature indicates whether GDB supports the `qRelocInsn'
+ packet (*note Relocate instruction reply packet: Tracepoint
+ Packets.).
+
+ Stubs should ignore any unknown values for GDBFEATURE. Any GDB
+ which sends a `qSupported' packet supports receiving packets of
+ unlimited length (earlier versions of GDB may reject overly long
+ responses). Additional values for GDBFEATURE may be defined in
+ the future to let the stub take advantage of new features in GDB,
+ e.g. incompatible improvements in the remote protocol--the
+ `multiprocess' feature is an example of such a feature. The
+ stub's reply should be independent of the GDBFEATURE entries sent
+ by GDB; first GDB describes all the features it supports, and then
+ the stub replies with all the features it supports.
+
+ Similarly, GDB will silently ignore unrecognized stub feature
+ responses, as long as each response uses one of the standard forms.
+
+ Some features are flags. A stub which supports a flag feature
+ should respond with a `+' form response. Other features require
+ values, and the stub should respond with an `=' form response.
+
+ Each feature has a default value, which GDB will use if
+ `qSupported' is not available or if the feature is not mentioned
+ in the `qSupported' response. The default values are fixed; a
+ stub is free to omit any feature responses that match the defaults.
+
+ Not all features can be probed, but for those which can, the
+ probing mechanism is useful: in some cases, a stub's internal
+ architecture may not allow the protocol layer to know some
+ information about the underlying target in advance. This is
+ especially common in stubs which may be configured for multiple
+ targets.
+
+ These are the currently defined stub features and their properties:
+
+ Feature Name Value Default Probe Allowed
+ Required
+ `PacketSize' Yes `-' No
+ `qXfer:auxv:read' No `-' Yes
+ `qXfer:features:read' No `-' Yes
+ `qXfer:libraries:read' No `-' Yes
+ `qXfer:memory-map:read' No `-' Yes
+ `qXfer:sdata:read' No `-' Yes
+ `qXfer:spu:read' No `-' Yes
+ `qXfer:spu:write' No `-' Yes
+ `qXfer:siginfo:read' No `-' Yes
+ `qXfer:siginfo:write' No `-' Yes
+ `qXfer:threads:read' No `-' Yes
+ `qXfer:traceframe-info:read'No `-' Yes
+ `QNonStop' No `-' Yes
+ `QPassSignals' No `-' Yes
+ `QStartNoAckMode' No `-' Yes
+ `multiprocess' No `-' No
+ `ConditionalTracepoints'No `-' No
+ `ReverseContinue' No `-' No
+ `ReverseStep' No `-' No
+ `TracepointSource' No `-' No
+ `QAllow' No `-' No
+
+ These are the currently defined stub features, in more detail:
+
+ `PacketSize=BYTES'
+ The remote stub can accept packets up to at least BYTES in
+ length. GDB will send packets up to this size for bulk
+ transfers, and will never send larger packets. This is a
+ limit on the data characters in the packet, including the
+ frame and checksum. There is no trailing NUL byte in a
+ remote protocol packet; if the stub stores packets in a
+ NUL-terminated format, it should allow an extra byte in its
+ buffer for the NUL. If this stub feature is not supported,
+ GDB guesses based on the size of the `g' packet response.
+
+ `qXfer:auxv:read'
+ The remote stub understands the `qXfer:auxv:read' packet
+ (*note qXfer auxiliary vector read::).
+
+ `qXfer:features:read'
+ The remote stub understands the `qXfer:features:read' packet
+ (*note qXfer target description read::).
+
+ `qXfer:libraries:read'
+ The remote stub understands the `qXfer:libraries:read' packet
+ (*note qXfer library list read::).
+
+ `qXfer:memory-map:read'
+ The remote stub understands the `qXfer:memory-map:read' packet
+ (*note qXfer memory map read::).
+
+ `qXfer:sdata:read'
+ The remote stub understands the `qXfer:sdata:read' packet
+ (*note qXfer sdata read::).
+
+ `qXfer:spu:read'
+ The remote stub understands the `qXfer:spu:read' packet
+ (*note qXfer spu read::).
+
+ `qXfer:spu:write'
+ The remote stub understands the `qXfer:spu:write' packet
+ (*note qXfer spu write::).
+
+ `qXfer:siginfo:read'
+ The remote stub understands the `qXfer:siginfo:read' packet
+ (*note qXfer siginfo read::).
+
+ `qXfer:siginfo:write'
+ The remote stub understands the `qXfer:siginfo:write' packet
+ (*note qXfer siginfo write::).
+
+ `qXfer:threads:read'
+ The remote stub understands the `qXfer:threads:read' packet
+ (*note qXfer threads read::).
+
+ `qXfer:traceframe-info:read'
+ The remote stub understands the `qXfer:traceframe-info:read'
+ packet (*note qXfer traceframe info read::).
+
+ `QNonStop'
+ The remote stub understands the `QNonStop' packet (*note
+ QNonStop::).
+
+ `QPassSignals'
+ The remote stub understands the `QPassSignals' packet (*note
+ QPassSignals::).
+
+ `QStartNoAckMode'
+ The remote stub understands the `QStartNoAckMode' packet and
+ prefers to operate in no-acknowledgment mode. *Note Packet
+ Acknowledgment::.
+
+ `multiprocess'
+ The remote stub understands the multiprocess extensions to
+ the remote protocol syntax. The multiprocess extensions
+ affect the syntax of thread IDs in both packets and replies
+ (*note thread-id syntax::), and add process IDs to the `D'
+ packet and `W' and `X' replies. Note that reporting this
+ feature indicates support for the syntactic extensions only,
+ not that the stub necessarily supports debugging of more than
+ one process at a time. The stub must not use multiprocess
+ extensions in packet replies unless GDB has also indicated it
+ supports them in its `qSupported' request.
+
+ `qXfer:osdata:read'
+ The remote stub understands the `qXfer:osdata:read' packet
+ ((*note qXfer osdata read::).
+
+ `ConditionalTracepoints'
+ The remote stub accepts and implements conditional
+ expressions defined for tracepoints (*note Tracepoint
+ Conditions::).
+
+ `ReverseContinue'
+ The remote stub accepts and implements the reverse continue
+ packet (*note bc::).
+
+ `ReverseStep'
+ The remote stub accepts and implements the reverse step packet
+ (*note bs::).
+
+ `TracepointSource'
+ The remote stub understands the `QTDPsrc' packet that supplies
+ the source form of tracepoint definitions.
+
+ `QAllow'
+ The remote stub understands the `QAllow' packet.
+
+ `StaticTracepoint'
+ The remote stub supports static tracepoints.
+
+
+`qSymbol::'
+ Notify the target that GDB is prepared to serve symbol lookup
+ requests. Accept requests from the target for the values of
+ symbols.
+
+ Reply:
+ `OK'
+ The target does not need to look up any (more) symbols.
+
+ `qSymbol:SYM_NAME'
+ The target requests the value of symbol SYM_NAME (hex
+ encoded). GDB may provide the value by using the
+ `qSymbol:SYM_VALUE:SYM_NAME' message, described below.
+
+`qSymbol:SYM_VALUE:SYM_NAME'
+ Set the value of SYM_NAME to SYM_VALUE.
+
+ SYM_NAME (hex encoded) is the name of a symbol whose value the
+ target has previously requested.
+
+ SYM_VALUE (hex) is the value for symbol SYM_NAME. If GDB cannot
+ supply a value for SYM_NAME, then this field will be empty.
+
+ Reply:
+ `OK'
+ The target does not need to look up any (more) symbols.
+
+ `qSymbol:SYM_NAME'
+ The target requests the value of a new symbol SYM_NAME (hex
+ encoded). GDB will continue to supply the values of symbols
+ (if available), until the target ceases to request them.
+
+`qTBuffer'
+
+`QTBuffer'
+
+`QTDisconnected'
+`QTDP'
+`QTDPsrc'
+`QTDV'
+`qTfP'
+`qTfV'
+`QTFrame'
+ *Note Tracepoint Packets::.
+
+`qThreadExtraInfo,THREAD-ID'
+ Obtain a printable string description of a thread's attributes from
+ the target OS. THREAD-ID is a thread ID; see *note thread-id
+ syntax::. This string may contain anything that the target OS
+ thinks is interesting for GDB to tell the user about the thread.
+ The string is displayed in GDB's `info threads' display. Some
+ examples of possible thread extra info strings are `Runnable', or
+ `Blocked on Mutex'.
+
+ Reply:
+ `XX...'
+ Where `XX...' is a hex encoding of ASCII data, comprising the
+ printable string containing the extra information about the
+ thread's attributes.
+
+ (Note that the `qThreadExtraInfo' packet's name is separated from
+ the command by a `,', not a `:', contrary to the naming
+ conventions above. Please don't use this packet as a model for new
+ packets.)
+
+`QTSave'
+
+`qTsP'
+
+`qTsV'
+`QTStart'
+`QTStop'
+`QTinit'
+`QTro'
+`qTStatus'
+`qTV'
+`qTfSTM'
+`qTsSTM'
+`qTSTMat'
+ *Note Tracepoint Packets::.
+
+`qXfer:OBJECT:read:ANNEX:OFFSET,LENGTH'
+ Read uninterpreted bytes from the target's special data area
+ identified by the keyword OBJECT. Request LENGTH bytes starting
+ at OFFSET bytes into the data. The content and encoding of ANNEX
+ is specific to OBJECT; it can supply additional details about what
+ data to access.
+
+ Here are the specific requests of this form defined so far. All
+ `qXfer:OBJECT:read:...' requests use the same reply formats,
+ listed below.
+
+ `qXfer:auxv:read::OFFSET,LENGTH'
+ Access the target's "auxiliary vector". *Note auxiliary
+ vector: OS Information. Note ANNEX must be empty.
+
+ This packet is not probed by default; the remote stub must
+ request it, by supplying an appropriate `qSupported' response
+ (*note qSupported::).
+
+ `qXfer:features:read:ANNEX:OFFSET,LENGTH'
+ Access the "target description". *Note Target
+ Descriptions::. The annex specifies which XML document to
+ access. The main description is always loaded from the
+ `target.xml' annex.
+
+ This packet is not probed by default; the remote stub must
+ request it, by supplying an appropriate `qSupported' response
+ (*note qSupported::).
+
+ `qXfer:libraries:read:ANNEX:OFFSET,LENGTH'
+ Access the target's list of loaded libraries. *Note Library
+ List Format::. The annex part of the generic `qXfer' packet
+ must be empty (*note qXfer read::).
+
+ Targets which maintain a list of libraries in the program's
+ memory do not need to implement this packet; it is designed
+ for platforms where the operating system manages the list of
+ loaded libraries.
+
+ This packet is not probed by default; the remote stub must
+ request it, by supplying an appropriate `qSupported' response
+ (*note qSupported::).
+
+ `qXfer:memory-map:read::OFFSET,LENGTH'
+ Access the target's "memory-map". *Note Memory Map Format::.
+ The annex part of the generic `qXfer' packet must be empty
+ (*note qXfer read::).
+
+ This packet is not probed by default; the remote stub must
+ request it, by supplying an appropriate `qSupported' response
+ (*note qSupported::).
+
+ `qXfer:sdata:read::OFFSET,LENGTH'
+ Read contents of the extra collected static tracepoint marker
+ information. The annex part of the generic `qXfer' packet
+ must be empty (*note qXfer read::). *Note Tracepoint Action
+ Lists: Tracepoint Actions.
+
+ This packet is not probed by default; the remote stub must
+ request it, by supplying an appropriate `qSupported' response
+ (*note qSupported::).
+
+ `qXfer:siginfo:read::OFFSET,LENGTH'
+ Read contents of the extra signal information on the target
+ system. The annex part of the generic `qXfer' packet must be
+ empty (*note qXfer read::).
+
+ This packet is not probed by default; the remote stub must
+ request it, by supplying an appropriate `qSupported' response
+ (*note qSupported::).
+
+ `qXfer:spu:read:ANNEX:OFFSET,LENGTH'
+ Read contents of an `spufs' file on the target system. The
+ annex specifies which file to read; it must be of the form
+ `ID/NAME', where ID specifies an SPU context ID in the target
+ process, and NAME identifes the `spufs' file in that context
+ to be accessed.
+
+ This packet is not probed by default; the remote stub must
+ request it, by supplying an appropriate `qSupported' response
+ (*note qSupported::).
+
+ `qXfer:threads:read::OFFSET,LENGTH'
+ Access the list of threads on target. *Note Thread List
+ Format::. The annex part of the generic `qXfer' packet must
+ be empty (*note qXfer read::).
+
+ This packet is not probed by default; the remote stub must
+ request it, by supplying an appropriate `qSupported' response
+ (*note qSupported::).
+
+ `qXfer:traceframe-info:read::OFFSET,LENGTH'
+ Return a description of the current traceframe's contents.
+ *Note Traceframe Info Format::. The annex part of the generic
+ `qXfer' packet must be empty (*note qXfer read::).
+
+ This packet is not probed by default; the remote stub must
+ request it, by supplying an appropriate `qSupported' response
+ (*note qSupported::).
+
+ `qXfer:osdata:read::OFFSET,LENGTH'
+ Access the target's "operating system information". *Note
+ Operating System Information::.
+
+
+ Reply:
+ `m DATA'
+ Data DATA (*note Binary Data::) has been read from the
+ target. There may be more data at a higher address (although
+ it is permitted to return `m' even for the last valid block
+ of data, as long as at least one byte of data was read).
+ DATA may have fewer bytes than the LENGTH in the request.
+
+ `l DATA'
+ Data DATA (*note Binary Data::) has been read from the target.
+ There is no more data to be read. DATA may have fewer bytes
+ than the LENGTH in the request.
+
+ `l'
+ The OFFSET in the request is at the end of the data. There
+ is no more data to be read.
+
+ `E00'
+ The request was malformed, or ANNEX was invalid.
+
+ `E NN'
+ The offset was invalid, or there was an error encountered
+ reading the data. NN is a hex-encoded `errno' value.
+
+ `'
+ An empty reply indicates the OBJECT string was not recognized
+ by the stub, or that the object does not support reading.
+
+`qXfer:OBJECT:write:ANNEX:OFFSET:DATA...'
+ Write uninterpreted bytes into the target's special data area
+ identified by the keyword OBJECT, starting at OFFSET bytes into
+ the data. DATA... is the binary-encoded data (*note Binary
+ Data::) to be written. The content and encoding of ANNEX is
+ specific to OBJECT; it can supply additional details about what
+ data to access.
+
+ Here are the specific requests of this form defined so far. All
+ `qXfer:OBJECT:write:...' requests use the same reply formats,
+ listed below.
+
+ `qXfer:siginfo:write::OFFSET:DATA...'
+ Write DATA to the extra signal information on the target
+ system. The annex part of the generic `qXfer' packet must be
+ empty (*note qXfer write::).
+
+ This packet is not probed by default; the remote stub must
+ request it, by supplying an appropriate `qSupported' response
+ (*note qSupported::).
+
+ `qXfer:spu:write:ANNEX:OFFSET:DATA...'
+ Write DATA to an `spufs' file on the target system. The
+ annex specifies which file to write; it must be of the form
+ `ID/NAME', where ID specifies an SPU context ID in the target
+ process, and NAME identifes the `spufs' file in that context
+ to be accessed.
+
+ This packet is not probed by default; the remote stub must
+ request it, by supplying an appropriate `qSupported' response
+ (*note qSupported::).
+
+ Reply:
+ `NN'
+ NN (hex encoded) is the number of bytes written. This may be
+ fewer bytes than supplied in the request.
+
+ `E00'
+ The request was malformed, or ANNEX was invalid.
+
+ `E NN'
+ The offset was invalid, or there was an error encountered
+ writing the data. NN is a hex-encoded `errno' value.
+
+ `'
+ An empty reply indicates the OBJECT string was not recognized
+ by the stub, or that the object does not support writing.
+
+`qXfer:OBJECT:OPERATION:...'
+ Requests of this form may be added in the future. When a stub does
+ not recognize the OBJECT keyword, or its support for OBJECT does
+ not recognize the OPERATION keyword, the stub must respond with an
+ empty packet.
+
+`qAttached:PID'
+ Return an indication of whether the remote server attached to an
+ existing process or created a new process. When the multiprocess
+ protocol extensions are supported (*note multiprocess
+ extensions::), PID is an integer in hexadecimal format identifying
+ the target process. Otherwise, GDB will omit the PID field and
+ the query packet will be simplified as `qAttached'.
+
+ This query is used, for example, to know whether the remote process
+ should be detached or killed when a GDB session is ended with the
+ `quit' command.
+
+ Reply:
+ `1'
+ The remote server attached to an existing process.
+
+ `0'
+ The remote server created a new process.
+
+ `E NN'
+ A badly formed request or an error was encountered.
+
+
+ ---------- Footnotes ----------
+
+ (1) The `qP' and `qL' packets predate these conventions, and have
+arguments without any terminator for the packet name; we suspect they
+are in widespread use in places that are difficult to upgrade. The
+`qC' packet has no arguments, but some existing stubs (e.g. RedBoot)
+are known to not check for the end of the packet.
+
+
+File: gdb.info, Node: Architecture-Specific Protocol Details, Next: Tracepoint Packets, Prev: General Query Packets, Up: Remote Protocol
+
+E.5 Architecture-Specific Protocol Details
+==========================================
+
+This section describes how the remote protocol is applied to specific
+target architectures. Also see *note Standard Target Features::, for
+details of XML target descriptions for each architecture.
+
+E.5.1 ARM
+---------
+
+E.5.1.1 Breakpoint Kinds
+........................
+
+These breakpoint kinds are defined for the `Z0' and `Z1' packets.
+
+2
+ 16-bit Thumb mode breakpoint.
+
+3
+ 32-bit Thumb mode (Thumb-2) breakpoint.
+
+4
+ 32-bit ARM mode breakpoint.
+
+
+E.5.2 MIPS
+----------
+
+E.5.2.1 Register Packet Format
+..............................
+
+The following `g'/`G' packets have previously been defined. In the
+below, some thirty-two bit registers are transferred as sixty-four
+bits. Those registers should be zero/sign extended (which?) to fill
+the space allocated. Register bytes are transferred in target byte
+order. The two nibbles within a register byte are transferred
+most-significant - least-significant.
+
+MIPS32
+ All registers are transferred as thirty-two bit quantities in the
+ order: 32 general-purpose; sr; lo; hi; bad; cause; pc; 32
+ floating-point registers; fsr; fir; fp.
+
+MIPS64
+ All registers are transferred as sixty-four bit quantities
+ (including thirty-two bit registers such as `sr'). The ordering
+ is the same as `MIPS32'.
+
+
+
+File: gdb.info, Node: Tracepoint Packets, Next: Host I/O Packets, Prev: Architecture-Specific Protocol Details, Up: Remote Protocol
+
+E.6 Tracepoint Packets
+======================
+
+Here we describe the packets GDB uses to implement tracepoints (*note
+Tracepoints::).
+
+`QTDP:N:ADDR:ENA:STEP:PASS[:FFLEN][:XLEN,BYTES][-]'
+ Create a new tracepoint, number N, at ADDR. If ENA is `E', then
+ the tracepoint is enabled; if it is `D', then the tracepoint is
+ disabled. STEP is the tracepoint's step count, and PASS is its
+ pass count. If an `F' is present, then the tracepoint is to be a
+ fast tracepoint, and the FLEN is the number of bytes that the
+ target should copy elsewhere to make room for the tracepoint. If
+ an `X' is present, it introduces a tracepoint condition, which
+ consists of a hexadecimal length, followed by a comma and
+ hex-encoded bytes, in a manner similar to action encodings as
+ described below. If the trailing `-' is present, further `QTDP'
+ packets will follow to specify this tracepoint's actions.
+
+ Replies:
+ `OK'
+ The packet was understood and carried out.
+
+ `qRelocInsn'
+ *Note Relocate instruction reply packet: Tracepoint Packets.
+
+ `'
+ The packet was not recognized.
+
+`QTDP:-N:ADDR:[S]ACTION...[-]'
+ Define actions to be taken when a tracepoint is hit. N and ADDR
+ must be the same as in the initial `QTDP' packet for this
+ tracepoint. This packet may only be sent immediately after
+ another `QTDP' packet that ended with a `-'. If the trailing `-'
+ is present, further `QTDP' packets will follow, specifying more
+ actions for this tracepoint.
+
+ In the series of action packets for a given tracepoint, at most one
+ can have an `S' before its first ACTION. If such a packet is
+ sent, it and the following packets define "while-stepping"
+ actions. Any prior packets define ordinary actions -- that is,
+ those taken when the tracepoint is first hit. If no action packet
+ has an `S', then all the packets in the series specify ordinary
+ tracepoint actions.
+
+ The `ACTION...' portion of the packet is a series of actions,
+ concatenated without separators. Each action has one of the
+ following forms:
+
+ `R MASK'
+ Collect the registers whose bits are set in MASK. MASK is a
+ hexadecimal number whose I'th bit is set if register number I
+ should be collected. (The least significant bit is numbered
+ zero.) Note that MASK may be any number of digits long; it
+ may not fit in a 32-bit word.
+
+ `M BASEREG,OFFSET,LEN'
+ Collect LEN bytes of memory starting at the address in
+ register number BASEREG, plus OFFSET. If BASEREG is `-1',
+ then the range has a fixed address: OFFSET is the address of
+ the lowest byte to collect. The BASEREG, OFFSET, and LEN
+ parameters are all unsigned hexadecimal values (the `-1'
+ value for BASEREG is a special case).
+
+ `X LEN,EXPR'
+ Evaluate EXPR, whose length is LEN, and collect memory as it
+ directs. EXPR is an agent expression, as described in *note
+ Agent Expressions::. Each byte of the expression is encoded
+ as a two-digit hex number in the packet; LEN is the number of
+ bytes in the expression (and thus one-half the number of hex
+ digits in the packet).
+
+
+ Any number of actions may be packed together in a single `QTDP'
+ packet, as long as the packet does not exceed the maximum packet
+ length (400 bytes, for many stubs). There may be only one `R'
+ action per tracepoint, and it must precede any `M' or `X' actions.
+ Any registers referred to by `M' and `X' actions must be collected
+ by a preceding `R' action. (The "while-stepping" actions are
+ treated as if they were attached to a separate tracepoint, as far
+ as these restrictions are concerned.)
+
+ Replies:
+ `OK'
+ The packet was understood and carried out.
+
+ `qRelocInsn'
+ *Note Relocate instruction reply packet: Tracepoint Packets.
+
+ `'
+ The packet was not recognized.
+
+`QTDPsrc:N:ADDR:TYPE:START:SLEN:BYTES'
+ Specify a source string of tracepoint N at address ADDR. This is
+ useful to get accurate reproduction of the tracepoints originally
+ downloaded at the beginning of the trace run. TYPE is the name of
+ the tracepoint part, such as `cond' for the tracepoint's
+ conditional expression (see below for a list of types), while
+ BYTES is the string, encoded in hexadecimal.
+
+ START is the offset of the BYTES within the overall source string,
+ while SLEN is the total length of the source string. This is
+ intended for handling source strings that are longer than will fit
+ in a single packet.
+
+ The available string types are `at' for the location, `cond' for
+ the conditional, and `cmd' for an action command. GDB sends a
+ separate packet for each command in the action list, in the same
+ order in which the commands are stored in the list.
+
+ The target does not need to do anything with source strings except
+ report them back as part of the replies to the `qTfP'/`qTsP' query
+ packets.
+
+ Although this packet is optional, and GDB will only send it if the
+ target replies with `TracepointSource' *Note General Query
+ Packets::, it makes both disconnected tracing and trace files much
+ easier to use. Otherwise the user must be careful that the
+ tracepoints in effect while looking at trace frames are identical
+ to the ones in effect during the trace run; even a small
+ discrepancy could cause `tdump' not to work, or a particular trace
+ frame not be found.
+
+`QTDV:N:VALUE'
+ Create a new trace state variable, number N, with an initial value
+ of VALUE, which is a 64-bit signed integer. Both N and VALUE are
+ encoded as hexadecimal values. GDB has the option of not using
+ this packet for initial values of zero; the target should simply
+ create the trace state variables as they are mentioned in
+ expressions.
+
+`QTFrame:N'
+ Select the N'th tracepoint frame from the buffer, and use the
+ register and memory contents recorded there to answer subsequent
+ request packets from GDB.
+
+ A successful reply from the stub indicates that the stub has found
+ the requested frame. The response is a series of parts,
+ concatenated without separators, describing the frame we selected.
+ Each part has one of the following forms:
+
+ `F F'
+ The selected frame is number N in the trace frame buffer; F
+ is a hexadecimal number. If F is `-1', then there was no
+ frame matching the criteria in the request packet.
+
+ `T T'
+ The selected trace frame records a hit of tracepoint number T;
+ T is a hexadecimal number.
+
+
+`QTFrame:pc:ADDR'
+ Like `QTFrame:N', but select the first tracepoint frame after the
+ currently selected frame whose PC is ADDR; ADDR is a hexadecimal
+ number.
+
+`QTFrame:tdp:T'
+ Like `QTFrame:N', but select the first tracepoint frame after the
+ currently selected frame that is a hit of tracepoint T; T is a
+ hexadecimal number.
+
+`QTFrame:range:START:END'
+ Like `QTFrame:N', but select the first tracepoint frame after the
+ currently selected frame whose PC is between START (inclusive) and
+ END (inclusive); START and END are hexadecimal numbers.
+
+`QTFrame:outside:START:END'
+ Like `QTFrame:range:START:END', but select the first frame
+ _outside_ the given range of addresses (exclusive).
+
+`QTStart'
+ Begin the tracepoint experiment. Begin collecting data from
+ tracepoint hits in the trace frame buffer. This packet supports
+ the `qRelocInsn' reply (*note Relocate instruction reply packet:
+ Tracepoint Packets.).
+
+`QTStop'
+ End the tracepoint experiment. Stop collecting trace frames.
+
+`QTinit'
+ Clear the table of tracepoints, and empty the trace frame buffer.
+
+`QTro:START1,END1:START2,END2:...'
+ Establish the given ranges of memory as "transparent". The stub
+ will answer requests for these ranges from memory's current
+ contents, if they were not collected as part of the tracepoint hit.
+
+ GDB uses this to mark read-only regions of memory, like those
+ containing program code. Since these areas never change, they
+ should still have the same contents they did when the tracepoint
+ was hit, so there's no reason for the stub to refuse to provide
+ their contents.
+
+`QTDisconnected:VALUE'
+ Set the choice to what to do with the tracing run when GDB
+ disconnects from the target. A VALUE of 1 directs the target to
+ continue the tracing run, while 0 tells the target to stop tracing
+ if GDB is no longer in the picture.
+
+`qTStatus'
+ Ask the stub if there is a trace experiment running right now.
+
+ The reply has the form:
+
+ `TRUNNING[;FIELD]...'
+ RUNNING is a single digit `1' if the trace is presently
+ running, or `0' if not. It is followed by semicolon-separated
+ optional fields that an agent may use to report additional
+ status.
+
+
+ If the trace is not running, the agent may report any of several
+ explanations as one of the optional fields:
+
+ `tnotrun:0'
+ No trace has been run yet.
+
+ `tstop:0'
+ The trace was stopped by a user-originated stop command.
+
+ `tfull:0'
+ The trace stopped because the trace buffer filled up.
+
+ `tdisconnected:0'
+ The trace stopped because GDB disconnected from the target.
+
+ `tpasscount:TPNUM'
+ The trace stopped because tracepoint TPNUM exceeded its pass
+ count.
+
+ `terror:TEXT:TPNUM'
+ The trace stopped because tracepoint TPNUM had an error. The
+ string TEXT is available to describe the nature of the error
+ (for instance, a divide by zero in the condition expression).
+ TEXT is hex encoded.
+
+ `tunknown:0'
+ The trace stopped for some other reason.
+
+
+ Additional optional fields supply statistical and other
+ information. Although not required, they are extremely useful for
+ users monitoring the progress of a trace run. If a trace has
+ stopped, and these numbers are reported, they must reflect the
+ state of the just-stopped trace.
+
+ `tframes:N'
+ The number of trace frames in the buffer.
+
+ `tcreated:N'
+ The total number of trace frames created during the run. This
+ may be larger than the trace frame count, if the buffer is
+ circular.
+
+ `tsize:N'
+ The total size of the trace buffer, in bytes.
+
+ `tfree:N'
+ The number of bytes still unused in the buffer.
+
+ `circular:N'
+ The value of the circular trace buffer flag. `1' means that
+ the trace buffer is circular and old trace frames will be
+ discarded if necessary to make room, `0' means that the trace
+ buffer is linear and may fill up.
+
+ `disconn:N'
+ The value of the disconnected tracing flag. `1' means that
+ tracing will continue after GDB disconnects, `0' means that
+ the trace run will stop.
+
+
+`qTV:VAR'
+ Ask the stub for the value of the trace state variable number VAR.
+
+ Replies:
+ `VVALUE'
+ The value of the variable is VALUE. This will be the current
+ value of the variable if the user is examining a running
+ target, or a saved value if the variable was collected in the
+ trace frame that the user is looking at. Note that multiple
+ requests may result in different reply values, such as when
+ requesting values while the program is running.
+
+ `U'
+ The value of the variable is unknown. This would occur, for
+ example, if the user is examining a trace frame in which the
+ requested variable was not collected.
+
+`qTfP'
+`qTsP'
+ These packets request data about tracepoints that are being used by
+ the target. GDB sends `qTfP' to get the first piece of data, and
+ multiple `qTsP' to get additional pieces. Replies to these
+ packets generally take the form of the `QTDP' packets that define
+ tracepoints. (FIXME add detailed syntax)
+
+`qTfV'
+`qTsV'
+ These packets request data about trace state variables that are on
+ the target. GDB sends `qTfV' to get the first vari of data, and
+ multiple `qTsV' to get additional variables. Replies to these
+ packets follow the syntax of the `QTDV' packets that define trace
+ state variables.
+
+`qTfSTM'
+`qTsSTM'
+ These packets request data about static tracepoint markers that
+ exist in the target program. GDB sends `qTfSTM' to get the first
+ piece of data, and multiple `qTsSTM' to get additional pieces.
+ Replies to these packets take the following form:
+
+ Reply:
+ `m ADDRESS:ID:EXTRA'
+ A single marker
+
+ `m ADDRESS:ID:EXTRA,ADDRESS:ID:EXTRA...'
+ a comma-separated list of markers
+
+ `l'
+ (lower case letter `L') denotes end of list.
+
+ `E NN'
+ An error occurred. NN are hex digits.
+
+ `'
+ An empty reply indicates that the request is not supported by
+ the stub.
+
+ ADDRESS is encoded in hex. ID and EXTRA are strings encoded in
+ hex.
+
+ In response to each query, the target will reply with a list of
+ one or more markers, separated by commas. GDB will respond to each
+ reply with a request for more markers (using the `qs' form of the
+ query), until the target responds with `l' (lower-case ell, for
+ "last").
+
+`qTSTMat:ADDRESS'
+ This packets requests data about static tracepoint markers in the
+ target program at ADDRESS. Replies to this packet follow the
+ syntax of the `qTfSTM' and `qTsSTM' packets that list static
+ tracepoint markers.
+
+`QTSave:FILENAME'
+ This packet directs the target to save trace data to the file name
+ FILENAME in the target's filesystem. FILENAME is encoded as a hex
+ string; the interpretation of the file name (relative vs absolute,
+ wild cards, etc) is up to the target.
+
+`qTBuffer:OFFSET,LEN'
+ Return up to LEN bytes of the current contents of trace buffer,
+ starting at OFFSET. The trace buffer is treated as if it were a
+ contiguous collection of traceframes, as per the trace file format.
+ The reply consists as many hex-encoded bytes as the target can
+ deliver in a packet; it is not an error to return fewer than were
+ asked for. A reply consisting of just `l' indicates that no bytes
+ are available.
+
+`QTBuffer:circular:VALUE'
+ This packet directs the target to use a circular trace buffer if
+ VALUE is 1, or a linear buffer if the value is 0.
+
+
+E.6.1 Relocate instruction reply packet
+---------------------------------------
+
+When installing fast tracepoints in memory, the target may need to
+relocate the instruction currently at the tracepoint address to a
+different address in memory. For most instructions, a simple copy is
+enough, but, for example, call instructions that implicitly push the
+return address on the stack, and relative branches or other PC-relative
+instructions require offset adjustment, so that the effect of executing
+the instruction at a different address is the same as if it had
+executed in the original location.
+
+ In response to several of the tracepoint packets, the target may also
+respond with a number of intermediate `qRelocInsn' request packets
+before the final result packet, to have GDB handle this relocation
+operation. If a packet supports this mechanism, its documentation will
+explicitly say so. See for example the above descriptions for the
+`QTStart' and `QTDP' packets. The format of the request is:
+
+`qRelocInsn:FROM;TO'
+ This requests GDB to copy instruction at address FROM to address
+ TO, possibly adjusted so that executing the instruction at TO has
+ the same effect as executing it at FROM. GDB writes the adjusted
+ instruction to target memory starting at TO.
+
+ Replies:
+`qRelocInsn:ADJUSTED_SIZE'
+ Informs the stub the relocation is complete. ADJUSTED_SIZE is the
+ length in bytes of resulting relocated instruction sequence.
+
+`E NN'
+ A badly formed request was detected, or an error was encountered
+ while relocating the instruction.
+
+
+File: gdb.info, Node: Host I/O Packets, Next: Interrupts, Prev: Tracepoint Packets, Up: Remote Protocol
+
+E.7 Host I/O Packets
+====================
+
+The "Host I/O" packets allow GDB to perform I/O operations on the far
+side of a remote link. For example, Host I/O is used to upload and
+download files to a remote target with its own filesystem. Host I/O
+uses the same constant values and data structure layout as the
+target-initiated File-I/O protocol. However, the Host I/O packets are
+structured differently. The target-initiated protocol relies on target
+memory to store parameters and buffers. Host I/O requests are
+initiated by GDB, and the target's memory is not involved. *Note
+File-I/O Remote Protocol Extension::, for more details on the
+target-initiated protocol.
+
+ The Host I/O request packets all encode a single operation along with
+its arguments. They have this format:
+
+`vFile:OPERATION: PARAMETER...'
+ OPERATION is the name of the particular request; the target should
+ compare the entire packet name up to the second colon when checking
+ for a supported operation. The format of PARAMETER depends on the
+ operation. Numbers are always passed in hexadecimal. Negative
+ numbers have an explicit minus sign (i.e. two's complement is not
+ used). Strings (e.g. filenames) are encoded as a series of
+ hexadecimal bytes. The last argument to a system call may be a
+ buffer of escaped binary data (*note Binary Data::).
+
+
+ The valid responses to Host I/O packets are:
+
+`F RESULT [, ERRNO] [; ATTACHMENT]'
+ RESULT is the integer value returned by this operation, usually
+ non-negative for success and -1 for errors. If an error has
+ occured, ERRNO will be included in the result. ERRNO will have a
+ value defined by the File-I/O protocol (*note Errno Values::). For
+ operations which return data, ATTACHMENT supplies the data as a
+ binary buffer. Binary buffers in response packets are escaped in
+ the normal way (*note Binary Data::). See the individual packet
+ documentation for the interpretation of RESULT and ATTACHMENT.
+
+`'
+ An empty response indicates that this operation is not recognized.
+
+
+ These are the supported Host I/O operations:
+
+`vFile:open: PATHNAME, FLAGS, MODE'
+ Open a file at PATHNAME and return a file descriptor for it, or
+ return -1 if an error occurs. PATHNAME is a string, FLAGS is an
+ integer indicating a mask of open flags (*note Open Flags::), and
+ MODE is an integer indicating a mask of mode bits to use if the
+ file is created (*note mode_t Values::). *Note open::, for
+ details of the open flags and mode values.
+
+`vFile:close: FD'
+ Close the open file corresponding to FD and return 0, or -1 if an
+ error occurs.
+
+`vFile:pread: FD, COUNT, OFFSET'
+ Read data from the open file corresponding to FD. Up to COUNT
+ bytes will be read from the file, starting at OFFSET relative to
+ the start of the file. The target may read fewer bytes; common
+ reasons include packet size limits and an end-of-file condition.
+ The number of bytes read is returned. Zero should only be
+ returned for a successful read at the end of the file, or if COUNT
+ was zero.
+
+ The data read should be returned as a binary attachment on success.
+ If zero bytes were read, the response should include an empty
+ binary attachment (i.e. a trailing semicolon). The return value
+ is the number of target bytes read; the binary attachment may be
+ longer if some characters were escaped.
+
+`vFile:pwrite: FD, OFFSET, DATA'
+ Write DATA (a binary buffer) to the open file corresponding to FD.
+ Start the write at OFFSET from the start of the file. Unlike many
+ `write' system calls, there is no separate COUNT argument; the
+ length of DATA in the packet is used. `vFile:write' returns the
+ number of bytes written, which may be shorter than the length of
+ DATA, or -1 if an error occurred.
+
+`vFile:unlink: PATHNAME'
+ Delete the file at PATHNAME on the target. Return 0, or -1 if an
+ error occurs. PATHNAME is a string.
+
+
+
+File: gdb.info, Node: Interrupts, Next: Notification Packets, Prev: Host I/O Packets, Up: Remote Protocol
+
+E.8 Interrupts
+==============
+
+When a program on the remote target is running, GDB may attempt to
+interrupt it by sending a `Ctrl-C', `BREAK' or a `BREAK' followed by
+`g', control of which is specified via GDB's `interrupt-sequence'.
+
+ The precise meaning of `BREAK' is defined by the transport mechanism
+and may, in fact, be undefined. GDB does not currently define a
+`BREAK' mechanism for any of the network interfaces except for TCP, in
+which case GDB sends the `telnet' BREAK sequence.
+
+ `Ctrl-C', on the other hand, is defined and implemented for all
+transport mechanisms. It is represented by sending the single byte
+`0x03' without any of the usual packet overhead described in the
+Overview section (*note Overview::). When a `0x03' byte is transmitted
+as part of a packet, it is considered to be packet data and does _not_
+represent an interrupt. E.g., an `X' packet (*note X packet::), used
+for binary downloads, may include an unescaped `0x03' as part of its
+packet.
+
+ `BREAK' followed by `g' is also known as Magic SysRq g. When Linux
+kernel receives this sequence from serial port, it stops execution and
+connects to gdb.
+
+ Stubs are not required to recognize these interrupt mechanisms and
+the precise meaning associated with receipt of the interrupt is
+implementation defined. If the target supports debugging of multiple
+threads and/or processes, it should attempt to interrupt all
+currently-executing threads and processes. If the stub is successful
+at interrupting the running program, it should send one of the stop
+reply packets (*note Stop Reply Packets::) to GDB as a result of
+successfully stopping the program in all-stop mode, and a stop reply
+for each stopped thread in non-stop mode. Interrupts received while the
+program is stopped are discarded.
+
+
+File: gdb.info, Node: Notification Packets, Next: Remote Non-Stop, Prev: Interrupts, Up: Remote Protocol
+
+E.9 Notification Packets
+========================
+
+The GDB remote serial protocol includes "notifications", packets that
+require no acknowledgment. Both the GDB and the stub may send
+notifications (although the only notifications defined at present are
+sent by the stub). Notifications carry information without incurring
+the round-trip latency of an acknowledgment, and so are useful for
+low-impact communications where occasional packet loss is not a problem.
+
+ A notification packet has the form `% DATA # CHECKSUM', where DATA
+is the content of the notification, and CHECKSUM is a checksum of DATA,
+computed and formatted as for ordinary GDB packets. A notification's
+DATA never contains `$', `%' or `#' characters. Upon receiving a
+notification, the recipient sends no `+' or `-' to acknowledge the
+notification's receipt or to report its corruption.
+
+ Every notification's DATA begins with a name, which contains no
+colon characters, followed by a colon character.
+
+ Recipients should silently ignore corrupted notifications and
+notifications they do not understand. Recipients should restart
+timeout periods on receipt of a well-formed notification, whether or
+not they understand it.
+
+ Senders should only send the notifications described here when this
+protocol description specifies that they are permitted. In the future,
+we may extend the protocol to permit existing notifications in new
+contexts; this rule helps older senders avoid confusing newer
+recipients.
+
+ (Older versions of GDB ignore bytes received until they see the `$'
+byte that begins an ordinary packet, so new stubs may transmit
+notifications without fear of confusing older clients. There are no
+notifications defined for GDB to send at the moment, but we assume that
+most older stubs would ignore them, as well.)
+
+ The following notification packets from the stub to GDB are defined:
+
+`Stop: REPLY'
+ Report an asynchronous stop event in non-stop mode. The REPLY has
+ the form of a stop reply, as described in *note Stop Reply
+ Packets::. Refer to *note Remote Non-Stop::, for information on
+ how these notifications are acknowledged by GDB.
+
+
+File: gdb.info, Node: Remote Non-Stop, Next: Packet Acknowledgment, Prev: Notification Packets, Up: Remote Protocol
+
+E.10 Remote Protocol Support for Non-Stop Mode
+==============================================
+
+GDB's remote protocol supports non-stop debugging of multi-threaded
+programs, as described in *note Non-Stop Mode::. If the stub supports
+non-stop mode, it should report that to GDB by including `QNonStop+' in
+its `qSupported' response (*note qSupported::).
+
+ GDB typically sends a `QNonStop' packet only when establishing a new
+connection with the stub. Entering non-stop mode does not alter the
+state of any currently-running threads, but targets must stop all
+threads in any already-attached processes when entering all-stop mode.
+GDB uses the `?' packet as necessary to probe the target state after a
+mode change.
+
+ In non-stop mode, when an attached process encounters an event that
+would otherwise be reported with a stop reply, it uses the asynchronous
+notification mechanism (*note Notification Packets::) to inform GDB.
+In contrast to all-stop mode, where all threads in all processes are
+stopped when a stop reply is sent, in non-stop mode only the thread
+reporting the stop event is stopped. That is, when reporting a `S' or
+`T' response to indicate completion of a step operation, hitting a
+breakpoint, or a fault, only the affected thread is stopped; any other
+still-running threads continue to run. When reporting a `W' or `X'
+response, all running threads belonging to other attached processes
+continue to run.
+
+ Only one stop reply notification at a time may be pending; if
+additional stop events occur before GDB has acknowledged the previous
+notification, they must be queued by the stub for later synchronous
+transmission in response to `vStopped' packets from GDB. Because the
+notification mechanism is unreliable, the stub is permitted to resend a
+stop reply notification if it believes GDB may not have received it.
+GDB ignores additional stop reply notifications received before it has
+finished processing a previous notification and the stub has completed
+sending any queued stop events.
+
+ Otherwise, GDB must be prepared to receive a stop reply notification
+at any time. Specifically, they may appear when GDB is not otherwise
+reading input from the stub, or when GDB is expecting to read a normal
+synchronous response or a `+'/`-' acknowledgment to a packet it has
+sent. Notification packets are distinct from any other communication
+from the stub so there is no ambiguity.
+
+ After receiving a stop reply notification, GDB shall acknowledge it
+by sending a `vStopped' packet (*note vStopped packet::) as a regular,
+synchronous request to the stub. Such acknowledgment is not required
+to happen immediately, as GDB is permitted to send other, unrelated
+packets to the stub first, which the stub should process normally.
+
+ Upon receiving a `vStopped' packet, if the stub has other queued
+stop events to report to GDB, it shall respond by sending a normal stop
+reply response. GDB shall then send another `vStopped' packet to
+solicit further responses; again, it is permitted to send other,
+unrelated packets as well which the stub should process normally.
+
+ If the stub receives a `vStopped' packet and there are no additional
+stop events to report, the stub shall return an `OK' response. At this
+point, if further stop events occur, the stub shall send a new stop
+reply notification, GDB shall accept the notification, and the process
+shall be repeated.
+
+ In non-stop mode, the target shall respond to the `?' packet as
+follows. First, any incomplete stop reply notification/`vStopped'
+sequence in progress is abandoned. The target must begin a new
+sequence reporting stop events for all stopped threads, whether or not
+it has previously reported those events to GDB. The first stop reply
+is sent as a synchronous reply to the `?' packet, and subsequent stop
+replies are sent as responses to `vStopped' packets using the mechanism
+described above. The target must not send asynchronous stop reply
+notifications until the sequence is complete. If all threads are
+running when the target receives the `?' packet, or if the target is
+not attached to any process, it shall respond `OK'.
+
+
+File: gdb.info, Node: Packet Acknowledgment, Next: Examples, Prev: Remote Non-Stop, Up: Remote Protocol
+
+E.11 Packet Acknowledgment
+==========================
+
+By default, when either the host or the target machine receives a
+packet, the first response expected is an acknowledgment: either `+'
+(to indicate the package was received correctly) or `-' (to request
+retransmission). This mechanism allows the GDB remote protocol to
+operate over unreliable transport mechanisms, such as a serial line.
+
+ In cases where the transport mechanism is itself reliable (such as a
+pipe or TCP connection), the `+'/`-' acknowledgments are redundant. It
+may be desirable to disable them in that case to reduce communication
+overhead, or for other reasons. This can be accomplished by means of
+the `QStartNoAckMode' packet; *note QStartNoAckMode::.
+
+ When in no-acknowledgment mode, neither the stub nor GDB shall send
+or expect `+'/`-' protocol acknowledgments. The packet and response
+format still includes the normal checksum, as described in *note
+Overview::, but the checksum may be ignored by the receiver.
+
+ If the stub supports `QStartNoAckMode' and prefers to operate in
+no-acknowledgment mode, it should report that to GDB by including
+`QStartNoAckMode+' in its response to `qSupported'; *note qSupported::.
+If GDB also supports `QStartNoAckMode' and it has not been disabled via
+the `set remote noack-packet off' command (*note Remote
+Configuration::), GDB may then send a `QStartNoAckMode' packet to the
+stub. Only then may the stub actually turn off packet acknowledgments.
+GDB sends a final `+' acknowledgment of the stub's `OK' response, which
+can be safely ignored by the stub.
+
+ Note that `set remote noack-packet' command only affects negotiation
+between GDB and the stub when subsequent connections are made; it does
+not affect the protocol acknowledgment state for any current connection.
+Since `+'/`-' acknowledgments are enabled by default when a new
+connection is established, there is also no protocol request to
+re-enable the acknowledgments for the current connection, once disabled.
+
+
+File: gdb.info, Node: Examples, Next: File-I/O Remote Protocol Extension, Prev: Packet Acknowledgment, Up: Remote Protocol
+
+E.12 Examples
+=============
+
+Example sequence of a target being re-started. Notice how the restart
+does not get any direct output:
+
+ -> `R00'
+ <- `+'
+ _target restarts_
+ -> `?'
+ <- `+'
+ <- `T001:1234123412341234'
+ -> `+'
+
+ Example sequence of a target being stepped by a single instruction:
+
+ -> `G1445...'
+ <- `+'
+ -> `s'
+ <- `+'
+ _time passes_
+ <- `T001:1234123412341234'
+ -> `+'
+ -> `g'
+ <- `+'
+ <- `1455...'
+ -> `+'
+
+
+File: gdb.info, Node: File-I/O Remote Protocol Extension, Next: Library List Format, Prev: Examples, Up: Remote Protocol
+
+E.13 File-I/O Remote Protocol Extension
+=======================================
+
+* Menu:
+
+* File-I/O Overview::
+* Protocol Basics::
+* The F Request Packet::
+* The F Reply Packet::
+* The Ctrl-C Message::
+* Console I/O::
+* List of Supported Calls::
+* Protocol-specific Representation of Datatypes::
+* Constants::
+* File-I/O Examples::
+
+
+File: gdb.info, Node: File-I/O Overview, Next: Protocol Basics, Up: File-I/O Remote Protocol Extension
+
+E.13.1 File-I/O Overview
+------------------------
+
+The "File I/O remote protocol extension" (short: File-I/O) allows the
+target to use the host's file system and console I/O to perform various
+system calls. System calls on the target system are translated into a
+remote protocol packet to the host system, which then performs the
+needed actions and returns a response packet to the target system.
+This simulates file system operations even on targets that lack file
+systems.
+
+ The protocol is defined to be independent of both the host and
+target systems. It uses its own internal representation of datatypes
+and values. Both GDB and the target's GDB stub are responsible for
+translating the system-dependent value representations into the internal
+protocol representations when data is transmitted.
+
+ The communication is synchronous. A system call is possible only
+when GDB is waiting for a response from the `C', `c', `S' or `s'
+packets. While GDB handles the request for a system call, the target
+is stopped to allow deterministic access to the target's memory.
+Therefore File-I/O is not interruptible by target signals. On the
+other hand, it is possible to interrupt File-I/O by a user interrupt
+(`Ctrl-C') within GDB.
+
+ The target's request to perform a host system call does not finish
+the latest `C', `c', `S' or `s' action. That means, after finishing
+the system call, the target returns to continuing the previous activity
+(continue, step). No additional continue or step request from GDB is
+required.
+
+ (gdb) continue
+ <- target requests 'system call X'
+ target is stopped, GDB executes system call
+ -> GDB returns result
+ ... target continues, GDB returns to wait for the target
+ <- target hits breakpoint and sends a Txx packet
+
+ The protocol only supports I/O on the console and to regular files on
+the host file system. Character or block special devices, pipes, named
+pipes, sockets or any other communication method on the host system are
+not supported by this protocol.
+
+ File I/O is not supported in non-stop mode.
+
+
+File: gdb.info, Node: Protocol Basics, Next: The F Request Packet, Prev: File-I/O Overview, Up: File-I/O Remote Protocol Extension
+
+E.13.2 Protocol Basics
+----------------------
+
+The File-I/O protocol uses the `F' packet as the request as well as
+reply packet. Since a File-I/O system call can only occur when GDB is
+waiting for a response from the continuing or stepping target, the
+File-I/O request is a reply that GDB has to expect as a result of a
+previous `C', `c', `S' or `s' packet. This `F' packet contains all
+information needed to allow GDB to call the appropriate host system
+call:
+
+ * A unique identifier for the requested system call.
+
+ * All parameters to the system call. Pointers are given as addresses
+ in the target memory address space. Pointers to strings are given
+ as pointer/length pair. Numerical values are given as they are.
+ Numerical control flags are given in a protocol-specific
+ representation.
+
+
+ At this point, GDB has to perform the following actions.
+
+ * If the parameters include pointer values to data needed as input
+ to a system call, GDB requests this data from the target with a
+ standard `m' packet request. This additional communication has to
+ be expected by the target implementation and is handled as any
+ other `m' packet.
+
+ * GDB translates all value from protocol representation to host
+ representation as needed. Datatypes are coerced into the host
+ types.
+
+ * GDB calls the system call.
+
+ * It then coerces datatypes back to protocol representation.
+
+ * If the system call is expected to return data in buffer space
+ specified by pointer parameters to the call, the data is
+ transmitted to the target using a `M' or `X' packet. This packet
+ has to be expected by the target implementation and is handled as
+ any other `M' or `X' packet.
+
+
+ Eventually GDB replies with another `F' packet which contains all
+necessary information for the target to continue. This at least
+contains
+
+ * Return value.
+
+ * `errno', if has been changed by the system call.
+
+ * "Ctrl-C" flag.
+
+
+ After having done the needed type and value coercion, the target
+continues the latest continue or step action.
+
+
+File: gdb.info, Node: The F Request Packet, Next: The F Reply Packet, Prev: Protocol Basics, Up: File-I/O Remote Protocol Extension
+
+E.13.3 The `F' Request Packet
+-----------------------------
+
+The `F' request packet has the following format:
+
+`FCALL-ID,PARAMETER...'
+ CALL-ID is the identifier to indicate the host system call to be
+ called. This is just the name of the function.
+
+ PARAMETER... are the parameters to the system call. Parameters
+ are hexadecimal integer values, either the actual values in case
+ of scalar datatypes, pointers to target buffer space in case of
+ compound datatypes and unspecified memory areas, or pointer/length
+ pairs in case of string parameters. These are appended to the
+ CALL-ID as a comma-delimited list. All values are transmitted in
+ ASCII string representation, pointer/length pairs separated by a
+ slash.
+
+
+
+File: gdb.info, Node: The F Reply Packet, Next: The Ctrl-C Message, Prev: The F Request Packet, Up: File-I/O Remote Protocol Extension
+
+E.13.4 The `F' Reply Packet
+---------------------------
+
+The `F' reply packet has the following format:
+
+`FRETCODE,ERRNO,CTRL-C FLAG;CALL-SPECIFIC ATTACHMENT'
+ RETCODE is the return code of the system call as hexadecimal value.
+
+ ERRNO is the `errno' set by the call, in protocol-specific
+ representation. This parameter can be omitted if the call was
+ successful.
+
+ CTRL-C FLAG is only sent if the user requested a break. In this
+ case, ERRNO must be sent as well, even if the call was successful.
+ The CTRL-C FLAG itself consists of the character `C':
+
+ F0,0,C
+
+ or, if the call was interrupted before the host call has been
+ performed:
+
+ F-1,4,C
+
+ assuming 4 is the protocol-specific representation of `EINTR'.
+
+
+
+File: gdb.info, Node: The Ctrl-C Message, Next: Console I/O, Prev: The F Reply Packet, Up: File-I/O Remote Protocol Extension
+
+E.13.5 The `Ctrl-C' Message
+---------------------------
+
+If the `Ctrl-C' flag is set in the GDB reply packet (*note The F Reply
+Packet::), the target should behave as if it had gotten a break
+message. The meaning for the target is "system call interrupted by
+`SIGINT'". Consequentially, the target should actually stop (as with a
+break message) and return to GDB with a `T02' packet.
+
+ It's important for the target to know in which state the system call
+was interrupted. There are two possible cases:
+
+ * The system call hasn't been performed on the host yet.
+
+ * The system call on the host has been finished.
+
+
+ These two states can be distinguished by the target by the value of
+the returned `errno'. If it's the protocol representation of `EINTR',
+the system call hasn't been performed. This is equivalent to the
+`EINTR' handling on POSIX systems. In any other case, the target may
+presume that the system call has been finished -- successfully or not
+-- and should behave as if the break message arrived right after the
+system call.
+
+ GDB must behave reliably. If the system call has not been called
+yet, GDB may send the `F' reply immediately, setting `EINTR' as `errno'
+in the packet. If the system call on the host has been finished before
+the user requests a break, the full action must be finished by GDB.
+This requires sending `M' or `X' packets as necessary. The `F' packet
+may only be sent when either nothing has happened or the full action
+has been completed.
+
+
+File: gdb.info, Node: Console I/O, Next: List of Supported Calls, Prev: The Ctrl-C Message, Up: File-I/O Remote Protocol Extension
+
+E.13.6 Console I/O
+------------------
+
+By default and if not explicitly closed by the target system, the file
+descriptors 0, 1 and 2 are connected to the GDB console. Output on the
+GDB console is handled as any other file output operation (`write(1,
+...)' or `write(2, ...)'). Console input is handled by GDB so that
+after the target read request from file descriptor 0 all following
+typing is buffered until either one of the following conditions is met:
+
+ * The user types `Ctrl-c'. The behaviour is as explained above, and
+ the `read' system call is treated as finished.
+
+ * The user presses <RET>. This is treated as end of input with a
+ trailing newline.
+
+ * The user types `Ctrl-d'. This is treated as end of input. No
+ trailing character (neither newline nor `Ctrl-D') is appended to
+ the input.
+
+
+ If the user has typed more characters than fit in the buffer given to
+the `read' call, the trailing characters are buffered in GDB until
+either another `read(0, ...)' is requested by the target, or debugging
+is stopped at the user's request.
+
+
+File: gdb.info, Node: List of Supported Calls, Next: Protocol-specific Representation of Datatypes, Prev: Console I/O, Up: File-I/O Remote Protocol Extension
+
+E.13.7 List of Supported Calls
+------------------------------
+
+* Menu:
+
+* open::
+* close::
+* read::
+* write::
+* lseek::
+* rename::
+* unlink::
+* stat/fstat::
+* gettimeofday::
+* isatty::
+* system::
+
+
+File: gdb.info, Node: open, Next: close, Up: List of Supported Calls
+
+open
+....
+
+Synopsis:
+ int open(const char *pathname, int flags);
+ int open(const char *pathname, int flags, mode_t mode);
+
+Request:
+ `Fopen,PATHPTR/LEN,FLAGS,MODE'
+
+ FLAGS is the bitwise `OR' of the following values:
+
+ `O_CREAT'
+ If the file does not exist it will be created. The host
+ rules apply as far as file ownership and time stamps are
+ concerned.
+
+ `O_EXCL'
+ When used with `O_CREAT', if the file already exists it is an
+ error and open() fails.
+
+ `O_TRUNC'
+ If the file already exists and the open mode allows writing
+ (`O_RDWR' or `O_WRONLY' is given) it will be truncated to
+ zero length.
+
+ `O_APPEND'
+ The file is opened in append mode.
+
+ `O_RDONLY'
+ The file is opened for reading only.
+
+ `O_WRONLY'
+ The file is opened for writing only.
+
+ `O_RDWR'
+ The file is opened for reading and writing.
+
+ Other bits are silently ignored.
+
+ MODE is the bitwise `OR' of the following values:
+
+ `S_IRUSR'
+ User has read permission.
+
+ `S_IWUSR'
+ User has write permission.
+
+ `S_IRGRP'
+ Group has read permission.
+
+ `S_IWGRP'
+ Group has write permission.
+
+ `S_IROTH'
+ Others have read permission.
+
+ `S_IWOTH'
+ Others have write permission.
+
+ Other bits are silently ignored.
+
+Return value:
+ `open' returns the new file descriptor or -1 if an error occurred.
+
+Errors:
+
+ `EEXIST'
+ PATHNAME already exists and `O_CREAT' and `O_EXCL' were used.
+
+ `EISDIR'
+ PATHNAME refers to a directory.
+
+ `EACCES'
+ The requested access is not allowed.
+
+ `ENAMETOOLONG'
+ PATHNAME was too long.
+
+ `ENOENT'
+ A directory component in PATHNAME does not exist.
+
+ `ENODEV'
+ PATHNAME refers to a device, pipe, named pipe or socket.
+
+ `EROFS'
+ PATHNAME refers to a file on a read-only filesystem and write
+ access was requested.
+
+ `EFAULT'
+ PATHNAME is an invalid pointer value.
+
+ `ENOSPC'
+ No space on device to create the file.
+
+ `EMFILE'
+ The process already has the maximum number of files open.
+
+ `ENFILE'
+ The limit on the total number of files open on the system has
+ been reached.
+
+ `EINTR'
+ The call was interrupted by the user.
+
+
+
+File: gdb.info, Node: close, Next: read, Prev: open, Up: List of Supported Calls
+
+close
+.....
+
+Synopsis:
+ int close(int fd);
+
+Request:
+ `Fclose,FD'
+
+Return value:
+ `close' returns zero on success, or -1 if an error occurred.
+
+Errors:
+
+ `EBADF'
+ FD isn't a valid open file descriptor.
+
+ `EINTR'
+ The call was interrupted by the user.
+
+
+
+File: gdb.info, Node: read, Next: write, Prev: close, Up: List of Supported Calls
+
+read
+....
+
+Synopsis:
+ int read(int fd, void *buf, unsigned int count);
+
+Request:
+ `Fread,FD,BUFPTR,COUNT'
+
+Return value:
+ On success, the number of bytes read is returned. Zero indicates
+ end of file. If count is zero, read returns zero as well. On
+ error, -1 is returned.
+
+Errors:
+
+ `EBADF'
+ FD is not a valid file descriptor or is not open for reading.
+
+ `EFAULT'
+ BUFPTR is an invalid pointer value.
+
+ `EINTR'
+ The call was interrupted by the user.
+
+
+
+File: gdb.info, Node: write, Next: lseek, Prev: read, Up: List of Supported Calls
+
+write
+.....
+
+Synopsis:
+ int write(int fd, const void *buf, unsigned int count);
+
+Request:
+ `Fwrite,FD,BUFPTR,COUNT'
+
+Return value:
+ On success, the number of bytes written are returned. Zero
+ indicates nothing was written. On error, -1 is returned.
+
+Errors:
+
+ `EBADF'
+ FD is not a valid file descriptor or is not open for writing.
+
+ `EFAULT'
+ BUFPTR is an invalid pointer value.
+
+ `EFBIG'
+ An attempt was made to write a file that exceeds the
+ host-specific maximum file size allowed.
+
+ `ENOSPC'
+ No space on device to write the data.
+
+ `EINTR'
+ The call was interrupted by the user.
+
+
+
+File: gdb.info, Node: lseek, Next: rename, Prev: write, Up: List of Supported Calls
+
+lseek
+.....
+
+Synopsis:
+ long lseek (int fd, long offset, int flag);
+
+Request:
+ `Flseek,FD,OFFSET,FLAG'
+
+ FLAG is one of:
+
+ `SEEK_SET'
+ The offset is set to OFFSET bytes.
+
+ `SEEK_CUR'
+ The offset is set to its current location plus OFFSET bytes.
+
+ `SEEK_END'
+ The offset is set to the size of the file plus OFFSET bytes.
+
+Return value:
+ On success, the resulting unsigned offset in bytes from the
+ beginning of the file is returned. Otherwise, a value of -1 is
+ returned.
+
+Errors:
+
+ `EBADF'
+ FD is not a valid open file descriptor.
+
+ `ESPIPE'
+ FD is associated with the GDB console.
+
+ `EINVAL'
+ FLAG is not a proper value.
+
+ `EINTR'
+ The call was interrupted by the user.
+
+
+
+File: gdb.info, Node: rename, Next: unlink, Prev: lseek, Up: List of Supported Calls
+
+rename
+......
+
+Synopsis:
+ int rename(const char *oldpath, const char *newpath);
+
+Request:
+ `Frename,OLDPATHPTR/LEN,NEWPATHPTR/LEN'
+
+Return value:
+ On success, zero is returned. On error, -1 is returned.
+
+Errors:
+
+ `EISDIR'
+ NEWPATH is an existing directory, but OLDPATH is not a
+ directory.
+
+ `EEXIST'
+ NEWPATH is a non-empty directory.
+
+ `EBUSY'
+ OLDPATH or NEWPATH is a directory that is in use by some
+ process.
+
+ `EINVAL'
+ An attempt was made to make a directory a subdirectory of
+ itself.
+
+ `ENOTDIR'
+ A component used as a directory in OLDPATH or new path is
+ not a directory. Or OLDPATH is a directory and NEWPATH
+ exists but is not a directory.
+
+ `EFAULT'
+ OLDPATHPTR or NEWPATHPTR are invalid pointer values.
+
+ `EACCES'
+ No access to the file or the path of the file.
+
+ `ENAMETOOLONG'
+ OLDPATH or NEWPATH was too long.
+
+ `ENOENT'
+ A directory component in OLDPATH or NEWPATH does not exist.
+
+ `EROFS'
+ The file is on a read-only filesystem.
+
+ `ENOSPC'
+ The device containing the file has no room for the new
+ directory entry.
+
+ `EINTR'
+ The call was interrupted by the user.
+
+
+
+File: gdb.info, Node: unlink, Next: stat/fstat, Prev: rename, Up: List of Supported Calls
+
+unlink
+......
+
+Synopsis:
+ int unlink(const char *pathname);
+
+Request:
+ `Funlink,PATHNAMEPTR/LEN'
+
+Return value:
+ On success, zero is returned. On error, -1 is returned.
+
+Errors:
+
+ `EACCES'
+ No access to the file or the path of the file.
+
+ `EPERM'
+ The system does not allow unlinking of directories.
+
+ `EBUSY'
+ The file PATHNAME cannot be unlinked because it's being used
+ by another process.
+
+ `EFAULT'
+ PATHNAMEPTR is an invalid pointer value.
+
+ `ENAMETOOLONG'
+ PATHNAME was too long.
+
+ `ENOENT'
+ A directory component in PATHNAME does not exist.
+
+ `ENOTDIR'
+ A component of the path is not a directory.
+
+ `EROFS'
+ The file is on a read-only filesystem.
+
+ `EINTR'
+ The call was interrupted by the user.
+
+
+
+File: gdb.info, Node: stat/fstat, Next: gettimeofday, Prev: unlink, Up: List of Supported Calls
+
+stat/fstat
+..........
+
+Synopsis:
+ int stat(const char *pathname, struct stat *buf);
+ int fstat(int fd, struct stat *buf);
+
+Request:
+ `Fstat,PATHNAMEPTR/LEN,BUFPTR'
+ `Ffstat,FD,BUFPTR'
+
+Return value:
+ On success, zero is returned. On error, -1 is returned.
+
+Errors:
+
+ `EBADF'
+ FD is not a valid open file.
+
+ `ENOENT'
+ A directory component in PATHNAME does not exist or the path
+ is an empty string.
+
+ `ENOTDIR'
+ A component of the path is not a directory.
+
+ `EFAULT'
+ PATHNAMEPTR is an invalid pointer value.
+
+ `EACCES'
+ No access to the file or the path of the file.
+
+ `ENAMETOOLONG'
+ PATHNAME was too long.
+
+ `EINTR'
+ The call was interrupted by the user.
+
+
+
+File: gdb.info, Node: gettimeofday, Next: isatty, Prev: stat/fstat, Up: List of Supported Calls
+
+gettimeofday
+............
+
+Synopsis:
+ int gettimeofday(struct timeval *tv, void *tz);
+
+Request:
+ `Fgettimeofday,TVPTR,TZPTR'
+
+Return value:
+ On success, 0 is returned, -1 otherwise.
+
+Errors:
+
+ `EINVAL'
+ TZ is a non-NULL pointer.
+
+ `EFAULT'
+ TVPTR and/or TZPTR is an invalid pointer value.
+
+
+
+File: gdb.info, Node: isatty, Next: system, Prev: gettimeofday, Up: List of Supported Calls
+
+isatty
+......
+
+Synopsis:
+ int isatty(int fd);
+
+Request:
+ `Fisatty,FD'
+
+Return value:
+ Returns 1 if FD refers to the GDB console, 0 otherwise.
+
+Errors:
+
+ `EINTR'
+ The call was interrupted by the user.
+
+
+ Note that the `isatty' call is treated as a special case: it returns
+1 to the target if the file descriptor is attached to the GDB console,
+0 otherwise. Implementing through system calls would require
+implementing `ioctl' and would be more complex than needed.
+
+
+File: gdb.info, Node: system, Prev: isatty, Up: List of Supported Calls
+
+system
+......
+
+Synopsis:
+ int system(const char *command);
+
+Request:
+ `Fsystem,COMMANDPTR/LEN'
+
+Return value:
+ If LEN is zero, the return value indicates whether a shell is
+ available. A zero return value indicates a shell is not available.
+ For non-zero LEN, the value returned is -1 on error and the return
+ status of the command otherwise. Only the exit status of the
+ command is returned, which is extracted from the host's `system'
+ return value by calling `WEXITSTATUS(retval)'. In case `/bin/sh'
+ could not be executed, 127 is returned.
+
+Errors:
+
+ `EINTR'
+ The call was interrupted by the user.
+
+
+ GDB takes over the full task of calling the necessary host calls to
+perform the `system' call. The return value of `system' on the host is
+simplified before it's returned to the target. Any termination signal
+information from the child process is discarded, and the return value
+consists entirely of the exit status of the called command.
+
+ Due to security concerns, the `system' call is by default refused by
+GDB. The user has to allow this call explicitly with the `set remote
+system-call-allowed 1' command.
+
+`set remote system-call-allowed'
+ Control whether to allow the `system' calls in the File I/O
+ protocol for the remote target. The default is zero (disabled).
+
+`show remote system-call-allowed'
+ Show whether the `system' calls are allowed in the File I/O
+ protocol.
+
+
+File: gdb.info, Node: Protocol-specific Representation of Datatypes, Next: Constants, Prev: List of Supported Calls, Up: File-I/O Remote Protocol Extension
+
+E.13.8 Protocol-specific Representation of Datatypes
+----------------------------------------------------
+
+* Menu:
+
+* Integral Datatypes::
+* Pointer Values::
+* Memory Transfer::
+* struct stat::
+* struct timeval::
+
+
+File: gdb.info, Node: Integral Datatypes, Next: Pointer Values, Up: Protocol-specific Representation of Datatypes
+
+Integral Datatypes
+..................
+
+The integral datatypes used in the system calls are `int', `unsigned
+int', `long', `unsigned long', `mode_t', and `time_t'.
+
+ `int', `unsigned int', `mode_t' and `time_t' are implemented as 32
+bit values in this protocol.
+
+ `long' and `unsigned long' are implemented as 64 bit types.
+
+ *Note Limits::, for corresponding MIN and MAX values (similar to
+those in `limits.h') to allow range checking on host and target.
+
+ `time_t' datatypes are defined as seconds since the Epoch.
+
+ All integral datatypes transferred as part of a memory read or write
+of a structured datatype e.g. a `struct stat' have to be given in big
+endian byte order.
+
+
+File: gdb.info, Node: Pointer Values, Next: Memory Transfer, Prev: Integral Datatypes, Up: Protocol-specific Representation of Datatypes
+
+Pointer Values
+..............
+
+Pointers to target data are transmitted as they are. An exception is
+made for pointers to buffers for which the length isn't transmitted as
+part of the function call, namely strings. Strings are transmitted as
+a pointer/length pair, both as hex values, e.g.
+
+ `1aaf/12'
+
+which is a pointer to data of length 18 bytes at position 0x1aaf. The
+length is defined as the full string length in bytes, including the
+trailing null byte. For example, the string `"hello world"' at address
+0x123456 is transmitted as
+
+ `123456/d'
+
+
+File: gdb.info, Node: Memory Transfer, Next: struct stat, Prev: Pointer Values, Up: Protocol-specific Representation of Datatypes
+
+Memory Transfer
+...............
+
+Structured data which is transferred using a memory read or write (for
+example, a `struct stat') is expected to be in a protocol-specific
+format with all scalar multibyte datatypes being big endian.
+Translation to this representation needs to be done both by the target
+before the `F' packet is sent, and by GDB before it transfers memory to
+the target. Transferred pointers to structured data should point to
+the already-coerced data at any time.
+
+
+File: gdb.info, Node: struct stat, Next: struct timeval, Prev: Memory Transfer, Up: Protocol-specific Representation of Datatypes
+
+struct stat
+...........
+
+The buffer of type `struct stat' used by the target and GDB is defined
+as follows:
+
+ struct stat {
+ unsigned int st_dev; /* device */
+ unsigned int st_ino; /* inode */
+ mode_t st_mode; /* protection */
+ unsigned int st_nlink; /* number of hard links */
+ unsigned int st_uid; /* user ID of owner */
+ unsigned int st_gid; /* group ID of owner */
+ unsigned int st_rdev; /* device type (if inode device) */
+ unsigned long st_size; /* total size, in bytes */
+ unsigned long st_blksize; /* blocksize for filesystem I/O */
+ unsigned long st_blocks; /* number of blocks allocated */
+ time_t st_atime; /* time of last access */
+ time_t st_mtime; /* time of last modification */
+ time_t st_ctime; /* time of last change */
+ };
+
+ The integral datatypes conform to the definitions given in the
+appropriate section (see *note Integral Datatypes::, for details) so
+this structure is of size 64 bytes.
+
+ The values of several fields have a restricted meaning and/or range
+of values.
+
+`st_dev'
+ A value of 0 represents a file, 1 the console.
+
+`st_ino'
+ No valid meaning for the target. Transmitted unchanged.
+
+`st_mode'
+ Valid mode bits are described in *note Constants::. Any other
+ bits have currently no meaning for the target.
+
+`st_uid'
+`st_gid'
+`st_rdev'
+ No valid meaning for the target. Transmitted unchanged.
+
+`st_atime'
+`st_mtime'
+`st_ctime'
+ These values have a host and file system dependent accuracy.
+ Especially on Windows hosts, the file system may not support exact
+ timing values.
+
+ The target gets a `struct stat' of the above representation and is
+responsible for coercing it to the target representation before
+continuing.
+
+ Note that due to size differences between the host, target, and
+protocol representations of `struct stat' members, these members could
+eventually get truncated on the target.
+
+
+File: gdb.info, Node: struct timeval, Prev: struct stat, Up: Protocol-specific Representation of Datatypes
+
+struct timeval
+..............
+
+The buffer of type `struct timeval' used by the File-I/O protocol is
+defined as follows:
+
+ struct timeval {
+ time_t tv_sec; /* second */
+ long tv_usec; /* microsecond */
+ };
+
+ The integral datatypes conform to the definitions given in the
+appropriate section (see *note Integral Datatypes::, for details) so
+this structure is of size 8 bytes.
+
+
+File: gdb.info, Node: Constants, Next: File-I/O Examples, Prev: Protocol-specific Representation of Datatypes, Up: File-I/O Remote Protocol Extension
+
+E.13.9 Constants
+----------------
+
+The following values are used for the constants inside of the protocol.
+GDB and target are responsible for translating these values before and
+after the call as needed.
+
+* Menu:
+
+* Open Flags::
+* mode_t Values::
+* Errno Values::
+* Lseek Flags::
+* Limits::
+
+
+File: gdb.info, Node: Open Flags, Next: mode_t Values, Up: Constants
+
+Open Flags
+..........
+
+All values are given in hexadecimal representation.
+
+ O_RDONLY 0x0
+ O_WRONLY 0x1
+ O_RDWR 0x2
+ O_APPEND 0x8
+ O_CREAT 0x200
+ O_TRUNC 0x400
+ O_EXCL 0x800
+
+
+File: gdb.info, Node: mode_t Values, Next: Errno Values, Prev: Open Flags, Up: Constants
+
+mode_t Values
+.............
+
+All values are given in octal representation.
+
+ S_IFREG 0100000
+ S_IFDIR 040000
+ S_IRUSR 0400
+ S_IWUSR 0200
+ S_IXUSR 0100
+ S_IRGRP 040
+ S_IWGRP 020
+ S_IXGRP 010
+ S_IROTH 04
+ S_IWOTH 02
+ S_IXOTH 01
+
+
+File: gdb.info, Node: Errno Values, Next: Lseek Flags, Prev: mode_t Values, Up: Constants
+
+Errno Values
+............
+
+All values are given in decimal representation.
+
+ EPERM 1
+ ENOENT 2
+ EINTR 4
+ EBADF 9
+ EACCES 13
+ EFAULT 14
+ EBUSY 16
+ EEXIST 17
+ ENODEV 19
+ ENOTDIR 20
+ EISDIR 21
+ EINVAL 22
+ ENFILE 23
+ EMFILE 24
+ EFBIG 27
+ ENOSPC 28
+ ESPIPE 29
+ EROFS 30
+ ENAMETOOLONG 91
+ EUNKNOWN 9999
+
+ `EUNKNOWN' is used as a fallback error value if a host system returns
+ any error value not in the list of supported error numbers.
+
+
+File: gdb.info, Node: Lseek Flags, Next: Limits, Prev: Errno Values, Up: Constants
+
+Lseek Flags
+...........
+
+ SEEK_SET 0
+ SEEK_CUR 1
+ SEEK_END 2
+
+
+File: gdb.info, Node: Limits, Prev: Lseek Flags, Up: Constants
+
+Limits
+......
+
+All values are given in decimal representation.
+
+ INT_MIN -2147483648
+ INT_MAX 2147483647
+ UINT_MAX 4294967295
+ LONG_MIN -9223372036854775808
+ LONG_MAX 9223372036854775807
+ ULONG_MAX 18446744073709551615
+
+
+File: gdb.info, Node: File-I/O Examples, Prev: Constants, Up: File-I/O Remote Protocol Extension
+
+E.13.10 File-I/O Examples
+-------------------------
+
+Example sequence of a write call, file descriptor 3, buffer is at target
+address 0x1234, 6 bytes should be written:
+
+ <- `Fwrite,3,1234,6'
+ _request memory read from target_
+ -> `m1234,6'
+ <- XXXXXX
+ _return "6 bytes written"_
+ -> `F6'
+
+ Example sequence of a read call, file descriptor 3, buffer is at
+target address 0x1234, 6 bytes should be read:
+
+ <- `Fread,3,1234,6'
+ _request memory write to target_
+ -> `X1234,6:XXXXXX'
+ _return "6 bytes read"_
+ -> `F6'
+
+ Example sequence of a read call, call fails on the host due to
+invalid file descriptor (`EBADF'):
+
+ <- `Fread,3,1234,6'
+ -> `F-1,9'
+
+ Example sequence of a read call, user presses `Ctrl-c' before
+syscall on host is called:
+
+ <- `Fread,3,1234,6'
+ -> `F-1,4,C'
+ <- `T02'
+
+ Example sequence of a read call, user presses `Ctrl-c' after syscall
+on host is called:
+
+ <- `Fread,3,1234,6'
+ -> `X1234,6:XXXXXX'
+ <- `T02'
+
+
+File: gdb.info, Node: Library List Format, Next: Memory Map Format, Prev: File-I/O Remote Protocol Extension, Up: Remote Protocol
+
+E.14 Library List Format
+========================
+
+On some platforms, a dynamic loader (e.g. `ld.so') runs in the same
+process as your application to manage libraries. In this case, GDB can
+use the loader's symbol table and normal memory operations to maintain
+a list of shared libraries. On other platforms, the operating system
+manages loaded libraries. GDB can not retrieve the list of currently
+loaded libraries through memory operations, so it uses the
+`qXfer:libraries:read' packet (*note qXfer library list read::)
+instead. The remote stub queries the target's operating system and
+reports which libraries are loaded.
+
+ The `qXfer:libraries:read' packet returns an XML document which
+lists loaded libraries and their offsets. Each library has an
+associated name and one or more segment or section base addresses,
+which report where the library was loaded in memory.
+
+ For the common case of libraries that are fully linked binaries, the
+library should have a list of segments. If the target supports dynamic
+linking of a relocatable object file, its library XML element should
+instead include a list of allocated sections. The segment or section
+bases are start addresses, not relocation offsets; they do not depend
+on the library's link-time base addresses.
+
+ GDB must be linked with the Expat library to support XML library
+lists. *Note Expat::.
+
+ A simple memory map, with one loaded library relocated by a single
+offset, looks like this:
+
+ <library-list>
+ <library name="/lib/libc.so.6">
+ <segment address="0x10000000"/>
+ </library>
+ </library-list>
+
+ Another simple memory map, with one loaded library with three
+allocated sections (.text, .data, .bss), looks like this:
+
+ <library-list>
+ <library name="sharedlib.o">
+ <section address="0x10000000"/>
+ <section address="0x20000000"/>
+ <section address="0x30000000"/>
+ </library>
+ </library-list>
+
+ The format of a library list is described by this DTD:
+
+ <!-- library-list: Root element with versioning -->
+ <!ELEMENT library-list (library)*>
+ <!ATTLIST library-list version CDATA #FIXED "1.0">
+ <!ELEMENT library (segment*, section*)>
+ <!ATTLIST library name CDATA #REQUIRED>
+ <!ELEMENT segment EMPTY>
+ <!ATTLIST segment address CDATA #REQUIRED>
+ <!ELEMENT section EMPTY>
+ <!ATTLIST section address CDATA #REQUIRED>
+
+ In addition, segments and section descriptors cannot be mixed within
+a single library element, and you must supply at least one segment or
+section for each library.
+
+
+File: gdb.info, Node: Memory Map Format, Next: Thread List Format, Prev: Library List Format, Up: Remote Protocol
+
+E.15 Memory Map Format
+======================
+
+To be able to write into flash memory, GDB needs to obtain a memory map
+from the target. This section describes the format of the memory map.
+
+ The memory map is obtained using the `qXfer:memory-map:read' (*note
+qXfer memory map read::) packet and is an XML document that lists
+memory regions.
+
+ GDB must be linked with the Expat library to support XML memory
+maps. *Note Expat::.
+
+ The top-level structure of the document is shown below:
+
+ <?xml version="1.0"?>
+ <!DOCTYPE memory-map
+ PUBLIC "+//IDN gnu.org//DTD GDB Memory Map V1.0//EN"
+ "http://sourceware.org/gdb/gdb-memory-map.dtd">
+ <memory-map>
+ region...
+ </memory-map>
+
+ Each region can be either:
+
+ * A region of RAM starting at ADDR and extending for LENGTH bytes
+ from there:
+
+ <memory type="ram" start="ADDR" length="LENGTH"/>
+
+ * A region of read-only memory:
+
+ <memory type="rom" start="ADDR" length="LENGTH"/>
+
+ * A region of flash memory, with erasure blocks BLOCKSIZE bytes in
+ length:
+
+ <memory type="flash" start="ADDR" length="LENGTH">
+ <property name="blocksize">BLOCKSIZE</property>
+ </memory>
+
+
+ Regions must not overlap. GDB assumes that areas of memory not
+covered by the memory map are RAM, and uses the ordinary `M' and `X'
+packets to write to addresses in such ranges.
+
+ The formal DTD for memory map format is given below:
+
+ <!-- ................................................... -->
+ <!-- Memory Map XML DTD ................................ -->
+ <!-- File: memory-map.dtd .............................. -->
+ <!-- .................................... .............. -->
+ <!-- memory-map.dtd -->
+ <!-- memory-map: Root element with versioning -->
+ <!ELEMENT memory-map (memory | property)>
+ <!ATTLIST memory-map version CDATA #FIXED "1.0.0">
+ <!ELEMENT memory (property)>
+ <!-- memory: Specifies a memory region,
+ and its type, or device. -->
+ <!ATTLIST memory type CDATA #REQUIRED
+ start CDATA #REQUIRED
+ length CDATA #REQUIRED
+ device CDATA #IMPLIED>
+ <!-- property: Generic attribute tag -->
+ <!ELEMENT property (#PCDATA | property)*>
+ <!ATTLIST property name CDATA #REQUIRED>
+
+
+File: gdb.info, Node: Thread List Format, Next: Traceframe Info Format, Prev: Memory Map Format, Up: Remote Protocol
+
+E.16 Thread List Format
+=======================
+
+To efficiently update the list of threads and their attributes, GDB
+issues the `qXfer:threads:read' packet (*note qXfer threads read::) and
+obtains the XML document with the following structure:
+
+ <?xml version="1.0"?>
+ <threads>
+ <thread id="id" core="0">
+ ... description ...
+ </thread>
+ </threads>
+
+ Each `thread' element must have the `id' attribute that identifies
+the thread (*note thread-id syntax::). The `core' attribute, if
+present, specifies which processor core the thread was last executing
+on. The content of the of `thread' element is interpreted as
+human-readable auxilliary information.
+
+
+File: gdb.info, Node: Traceframe Info Format, Prev: Thread List Format, Up: Remote Protocol
+
+E.17 Traceframe Info Format
+===========================
+
+To be able to know which objects in the inferior can be examined when
+inspecting a tracepoint hit, GDB needs to obtain the list of memory
+ranges, registers and trace state variables that have been collected in
+a traceframe.
+
+ This list is obtained using the `qXfer:traceframe-info:read' (*note
+qXfer traceframe info read::) packet and is an XML document.
+
+ GDB must be linked with the Expat library to support XML traceframe
+info discovery. *Note Expat::.
+
+ The top-level structure of the document is shown below:
+
+ <?xml version="1.0"?>
+ <!DOCTYPE traceframe-info
+ PUBLIC "+//IDN gnu.org//DTD GDB Memory Map V1.0//EN"
+ "http://sourceware.org/gdb/gdb-traceframe-info.dtd">
+ <traceframe-info>
+ block...
+ </traceframe-info>
+
+ Each traceframe block can be either:
+
+ * A region of collected memory starting at ADDR and extending for
+ LENGTH bytes from there:
+
+ <memory start="ADDR" length="LENGTH"/>
+
+
+ The formal DTD for the traceframe info format is given below:
+
+ <!ELEMENT traceframe-info (memory)* >
+ <!ATTLIST traceframe-info version CDATA #FIXED "1.0">
+
+ <!ELEMENT memory EMPTY>
+ <!ATTLIST memory start CDATA #REQUIRED
+ length CDATA #REQUIRED>
+
+
+File: gdb.info, Node: Agent Expressions, Next: Target Descriptions, Prev: Remote Protocol, Up: Top
+
+Appendix F The GDB Agent Expression Mechanism
+*********************************************
+
+In some applications, it is not feasible for the debugger to interrupt
+the program's execution long enough for the developer to learn anything
+helpful about its behavior. If the program's correctness depends on its
+real-time behavior, delays introduced by a debugger might cause the
+program to fail, even when the code itself is correct. It is useful to
+be able to observe the program's behavior without interrupting it.
+
+ Using GDB's `trace' and `collect' commands, the user can specify
+locations in the program, and arbitrary expressions to evaluate when
+those locations are reached. Later, using the `tfind' command, she can
+examine the values those expressions had when the program hit the trace
+points. The expressions may also denote objects in memory --
+structures or arrays, for example -- whose values GDB should record;
+while visiting a particular tracepoint, the user may inspect those
+objects as if they were in memory at that moment. However, because GDB
+records these values without interacting with the user, it can do so
+quickly and unobtrusively, hopefully not disturbing the program's
+behavior.
+
+ When GDB is debugging a remote target, the GDB "agent" code running
+on the target computes the values of the expressions itself. To avoid
+having a full symbolic expression evaluator on the agent, GDB translates
+expressions in the source language into a simpler bytecode language, and
+then sends the bytecode to the agent; the agent then executes the
+bytecode, and records the values for GDB to retrieve later.
+
+ The bytecode language is simple; there are forty-odd opcodes, the
+bulk of which are the usual vocabulary of C operands (addition,
+subtraction, shifts, and so on) and various sizes of literals and
+memory reference operations. The bytecode interpreter operates
+strictly on machine-level values -- various sizes of integers and
+floating point numbers -- and requires no information about types or
+symbols; thus, the interpreter's internal data structures are simple,
+and each bytecode requires only a few native machine instructions to
+implement it. The interpreter is small, and strict limits on the
+memory and time required to evaluate an expression are easy to
+determine, making it suitable for use by the debugging agent in
+real-time applications.
+
+* Menu:
+
+* General Bytecode Design:: Overview of the interpreter.
+* Bytecode Descriptions:: What each one does.
+* Using Agent Expressions:: How agent expressions fit into the big picture.
+* Varying Target Capabilities:: How to discover what the target can do.
+* Rationale:: Why we did it this way.
+
+
+File: gdb.info, Node: General Bytecode Design, Next: Bytecode Descriptions, Up: Agent Expressions
+
+F.1 General Bytecode Design
+===========================
+
+The agent represents bytecode expressions as an array of bytes. Each
+instruction is one byte long (thus the term "bytecode"). Some
+instructions are followed by operand bytes; for example, the `goto'
+instruction is followed by a destination for the jump.
+
+ The bytecode interpreter is a stack-based machine; most instructions
+pop their operands off the stack, perform some operation, and push the
+result back on the stack for the next instruction to consume. Each
+element of the stack may contain either a integer or a floating point
+value; these values are as many bits wide as the largest integer that
+can be directly manipulated in the source language. Stack elements
+carry no record of their type; bytecode could push a value as an
+integer, then pop it as a floating point value. However, GDB will not
+generate code which does this. In C, one might define the type of a
+stack element as follows:
+ union agent_val {
+ LONGEST l;
+ DOUBLEST d;
+ };
+ where `LONGEST' and `DOUBLEST' are `typedef' names for the largest
+integer and floating point types on the machine.
+
+ By the time the bytecode interpreter reaches the end of the
+expression, the value of the expression should be the only value left
+on the stack. For tracing applications, `trace' bytecodes in the
+expression will have recorded the necessary data, and the value on the
+stack may be discarded. For other applications, like conditional
+breakpoints, the value may be useful.
+
+ Separate from the stack, the interpreter has two registers:
+`pc'
+ The address of the next bytecode to execute.
+
+`start'
+ The address of the start of the bytecode expression, necessary for
+ interpreting the `goto' and `if_goto' instructions.
+
+ Neither of these registers is directly visible to the bytecode
+language itself, but they are useful for defining the meanings of the
+bytecode operations.
+
+ There are no instructions to perform side effects on the running
+program, or call the program's functions; we assume that these
+expressions are only used for unobtrusive debugging, not for patching
+the running code.
+
+ Most bytecode instructions do not distinguish between the various
+sizes of values, and operate on full-width values; the upper bits of the
+values are simply ignored, since they do not usually make a difference
+to the value computed. The exceptions to this rule are:
+memory reference instructions (`ref'N)
+ There are distinct instructions to fetch different word sizes from
+ memory. Once on the stack, however, the values are treated as
+ full-size integers. They may need to be sign-extended; the `ext'
+ instruction exists for this purpose.
+
+the sign-extension instruction (`ext' N)
+ These clearly need to know which portion of their operand is to be
+ extended to occupy the full length of the word.
+
+
+ If the interpreter is unable to evaluate an expression completely for
+some reason (a memory location is inaccessible, or a divisor is zero,
+for example), we say that interpretation "terminates with an error".
+This means that the problem is reported back to the interpreter's caller
+in some helpful way. In general, code using agent expressions should
+assume that they may attempt to divide by zero, fetch arbitrary memory
+locations, and misbehave in other ways.
+
+ Even complicated C expressions compile to a few bytecode
+instructions; for example, the expression `x + y * z' would typically
+produce code like the following, assuming that `x' and `y' live in
+registers, and `z' is a global variable holding a 32-bit `int':
+ reg 1
+ reg 2
+ const32 address of z
+ ref32
+ ext 32
+ mul
+ add
+ end
+
+ In detail, these mean:
+`reg 1'
+ Push the value of register 1 (presumably holding `x') onto the
+ stack.
+
+`reg 2'
+ Push the value of register 2 (holding `y').
+
+`const32 address of z'
+ Push the address of `z' onto the stack.
+
+`ref32'
+ Fetch a 32-bit word from the address at the top of the stack;
+ replace the address on the stack with the value. Thus, we replace
+ the address of `z' with `z''s value.
+
+`ext 32'
+ Sign-extend the value on the top of the stack from 32 bits to full
+ length. This is necessary because `z' is a signed integer.
+
+`mul'
+ Pop the top two numbers on the stack, multiply them, and push their
+ product. Now the top of the stack contains the value of the
+ expression `y * z'.
+
+`add'
+ Pop the top two numbers, add them, and push the sum. Now the top
+ of the stack contains the value of `x + y * z'.
+
+`end'
+ Stop executing; the value left on the stack top is the value to be
+ recorded.
+
+
+
+File: gdb.info, Node: Bytecode Descriptions, Next: Using Agent Expressions, Prev: General Bytecode Design, Up: Agent Expressions
+
+F.2 Bytecode Descriptions
+=========================
+
+Each bytecode description has the following form:
+
+`add' (0x02): A B => A+B
+ Pop the top two stack items, A and B, as integers; push their sum,
+ as an integer.
+
+
+ In this example, `add' is the name of the bytecode, and `(0x02)' is
+the one-byte value used to encode the bytecode, in hexadecimal. The
+phrase "A B => A+B" shows the stack before and after the bytecode
+executes. Beforehand, the stack must contain at least two values, A
+and B; since the top of the stack is to the right, B is on the top of
+the stack, and A is underneath it. After execution, the bytecode will
+have popped A and B from the stack, and replaced them with a single
+value, A+B. There may be other values on the stack below those shown,
+but the bytecode affects only those shown.
+
+ Here is another example:
+
+`const8' (0x22) N: => N
+ Push the 8-bit integer constant N on the stack, without sign
+ extension.
+
+
+ In this example, the bytecode `const8' takes an operand N directly
+from the bytecode stream; the operand follows the `const8' bytecode
+itself. We write any such operands immediately after the name of the
+bytecode, before the colon, and describe the exact encoding of the
+operand in the bytecode stream in the body of the bytecode description.
+
+ For the `const8' bytecode, there are no stack items given before the
+=>; this simply means that the bytecode consumes no values from the
+stack. If a bytecode consumes no values, or produces no values, the
+list on either side of the => may be empty.
+
+ If a value is written as A, B, or N, then the bytecode treats it as
+an integer. If a value is written is ADDR, then the bytecode treats it
+as an address.
+
+ We do not fully describe the floating point operations here; although
+this design can be extended in a clean way to handle floating point
+values, they are not of immediate interest to the customer, so we avoid
+describing them, to save time.
+
+`float' (0x01): =>
+ Prefix for floating-point bytecodes. Not implemented yet.
+
+`add' (0x02): A B => A+B
+ Pop two integers from the stack, and push their sum, as an integer.
+
+`sub' (0x03): A B => A-B
+ Pop two integers from the stack, subtract the top value from the
+ next-to-top value, and push the difference.
+
+`mul' (0x04): A B => A*B
+ Pop two integers from the stack, multiply them, and push the
+ product on the stack. Note that, when one multiplies two N-bit
+ numbers yielding another N-bit number, it is irrelevant whether the
+ numbers are signed or not; the results are the same.
+
+`div_signed' (0x05): A B => A/B
+ Pop two signed integers from the stack; divide the next-to-top
+ value by the top value, and push the quotient. If the divisor is
+ zero, terminate with an error.
+
+`div_unsigned' (0x06): A B => A/B
+ Pop two unsigned integers from the stack; divide the next-to-top
+ value by the top value, and push the quotient. If the divisor is
+ zero, terminate with an error.
+
+`rem_signed' (0x07): A B => A MODULO B
+ Pop two signed integers from the stack; divide the next-to-top
+ value by the top value, and push the remainder. If the divisor is
+ zero, terminate with an error.
+
+`rem_unsigned' (0x08): A B => A MODULO B
+ Pop two unsigned integers from the stack; divide the next-to-top
+ value by the top value, and push the remainder. If the divisor is
+ zero, terminate with an error.
+
+`lsh' (0x09): A B => A<<B
+ Pop two integers from the stack; let A be the next-to-top value,
+ and B be the top value. Shift A left by B bits, and push the
+ result.
+
+`rsh_signed' (0x0a): A B => `(signed)'A>>B
+ Pop two integers from the stack; let A be the next-to-top value,
+ and B be the top value. Shift A right by B bits, inserting copies
+ of the top bit at the high end, and push the result.
+
+`rsh_unsigned' (0x0b): A B => A>>B
+ Pop two integers from the stack; let A be the next-to-top value,
+ and B be the top value. Shift A right by B bits, inserting zero
+ bits at the high end, and push the result.
+
+`log_not' (0x0e): A => !A
+ Pop an integer from the stack; if it is zero, push the value one;
+ otherwise, push the value zero.
+
+`bit_and' (0x0f): A B => A&B
+ Pop two integers from the stack, and push their bitwise `and'.
+
+`bit_or' (0x10): A B => A|B
+ Pop two integers from the stack, and push their bitwise `or'.
+
+`bit_xor' (0x11): A B => A^B
+ Pop two integers from the stack, and push their bitwise
+ exclusive-`or'.
+
+`bit_not' (0x12): A => ~A
+ Pop an integer from the stack, and push its bitwise complement.
+
+`equal' (0x13): A B => A=B
+ Pop two integers from the stack; if they are equal, push the value
+ one; otherwise, push the value zero.
+
+`less_signed' (0x14): A B => A<B
+ Pop two signed integers from the stack; if the next-to-top value
+ is less than the top value, push the value one; otherwise, push
+ the value zero.
+
+`less_unsigned' (0x15): A B => A<B
+ Pop two unsigned integers from the stack; if the next-to-top value
+ is less than the top value, push the value one; otherwise, push
+ the value zero.
+
+`ext' (0x16) N: A => A, sign-extended from N bits
+ Pop an unsigned value from the stack; treating it as an N-bit
+ twos-complement value, extend it to full length. This means that
+ all bits to the left of bit N-1 (where the least significant bit
+ is bit 0) are set to the value of bit N-1. Note that N may be
+ larger than or equal to the width of the stack elements of the
+ bytecode engine; in this case, the bytecode should have no effect.
+
+ The number of source bits to preserve, N, is encoded as a single
+ byte unsigned integer following the `ext' bytecode.
+
+`zero_ext' (0x2a) N: A => A, zero-extended from N bits
+ Pop an unsigned value from the stack; zero all but the bottom N
+ bits. This means that all bits to the left of bit N-1 (where the
+ least significant bit is bit 0) are set to the value of bit N-1.
+
+ The number of source bits to preserve, N, is encoded as a single
+ byte unsigned integer following the `zero_ext' bytecode.
+
+`ref8' (0x17): ADDR => A
+`ref16' (0x18): ADDR => A
+`ref32' (0x19): ADDR => A
+`ref64' (0x1a): ADDR => A
+ Pop an address ADDR from the stack. For bytecode `ref'N, fetch an
+ N-bit value from ADDR, using the natural target endianness. Push
+ the fetched value as an unsigned integer.
+
+ Note that ADDR may not be aligned in any particular way; the
+ `refN' bytecodes should operate correctly for any address.
+
+ If attempting to access memory at ADDR would cause a processor
+ exception of some sort, terminate with an error.
+
+`ref_float' (0x1b): ADDR => D
+`ref_double' (0x1c): ADDR => D
+`ref_long_double' (0x1d): ADDR => D
+`l_to_d' (0x1e): A => D
+`d_to_l' (0x1f): D => A
+ Not implemented yet.
+
+`dup' (0x28): A => A A
+ Push another copy of the stack's top element.
+
+`swap' (0x2b): A B => B A
+ Exchange the top two items on the stack.
+
+`pop' (0x29): A =>
+ Discard the top value on the stack.
+
+`pick' (0x32) N: A ... B => A ... B A
+ Duplicate an item from the stack and push it on the top of the
+ stack. N, a single byte, indicates the stack item to copy. If N
+ is zero, this is the same as `dup'; if N is one, it copies the
+ item under the top item, etc. If N exceeds the number of items on
+ the stack, terminate with an error.
+
+`rot' (0x33): A B C => C B A
+ Rotate the top three items on the stack.
+
+`if_goto' (0x20) OFFSET: A =>
+ Pop an integer off the stack; if it is non-zero, branch to the
+ given offset in the bytecode string. Otherwise, continue to the
+ next instruction in the bytecode stream. In other words, if A is
+ non-zero, set the `pc' register to `start' + OFFSET. Thus, an
+ offset of zero denotes the beginning of the expression.
+
+ The OFFSET is stored as a sixteen-bit unsigned value, stored
+ immediately following the `if_goto' bytecode. It is always stored
+ most significant byte first, regardless of the target's normal
+ endianness. The offset is not guaranteed to fall at any particular
+ alignment within the bytecode stream; thus, on machines where
+ fetching a 16-bit on an unaligned address raises an exception, you
+ should fetch the offset one byte at a time.
+
+`goto' (0x21) OFFSET: =>
+ Branch unconditionally to OFFSET; in other words, set the `pc'
+ register to `start' + OFFSET.
+
+ The offset is stored in the same way as for the `if_goto' bytecode.
+
+`const8' (0x22) N: => N
+`const16' (0x23) N: => N
+`const32' (0x24) N: => N
+`const64' (0x25) N: => N
+ Push the integer constant N on the stack, without sign extension.
+ To produce a small negative value, push a small twos-complement
+ value, and then sign-extend it using the `ext' bytecode.
+
+ The constant N is stored in the appropriate number of bytes
+ following the `const'B bytecode. The constant N is always stored
+ most significant byte first, regardless of the target's normal
+ endianness. The constant is not guaranteed to fall at any
+ particular alignment within the bytecode stream; thus, on machines
+ where fetching a 16-bit on an unaligned address raises an
+ exception, you should fetch N one byte at a time.
+
+`reg' (0x26) N: => A
+ Push the value of register number N, without sign extension. The
+ registers are numbered following GDB's conventions.
+
+ The register number N is encoded as a 16-bit unsigned integer
+ immediately following the `reg' bytecode. It is always stored most
+ significant byte first, regardless of the target's normal
+ endianness. The register number is not guaranteed to fall at any
+ particular alignment within the bytecode stream; thus, on machines
+ where fetching a 16-bit on an unaligned address raises an
+ exception, you should fetch the register number one byte at a time.
+
+`getv' (0x2c) N: => V
+ Push the value of trace state variable number N, without sign
+ extension.
+
+ The variable number N is encoded as a 16-bit unsigned integer
+ immediately following the `getv' bytecode. It is always stored
+ most significant byte first, regardless of the target's normal
+ endianness. The variable number is not guaranteed to fall at any
+ particular alignment within the bytecode stream; thus, on machines
+ where fetching a 16-bit on an unaligned address raises an
+ exception, you should fetch the register number one byte at a time.
+
+`setv' (0x2d) N: => V
+ Set trace state variable number N to the value found on the top of
+ the stack. The stack is unchanged, so that the value is readily
+ available if the assignment is part of a larger expression. The
+ handling of N is as described for `getv'.
+
+`trace' (0x0c): ADDR SIZE =>
+ Record the contents of the SIZE bytes at ADDR in a trace buffer,
+ for later retrieval by GDB.
+
+`trace_quick' (0x0d) SIZE: ADDR => ADDR
+ Record the contents of the SIZE bytes at ADDR in a trace buffer,
+ for later retrieval by GDB. SIZE is a single byte unsigned
+ integer following the `trace' opcode.
+
+ This bytecode is equivalent to the sequence `dup const8 SIZE
+ trace', but we provide it anyway to save space in bytecode strings.
+
+`trace16' (0x30) SIZE: ADDR => ADDR
+ Identical to trace_quick, except that SIZE is a 16-bit big-endian
+ unsigned integer, not a single byte. This should probably have
+ been named `trace_quick16', for consistency.
+
+`tracev' (0x2e) N: => A
+ Record the value of trace state variable number N in the trace
+ buffer. The handling of N is as described for `getv'.
+
+`end' (0x27): =>
+ Stop executing bytecode; the result should be the top element of
+ the stack. If the purpose of the expression was to compute an
+ lvalue or a range of memory, then the next-to-top of the stack is
+ the lvalue's address, and the top of the stack is the lvalue's
+ size, in bytes.
+
+
+
+File: gdb.info, Node: Using Agent Expressions, Next: Varying Target Capabilities, Prev: Bytecode Descriptions, Up: Agent Expressions
+
+F.3 Using Agent Expressions
+===========================
+
+Agent expressions can be used in several different ways by GDB, and the
+debugger can generate different bytecode sequences as appropriate.
+
+ One possibility is to do expression evaluation on the target rather
+than the host, such as for the conditional of a conditional tracepoint.
+In such a case, GDB compiles the source expression into a bytecode
+sequence that simply gets values from registers or memory, does
+arithmetic, and returns a result.
+
+ Another way to use agent expressions is for tracepoint data
+collection. GDB generates a different bytecode sequence for
+collection; in addition to bytecodes that do the calculation, GDB adds
+`trace' bytecodes to save the pieces of memory that were used.
+
+ * The user selects trace points in the program's code at which GDB
+ should collect data.
+
+ * The user specifies expressions to evaluate at each trace point.
+ These expressions may denote objects in memory, in which case
+ those objects' contents are recorded as the program runs, or
+ computed values, in which case the values themselves are recorded.
+
+ * GDB transmits the tracepoints and their associated expressions to
+ the GDB agent, running on the debugging target.
+
+ * The agent arranges to be notified when a trace point is hit.
+
+ * When execution on the target reaches a trace point, the agent
+ evaluates the expressions associated with that trace point, and
+ records the resulting values and memory ranges.
+
+ * Later, when the user selects a given trace event and inspects the
+ objects and expression values recorded, GDB talks to the agent to
+ retrieve recorded data as necessary to meet the user's requests.
+ If the user asks to see an object whose contents have not been
+ recorded, GDB reports an error.
+
+
+
+File: gdb.info, Node: Varying Target Capabilities, Next: Rationale, Prev: Using Agent Expressions, Up: Agent Expressions
+
+F.4 Varying Target Capabilities
+===============================
+
+Some targets don't support floating-point, and some would rather not
+have to deal with `long long' operations. Also, different targets will
+have different stack sizes, and different bytecode buffer lengths.
+
+ Thus, GDB needs a way to ask the target about itself. We haven't
+worked out the details yet, but in general, GDB should be able to send
+the target a packet asking it to describe itself. The reply should be a
+packet whose length is explicit, so we can add new information to the
+packet in future revisions of the agent, without confusing old versions
+of GDB, and it should contain a version number. It should contain at
+least the following information:
+
+ * whether floating point is supported
+
+ * whether `long long' is supported
+
+ * maximum acceptable size of bytecode stack
+
+ * maximum acceptable length of bytecode expressions
+
+ * which registers are actually available for collection
+
+ * whether the target supports disabled tracepoints
+
+
+
+File: gdb.info, Node: Rationale, Prev: Varying Target Capabilities, Up: Agent Expressions
+
+F.5 Rationale
+=============
+
+Some of the design decisions apparent above are arguable.
+
+What about stack overflow/underflow?
+ GDB should be able to query the target to discover its stack size.
+ Given that information, GDB can determine at translation time
+ whether a given expression will overflow the stack. But this spec
+ isn't about what kinds of error-checking GDB ought to do.
+
+Why are you doing everything in LONGEST?
+ Speed isn't important, but agent code size is; using LONGEST
+ brings in a bunch of support code to do things like division, etc.
+ So this is a serious concern.
+
+ First, note that you don't need different bytecodes for different
+ operand sizes. You can generate code without _knowing_ how big the
+ stack elements actually are on the target. If the target only
+ supports 32-bit ints, and you don't send any 64-bit bytecodes,
+ everything just works. The observation here is that the MIPS and
+ the Alpha have only fixed-size registers, and you can still get
+ C's semantics even though most instructions only operate on
+ full-sized words. You just need to make sure everything is
+ properly sign-extended at the right times. So there is no need
+ for 32- and 64-bit variants of the bytecodes. Just implement
+ everything using the largest size you support.
+
+ GDB should certainly check to see what sizes the target supports,
+ so the user can get an error earlier, rather than later. But this
+ information is not necessary for correctness.
+
+Why don't you have `>' or `<=' operators?
+ I want to keep the interpreter small, and we don't need them. We
+ can combine the `less_' opcodes with `log_not', and swap the order
+ of the operands, yielding all four asymmetrical comparison
+ operators. For example, `(x <= y)' is `! (x > y)', which is `! (y
+ < x)'.
+
+Why do you have `log_not'?
+Why do you have `ext'?
+Why do you have `zero_ext'?
+ These are all easily synthesized from other instructions, but I
+ expect them to be used frequently, and they're simple, so I
+ include them to keep bytecode strings short.
+
+ `log_not' is equivalent to `const8 0 equal'; it's used in half the
+ relational operators.
+
+ `ext N' is equivalent to `const8 S-N lsh const8 S-N rsh_signed',
+ where S is the size of the stack elements; it follows `refM' and
+ REG bytecodes when the value should be signed. See the next
+ bulleted item.
+
+ `zero_ext N' is equivalent to `constM MASK log_and'; it's used
+ whenever we push the value of a register, because we can't assume
+ the upper bits of the register aren't garbage.
+
+Why not have sign-extending variants of the `ref' operators?
+ Because that would double the number of `ref' operators, and we
+ need the `ext' bytecode anyway for accessing bitfields.
+
+Why not have constant-address variants of the `ref' operators?
+ Because that would double the number of `ref' operators again, and
+ `const32 ADDRESS ref32' is only one byte longer.
+
+Why do the `refN' operators have to support unaligned fetches?
+ GDB will generate bytecode that fetches multi-byte values at
+ unaligned addresses whenever the executable's debugging
+ information tells it to. Furthermore, GDB does not know the value
+ the pointer will have when GDB generates the bytecode, so it
+ cannot determine whether a particular fetch will be aligned or not.
+
+ In particular, structure bitfields may be several bytes long, but
+ follow no alignment rules; members of packed structures are not
+ necessarily aligned either.
+
+ In general, there are many cases where unaligned references occur
+ in correct C code, either at the programmer's explicit request, or
+ at the compiler's discretion. Thus, it is simpler to make the GDB
+ agent bytecodes work correctly in all circumstances than to make
+ GDB guess in each case whether the compiler did the usual thing.
+
+Why are there no side-effecting operators?
+ Because our current client doesn't want them? That's a cheap
+ answer. I think the real answer is that I'm afraid of
+ implementing function calls. We should re-visit this issue after
+ the present contract is delivered.
+
+Why aren't the `goto' ops PC-relative?
+ The interpreter has the base address around anyway for PC bounds
+ checking, and it seemed simpler.
+
+Why is there only one offset size for the `goto' ops?
+ Offsets are currently sixteen bits. I'm not happy with this
+ situation either:
+
+ Suppose we have multiple branch ops with different offset sizes.
+ As I generate code left-to-right, all my jumps are forward jumps
+ (there are no loops in expressions), so I never know the target
+ when I emit the jump opcode. Thus, I have to either always assume
+ the largest offset size, or do jump relaxation on the code after I
+ generate it, which seems like a big waste of time.
+
+ I can imagine a reasonable expression being longer than 256 bytes.
+ I can't imagine one being longer than 64k. Thus, we need 16-bit
+ offsets. This kind of reasoning is so bogus, but relaxation is
+ pathetic.
+
+ The other approach would be to generate code right-to-left. Then
+ I'd always know my offset size. That might be fun.
+
+Where is the function call bytecode?
+ When we add side-effects, we should add this.
+
+Why does the `reg' bytecode take a 16-bit register number?
+ Intel's IA-64 architecture has 128 general-purpose registers, and
+ 128 floating-point registers, and I'm sure it has some random
+ control registers.
+
+Why do we need `trace' and `trace_quick'?
+ Because GDB needs to record all the memory contents and registers
+ an expression touches. If the user wants to evaluate an expression
+ `x->y->z', the agent must record the values of `x' and `x->y' as
+ well as the value of `x->y->z'.
+
+Don't the `trace' bytecodes make the interpreter less general?
+ They do mean that the interpreter contains special-purpose code,
+ but that doesn't mean the interpreter can only be used for that
+ purpose. If an expression doesn't use the `trace' bytecodes, they
+ don't get in its way.
+
+Why doesn't `trace_quick' consume its arguments the way everything else does?
+ In general, you do want your operators to consume their arguments;
+ it's consistent, and generally reduces the amount of stack
+ rearrangement necessary. However, `trace_quick' is a kludge to
+ save space; it only exists so we needn't write `dup const8 SIZE
+ trace' before every memory reference. Therefore, it's okay for it
+ not to consume its arguments; it's meant for a specific context in
+ which we know exactly what it should do with the stack. If we're
+ going to have a kludge, it should be an effective kludge.
+
+Why does `trace16' exist?
+ That opcode was added by the customer that contracted Cygnus for
+ the data tracing work. I personally think it is unnecessary;
+ objects that large will be quite rare, so it is okay to use `dup
+ const16 SIZE trace' in those cases.
+
+ Whatever we decide to do with `trace16', we should at least leave
+ opcode 0x30 reserved, to remain compatible with the customer who
+ added it.
+
+
+
+File: gdb.info, Node: Target Descriptions, Next: Operating System Information, Prev: Agent Expressions, Up: Top
+
+Appendix G Target Descriptions
+******************************
+
+*Warning:* target descriptions are still under active development, and
+the contents and format may change between GDB releases. The format is
+expected to stabilize in the future.
+
+ One of the challenges of using GDB to debug embedded systems is that
+there are so many minor variants of each processor architecture in use.
+It is common practice for vendors to start with a standard processor
+core -- ARM, PowerPC, or MIPS, for example -- and then make changes to
+adapt it to a particular market niche. Some architectures have
+hundreds of variants, available from dozens of vendors. This leads to
+a number of problems:
+
+ * With so many different customized processors, it is difficult for
+ the GDB maintainers to keep up with the changes.
+
+ * Since individual variants may have short lifetimes or limited
+ audiences, it may not be worthwhile to carry information about
+ every variant in the GDB source tree.
+
+ * When GDB does support the architecture of the embedded system at
+ hand, the task of finding the correct architecture name to give the
+ `set architecture' command can be error-prone.
+
+ To address these problems, the GDB remote protocol allows a target
+system to not only identify itself to GDB, but to actually describe its
+own features. This lets GDB support processor variants it has never
+seen before -- to the extent that the descriptions are accurate, and
+that GDB understands them.
+
+ GDB must be linked with the Expat library to support XML target
+descriptions. *Note Expat::.
+
+* Menu:
+
+* Retrieving Descriptions:: How descriptions are fetched from a target.
+* Target Description Format:: The contents of a target description.
+* Predefined Target Types:: Standard types available for target
+ descriptions.
+* Standard Target Features:: Features GDB knows about.
+
+
+File: gdb.info, Node: Retrieving Descriptions, Next: Target Description Format, Up: Target Descriptions
+
+G.1 Retrieving Descriptions
+===========================
+
+Target descriptions can be read from the target automatically, or
+specified by the user manually. The default behavior is to read the
+description from the target. GDB retrieves it via the remote protocol
+using `qXfer' requests (*note qXfer: General Query Packets.). The
+ANNEX in the `qXfer' packet will be `target.xml'. The contents of the
+`target.xml' annex are an XML document, of the form described in *note
+Target Description Format::.
+
+ Alternatively, you can specify a file to read for the target
+description. If a file is set, the target will not be queried. The
+commands to specify a file are:
+
+`set tdesc filename PATH'
+ Read the target description from PATH.
+
+`unset tdesc filename'
+ Do not read the XML target description from a file. GDB will use
+ the description supplied by the current target.
+
+`show tdesc filename'
+ Show the filename to read for a target description, if any.
+
+
+File: gdb.info, Node: Target Description Format, Next: Predefined Target Types, Prev: Retrieving Descriptions, Up: Target Descriptions
+
+G.2 Target Description Format
+=============================
+
+A target description annex is an XML (http://www.w3.org/XML/) document
+which complies with the Document Type Definition provided in the GDB
+sources in `gdb/features/gdb-target.dtd'. This means you can use
+generally available tools like `xmllint' to check that your feature
+descriptions are well-formed and valid. However, to help people
+unfamiliar with XML write descriptions for their targets, we also
+describe the grammar here.
+
+ Target descriptions can identify the architecture of the remote
+target and (for some architectures) provide information about custom
+register sets. They can also identify the OS ABI of the remote target.
+GDB can use this information to autoconfigure for your target, or to
+warn you if you connect to an unsupported target.
+
+ Here is a simple target description:
+
+ <target version="1.0">
+ <architecture>i386:x86-64</architecture>
+ </target>
+
+This minimal description only says that the target uses the x86-64
+architecture.
+
+ A target description has the following overall form, with [ ] marking
+optional elements and ... marking repeatable elements. The elements
+are explained further below.
+
+ <?xml version="1.0"?>
+ <!DOCTYPE target SYSTEM "gdb-target.dtd">
+ <target version="1.0">
+ [ARCHITECTURE]
+ [OSABI]
+ [COMPATIBLE]
+ [FEATURE...]
+ </target>
+
+The description is generally insensitive to whitespace and line breaks,
+under the usual common-sense rules. The XML version declaration and
+document type declaration can generally be omitted (GDB does not
+require them), but specifying them may be useful for XML validation
+tools. The `version' attribute for `<target>' may also be omitted, but
+we recommend including it; if future versions of GDB use an incompatible
+revision of `gdb-target.dtd', they will detect and report the version
+mismatch.
+
+G.2.1 Inclusion
+---------------
+
+It can sometimes be valuable to split a target description up into
+several different annexes, either for organizational purposes, or to
+share files between different possible target descriptions. You can
+divide a description into multiple files by replacing any element of
+the target description with an inclusion directive of the form:
+
+ <xi:include href="DOCUMENT"/>
+
+When GDB encounters an element of this form, it will retrieve the named
+XML DOCUMENT, and replace the inclusion directive with the contents of
+that document. If the current description was read using `qXfer', then
+so will be the included document; DOCUMENT will be interpreted as the
+name of an annex. If the current description was read from a file, GDB
+will look for DOCUMENT as a file in the same directory where it found
+the original description.
+
+G.2.2 Architecture
+------------------
+
+An `<architecture>' element has this form:
+
+ <architecture>ARCH</architecture>
+
+ ARCH is one of the architectures from the set accepted by `set
+architecture' (*note Specifying a Debugging Target: Targets.).
+
+G.2.3 OS ABI
+------------
+
+This optional field was introduced in GDB version 7.0. Previous
+versions of GDB ignore it.
+
+ An `<osabi>' element has this form:
+
+ <osabi>ABI-NAME</osabi>
+
+ ABI-NAME is an OS ABI name from the same selection accepted by
+`set osabi' (*note Configuring the Current ABI: ABI.).
+
+G.2.4 Compatible Architecture
+-----------------------------
+
+This optional field was introduced in GDB version 7.0. Previous
+versions of GDB ignore it.
+
+ A `<compatible>' element has this form:
+
+ <compatible>ARCH</compatible>
+
+ ARCH is one of the architectures from the set accepted by `set
+architecture' (*note Specifying a Debugging Target: Targets.).
+
+ A `<compatible>' element is used to specify that the target is able
+to run binaries in some other than the main target architecture given
+by the `<architecture>' element. For example, on the Cell Broadband
+Engine, the main architecture is `powerpc:common' or
+`powerpc:common64', but the system is able to run binaries in the `spu'
+architecture as well. The way to describe this capability with
+`<compatible>' is as follows:
+
+ <architecture>powerpc:common</architecture>
+ <compatible>spu</compatible>
+
+G.2.5 Features
+--------------
+
+Each `<feature>' describes some logical portion of the target system.
+Features are currently used to describe available CPU registers and the
+types of their contents. A `<feature>' element has this form:
+
+ <feature name="NAME">
+ [TYPE...]
+ REG...
+ </feature>
+
+Each feature's name should be unique within the description. The name
+of a feature does not matter unless GDB has some special knowledge of
+the contents of that feature; if it does, the feature should have its
+standard name. *Note Standard Target Features::.
+
+G.2.6 Types
+-----------
+
+Any register's value is a collection of bits which GDB must interpret.
+The default interpretation is a two's complement integer, but other
+types can be requested by name in the register description. Some
+predefined types are provided by GDB (*note Predefined Target Types::),
+and the description can define additional composite types.
+
+ Each type element must have an `id' attribute, which gives a unique
+(within the containing `<feature>') name to the type. Types must be
+defined before they are used.
+
+ Some targets offer vector registers, which can be treated as arrays
+of scalar elements. These types are written as `<vector>' elements,
+specifying the array element type, TYPE, and the number of elements,
+COUNT:
+
+ <vector id="ID" type="TYPE" count="COUNT"/>
+
+ If a register's value is usefully viewed in multiple ways, define it
+with a union type containing the useful representations. The `<union>'
+element contains one or more `<field>' elements, each of which has a
+NAME and a TYPE:
+
+ <union id="ID">
+ <field name="NAME" type="TYPE"/>
+ ...
+ </union>
+
+ If a register's value is composed from several separate values,
+define it with a structure type. There are two forms of the `<struct>'
+element; a `<struct>' element must either contain only bitfields or
+contain no bitfields. If the structure contains only bitfields, its
+total size in bytes must be specified, each bitfield must have an
+explicit start and end, and bitfields are automatically assigned an
+integer type. The field's START should be less than or equal to its
+END, and zero represents the least significant bit.
+
+ <struct id="ID" size="SIZE">
+ <field name="NAME" start="START" end="END"/>
+ ...
+ </struct>
+
+ If the structure contains no bitfields, then each field has an
+explicit type, and no implicit padding is added.
+
+ <struct id="ID">
+ <field name="NAME" type="TYPE"/>
+ ...
+ </struct>
+
+ If a register's value is a series of single-bit flags, define it with
+a flags type. The `<flags>' element has an explicit SIZE and contains
+one or more `<field>' elements. Each field has a NAME, a START, and an
+END. Only single-bit flags are supported.
+
+ <flags id="ID" size="SIZE">
+ <field name="NAME" start="START" end="END"/>
+ ...
+ </flags>
+
+G.2.7 Registers
+---------------
+
+Each register is represented as an element with this form:
+
+ <reg name="NAME"
+ bitsize="SIZE"
+ [regnum="NUM"]
+ [save-restore="SAVE-RESTORE"]
+ [type="TYPE"]
+ [group="GROUP"]/>
+
+The components are as follows:
+
+NAME
+ The register's name; it must be unique within the target
+ description.
+
+BITSIZE
+ The register's size, in bits.
+
+REGNUM
+ The register's number. If omitted, a register's number is one
+ greater than that of the previous register (either in the current
+ feature or in a preceeding feature); the first register in the
+ target description defaults to zero. This register number is used
+ to read or write the register; e.g. it is used in the remote `p'
+ and `P' packets, and registers appear in the `g' and `G' packets
+ in order of increasing register number.
+
+SAVE-RESTORE
+ Whether the register should be preserved across inferior function
+ calls; this must be either `yes' or `no'. The default is `yes',
+ which is appropriate for most registers except for some system
+ control registers; this is not related to the target's ABI.
+
+TYPE
+ The type of the register. TYPE may be a predefined type, a type
+ defined in the current feature, or one of the special types `int'
+ and `float'. `int' is an integer type of the correct size for
+ BITSIZE, and `float' is a floating point type (in the
+ architecture's normal floating point format) of the correct size
+ for BITSIZE. The default is `int'.
+
+GROUP
+ The register group to which this register belongs. GROUP must be
+ either `general', `float', or `vector'. If no GROUP is specified,
+ GDB will not display the register in `info registers'.
+
+
+
+File: gdb.info, Node: Predefined Target Types, Next: Standard Target Features, Prev: Target Description Format, Up: Target Descriptions
+
+G.3 Predefined Target Types
+===========================
+
+Type definitions in the self-description can build up composite types
+from basic building blocks, but can not define fundamental types.
+Instead, standard identifiers are provided by GDB for the fundamental
+types. The currently supported types are:
+
+`int8'
+`int16'
+`int32'
+`int64'
+`int128'
+ Signed integer types holding the specified number of bits.
+
+`uint8'
+`uint16'
+`uint32'
+`uint64'
+`uint128'
+ Unsigned integer types holding the specified number of bits.
+
+`code_ptr'
+`data_ptr'
+ Pointers to unspecified code and data. The program counter and
+ any dedicated return address register may be marked as code
+ pointers; printing a code pointer converts it into a symbolic
+ address. The stack pointer and any dedicated address registers
+ may be marked as data pointers.
+
+`ieee_single'
+ Single precision IEEE floating point.
+
+`ieee_double'
+ Double precision IEEE floating point.
+
+`arm_fpa_ext'
+ The 12-byte extended precision format used by ARM FPA registers.
+
+`i387_ext'
+ The 10-byte extended precision format used by x87 registers.
+
+`i386_eflags'
+ 32bit EFLAGS register used by x86.
+
+`i386_mxcsr'
+ 32bit MXCSR register used by x86.
+
+
+
+File: gdb.info, Node: Standard Target Features, Prev: Predefined Target Types, Up: Target Descriptions
+
+G.4 Standard Target Features
+============================
+
+A target description must contain either no registers or all the
+target's registers. If the description contains no registers, then GDB
+will assume a default register layout, selected based on the
+architecture. If the description contains any registers, the default
+layout will not be used; the standard registers must be described in
+the target description, in such a way that GDB can recognize them.
+
+ This is accomplished by giving specific names to feature elements
+which contain standard registers. GDB will look for features with
+those names and verify that they contain the expected registers; if any
+known feature is missing required registers, or if any required feature
+is missing, GDB will reject the target description. You can add
+additional registers to any of the standard features -- GDB will
+display them just as if they were added to an unrecognized feature.
+
+ This section lists the known features and their expected contents.
+Sample XML documents for these features are included in the GDB source
+tree, in the directory `gdb/features'.
+
+ Names recognized by GDB should include the name of the company or
+organization which selected the name, and the overall architecture to
+which the feature applies; so e.g. the feature containing ARM core
+registers is named `org.gnu.gdb.arm.core'.
+
+ The names of registers are not case sensitive for the purpose of
+recognizing standard features, but GDB will only display registers
+using the capitalization used in the description.
+
+* Menu:
+
+* ARM Features::
+* i386 Features::
+* MIPS Features::
+* M68K Features::
+* PowerPC Features::
+
+
+File: gdb.info, Node: ARM Features, Next: i386 Features, Up: Standard Target Features
+
+G.4.1 ARM Features
+------------------
+
+The `org.gnu.gdb.arm.core' feature is required for non-M-profile ARM
+targets. It should contain registers `r0' through `r13', `sp', `lr',
+`pc', and `cpsr'.
+
+ For M-profile targets (e.g. Cortex-M3), the `org.gnu.gdb.arm.core'
+feature is replaced by `org.gnu.gdb.arm.m-profile'. It should contain
+registers `r0' through `r13', `sp', `lr', `pc', and `xpsr'.
+
+ The `org.gnu.gdb.arm.fpa' feature is optional. If present, it
+should contain registers `f0' through `f7' and `fps'.
+
+ The `org.gnu.gdb.xscale.iwmmxt' feature is optional. If present, it
+should contain at least registers `wR0' through `wR15' and `wCGR0'
+through `wCGR3'. The `wCID', `wCon', `wCSSF', and `wCASF' registers
+are optional.
+
+ The `org.gnu.gdb.arm.vfp' feature is optional. If present, it
+should contain at least registers `d0' through `d15'. If they are
+present, `d16' through `d31' should also be included. GDB will
+synthesize the single-precision registers from halves of the
+double-precision registers.
+
+ The `org.gnu.gdb.arm.neon' feature is optional. It does not need to
+contain registers; it instructs GDB to display the VFP double-precision
+registers as vectors and to synthesize the quad-precision registers
+from pairs of double-precision registers. If this feature is present,
+`org.gnu.gdb.arm.vfp' must also be present and include 32
+double-precision registers.
+
+
+File: gdb.info, Node: i386 Features, Next: MIPS Features, Prev: ARM Features, Up: Standard Target Features
+
+G.4.2 i386 Features
+-------------------
+
+The `org.gnu.gdb.i386.core' feature is required for i386/amd64 targets.
+It should describe the following registers:
+
+ - `eax' through `edi' plus `eip' for i386
+
+ - `rax' through `r15' plus `rip' for amd64
+
+ - `eflags', `cs', `ss', `ds', `es', `fs', `gs'
+
+ - `st0' through `st7'
+
+ - `fctrl', `fstat', `ftag', `fiseg', `fioff', `foseg', `fooff' and
+ `fop'
+
+ The register sets may be different, depending on the target.
+
+ The `org.gnu.gdb.i386.sse' feature is optional. It should describe
+registers:
+
+ - `xmm0' through `xmm7' for i386
+
+ - `xmm0' through `xmm15' for amd64
+
+ - `mxcsr'
+
+ The `org.gnu.gdb.i386.avx' feature is optional and requires the
+`org.gnu.gdb.i386.sse' feature. It should describe the upper 128 bits
+of YMM registers:
+
+ - `ymm0h' through `ymm7h' for i386
+
+ - `ymm0h' through `ymm15h' for amd64
+
+ The `org.gnu.gdb.i386.linux' feature is optional. It should
+describe a single register, `orig_eax'.
+
+
+File: gdb.info, Node: MIPS Features, Next: M68K Features, Prev: i386 Features, Up: Standard Target Features
+
+G.4.3 MIPS Features
+-------------------
+
+The `org.gnu.gdb.mips.cpu' feature is required for MIPS targets. It
+should contain registers `r0' through `r31', `lo', `hi', and `pc'.
+They may be 32-bit or 64-bit depending on the target.
+
+ The `org.gnu.gdb.mips.cp0' feature is also required. It should
+contain at least the `status', `badvaddr', and `cause' registers. They
+may be 32-bit or 64-bit depending on the target.
+
+ The `org.gnu.gdb.mips.fpu' feature is currently required, though it
+may be optional in a future version of GDB. It should contain
+registers `f0' through `f31', `fcsr', and `fir'. They may be 32-bit or
+64-bit depending on the target.
+
+ The `org.gnu.gdb.mips.linux' feature is optional. It should contain
+a single register, `restart', which is used by the Linux kernel to
+control restartable syscalls.
+
+
+File: gdb.info, Node: M68K Features, Next: PowerPC Features, Prev: MIPS Features, Up: Standard Target Features
+
+G.4.4 M68K Features
+-------------------
+
+``org.gnu.gdb.m68k.core''
+``org.gnu.gdb.coldfire.core''
+``org.gnu.gdb.fido.core''
+ One of those features must be always present. The feature that is
+ present determines which flavor of m68k is used. The feature that
+ is present should contain registers `d0' through `d7', `a0'
+ through `a5', `fp', `sp', `ps' and `pc'.
+
+``org.gnu.gdb.coldfire.fp''
+ This feature is optional. If present, it should contain registers
+ `fp0' through `fp7', `fpcontrol', `fpstatus' and `fpiaddr'.
+
+
+File: gdb.info, Node: PowerPC Features, Prev: M68K Features, Up: Standard Target Features
+
+G.4.5 PowerPC Features
+----------------------
+
+The `org.gnu.gdb.power.core' feature is required for PowerPC targets.
+It should contain registers `r0' through `r31', `pc', `msr', `cr',
+`lr', `ctr', and `xer'. They may be 32-bit or 64-bit depending on the
+target.
+
+ The `org.gnu.gdb.power.fpu' feature is optional. It should contain
+registers `f0' through `f31' and `fpscr'.
+
+ The `org.gnu.gdb.power.altivec' feature is optional. It should
+contain registers `vr0' through `vr31', `vscr', and `vrsave'.
+
+ The `org.gnu.gdb.power.vsx' feature is optional. It should contain
+registers `vs0h' through `vs31h'. GDB will combine these registers
+with the floating point registers (`f0' through `f31') and the altivec
+registers (`vr0' through `vr31') to present the 128-bit wide registers
+`vs0' through `vs63', the set of vector registers for POWER7.
+
+ The `org.gnu.gdb.power.spe' feature is optional. It should contain
+registers `ev0h' through `ev31h', `acc', and `spefscr'. SPE targets
+should provide 32-bit registers in `org.gnu.gdb.power.core' and provide
+the upper halves in `ev0h' through `ev31h'. GDB will combine these to
+present registers `ev0' through `ev31' to the user.
+
+
+File: gdb.info, Node: Operating System Information, Next: Trace File Format, Prev: Target Descriptions, Up: Top
+
+Appendix H Operating System Information
+***************************************
+
+* Menu:
+
+* Process list::
+
+ Users of GDB often wish to obtain information about the state of the
+operating system running on the target--for example the list of
+processes, or the list of open files. This section describes the
+mechanism that makes it possible. This mechanism is similar to the
+target features mechanism (*note Target Descriptions::), but focuses on
+a different aspect of target.
+
+ Operating system information is retrived from the target via the
+remote protocol, using `qXfer' requests (*note qXfer osdata read::).
+The object name in the request should be `osdata', and the ANNEX
+identifies the data to be fetched.
+
+
+File: gdb.info, Node: Process list, Up: Operating System Information
+
+H.1 Process list
+================
+
+When requesting the process list, the ANNEX field in the `qXfer'
+request should be `processes'. The returned data is an XML document.
+The formal syntax of this document is defined in
+`gdb/features/osdata.dtd'.
+
+ An example document is:
+
+ <?xml version="1.0"?>
+ <!DOCTYPE target SYSTEM "osdata.dtd">
+ <osdata type="processes">
+ <item>
+ <column name="pid">1</column>
+ <column name="user">root</column>
+ <column name="command">/sbin/init</column>
+ <column name="cores">1,2,3</column>
+ </item>
+ </osdata>
+
+ Each item should include a column whose name is `pid'. The value of
+that column should identify the process on the target. The `user' and
+`command' columns are optional, and will be displayed by GDB. The
+`cores' column, if present, should contain a comma-separated list of
+cores that this process is running on. Target may provide additional
+columns, which GDB currently ignores.
+
+
+File: gdb.info, Node: Trace File Format, Next: Copying, Prev: Operating System Information, Up: Top
+
+Appendix I Trace File Format
+****************************
+
+The trace file comes in three parts: a header, a textual description
+section, and a trace frame section with binary data.
+
+ The header has the form `\x7fTRACE0\n'. The first byte is `0x7f' so
+as to indicate that the file contains binary data, while the `0' is a
+version number that may have different values in the future.
+
+ The description section consists of multiple lines of ASCII text
+separated by newline characters (`0xa'). The lines may include a
+variety of optional descriptive or context-setting information, such as
+tracepoint definitions or register set size. GDB will ignore any line
+that it does not recognize. An empty line marks the end of this
+section.
+
+ The trace frame section consists of a number of consecutive frames.
+Each frame begins with a two-byte tracepoint number, followed by a
+four-byte size giving the amount of data in the frame. The data in the
+frame consists of a number of blocks, each introduced by a character
+indicating its type (at least register, memory, and trace state
+variable). The data in this section is raw binary, not a hexadecimal
+or other encoding; its endianness matches the target's endianness.
+
+`R BYTES'
+ Register block. The number and ordering of bytes matches that of a
+ `g' packet in the remote protocol. Note that these are the actual
+ bytes, in target order and GDB register order, not a hexadecimal
+ encoding.
+
+`M ADDRESS LENGTH BYTES...'
+ Memory block. This is a contiguous block of memory, at the 8-byte
+ address ADDRESS, with a 2-byte length LENGTH, followed by LENGTH
+ bytes.
+
+`V NUMBER VALUE'
+ Trace state variable block. This records the 8-byte signed value
+ VALUE of trace state variable numbered NUMBER.
+
+
+ Future enhancements of the trace file format may include additional
+types of blocks.
+
+
+File: gdb.info, Node: Copying, Next: GNU Free Documentation License, Prev: Trace File Format, Up: Top
+
+Appendix J GNU GENERAL PUBLIC LICENSE
+*************************************
+
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/'
+
+ Everyone is permitted to copy and distribute verbatim copies of this
+ license document, but changing it is not allowed.
+
+Preamble
+========
+
+The GNU General Public License is a free, copyleft license for software
+and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains
+free software for all its users. We, the Free Software Foundation, use
+the GNU General Public License for most of our software; it applies
+also to any other work released this way by its authors. You can apply
+it to your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you
+have certain responsibilities if you distribute copies of the software,
+or if you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the
+manufacturer can do so. This is fundamentally incompatible with the
+aim of protecting users' freedom to change the software. The
+systematic pattern of such abuse occurs in the area of products for
+individuals to use, which is precisely where it is most unacceptable.
+Therefore, we have designed this version of the GPL to prohibit the
+practice for those products. If such problems arise substantially in
+other domains, we stand ready to extend this provision to those domains
+in future versions of the GPL, as needed to protect the freedom of
+users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+TERMS AND CONDITIONS
+====================
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public
+ License.
+
+ "Copyright" also means copyright-like laws that apply to other
+ kinds of works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+ License. Each licensee is addressed as "you". "Licensees" and
+ "recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the
+ work in a fashion requiring copyright permission, other than the
+ making of an exact copy. The resulting work is called a "modified
+ version" of the earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work
+ based on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+ permission, would make you directly or secondarily liable for
+ infringement under applicable copyright law, except executing it
+ on a computer or modifying a private copy. Propagation includes
+ copying, distribution (with or without modification), making
+ available to the public, and in some countries other activities as
+ well.
+
+ To "convey" a work means any kind of propagation that enables other
+ parties to make or receive copies. Mere interaction with a user
+ through a computer network, with no transfer of a copy, is not
+ conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+ to the extent that it includes a convenient and prominently visible
+ feature that (1) displays an appropriate copyright notice, and (2)
+ tells the user that there is no warranty for the work (except to
+ the extent that warranties are provided), that licensees may
+ convey the work under this License, and how to view a copy of this
+ License. If the interface presents a list of user commands or
+ options, such as a menu, a prominent item in the list meets this
+ criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+ for making modifications to it. "Object code" means any
+ non-source form of a work.
+
+ A "Standard Interface" means an interface that either is an
+ official standard defined by a recognized standards body, or, in
+ the case of interfaces specified for a particular programming
+ language, one that is widely used among developers working in that
+ language.
+
+ The "System Libraries" of an executable work include anything,
+ other than the work as a whole, that (a) is included in the normal
+ form of packaging a Major Component, but which is not part of that
+ Major Component, and (b) serves only to enable use of the work
+ with that Major Component, or to implement a Standard Interface
+ for which an implementation is available to the public in source
+ code form. A "Major Component", in this context, means a major
+ essential component (kernel, window system, and so on) of the
+ specific operating system (if any) on which the executable work
+ runs, or a compiler used to produce the work, or an object code
+ interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+ the source code needed to generate, install, and (for an executable
+ work) run the object code and to modify the work, including
+ scripts to control those activities. However, it does not include
+ the work's System Libraries, or general-purpose tools or generally
+ available free programs which are used unmodified in performing
+ those activities but which are not part of the work. For example,
+ Corresponding Source includes interface definition files
+ associated with source files for the work, and the source code for
+ shared libraries and dynamically linked subprograms that the work
+ is specifically designed to require, such as by intimate data
+ communication or control flow between those subprograms and other
+ parts of the work.
+
+ The Corresponding Source need not include anything that users can
+ regenerate automatically from other parts of the Corresponding
+ Source.
+
+ The Corresponding Source for a work in source code form is that
+ same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+ copyright on the Program, and are irrevocable provided the stated
+ conditions are met. This License explicitly affirms your unlimited
+ permission to run the unmodified Program. The output from running
+ a covered work is covered by this License only if the output,
+ given its content, constitutes a covered work. This License
+ acknowledges your rights of fair use or other equivalent, as
+ provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+ convey, without conditions so long as your license otherwise
+ remains in force. You may convey covered works to others for the
+ sole purpose of having them make modifications exclusively for
+ you, or provide you with facilities for running those works,
+ provided that you comply with the terms of this License in
+ conveying all material for which you do not control copyright.
+ Those thus making or running the covered works for you must do so
+ exclusively on your behalf, under your direction and control, on
+ terms that prohibit them from making any copies of your
+ copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+ the conditions stated below. Sublicensing is not allowed; section
+ 10 makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+ measure under any applicable law fulfilling obligations under
+ article 11 of the WIPO copyright treaty adopted on 20 December
+ 1996, or similar laws prohibiting or restricting circumvention of
+ such measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+ circumvention of technological measures to the extent such
+ circumvention is effected by exercising rights under this License
+ with respect to the covered work, and you disclaim any intention
+ to limit operation or modification of the work as a means of
+ enforcing, against the work's users, your or third parties' legal
+ rights to forbid circumvention of technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+ receive it, in any medium, provided that you conspicuously and
+ appropriately publish on each copy an appropriate copyright notice;
+ keep intact all notices stating that this License and any
+ non-permissive terms added in accord with section 7 apply to the
+ code; keep intact all notices of the absence of any warranty; and
+ give all recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+ and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+ produce it from the Program, in the form of source code under the
+ terms of section 4, provided that you also meet all of these
+ conditions:
+
+ a. The work must carry prominent notices stating that you
+ modified it, and giving a relevant date.
+
+ b. The work must carry prominent notices stating that it is
+ released under this License and any conditions added under
+ section 7. This requirement modifies the requirement in
+ section 4 to "keep intact all notices".
+
+ c. You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable
+ section 7 additional terms, to the whole of the work, and all
+ its parts, regardless of how they are packaged. This License
+ gives no permission to license the work in any other way, but
+ it does not invalidate such permission if you have separately
+ received it.
+
+ d. If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has
+ interactive interfaces that do not display Appropriate Legal
+ Notices, your work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+ works, which are not by their nature extensions of the covered
+ work, and which are not combined with it such as to form a larger
+ program, in or on a volume of a storage or distribution medium, is
+ called an "aggregate" if the compilation and its resulting
+ copyright are not used to limit the access or legal rights of the
+ compilation's users beyond what the individual works permit.
+ Inclusion of a covered work in an aggregate does not cause this
+ License to apply to the other parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+ of sections 4 and 5, provided that you also convey the
+ machine-readable Corresponding Source under the terms of this
+ License, in one of these ways:
+
+ a. Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b. Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for
+ as long as you offer spare parts or customer support for that
+ product model, to give anyone who possesses the object code
+ either (1) a copy of the Corresponding Source for all the
+ software in the product that is covered by this License, on a
+ durable physical medium customarily used for software
+ interchange, for a price no more than your reasonable cost of
+ physically performing this conveying of source, or (2) access
+ to copy the Corresponding Source from a network server at no
+ charge.
+
+ c. Convey individual copies of the object code with a copy of
+ the written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially,
+ and only if you received the object code with such an offer,
+ in accord with subsection 6b.
+
+ d. Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access
+ to the Corresponding Source in the same way through the same
+ place at no further charge. You need not require recipients
+ to copy the Corresponding Source along with the object code.
+ If the place to copy the object code is a network server, the
+ Corresponding Source may be on a different server (operated
+ by you or a third party) that supports equivalent copying
+ facilities, provided you maintain clear directions next to
+ the object code saying where to find the Corresponding Source.
+ Regardless of what server hosts the Corresponding Source, you
+ remain obligated to ensure that it is available for as long
+ as needed to satisfy these requirements.
+
+ e. Convey the object code using peer-to-peer transmission,
+ provided you inform other peers where the object code and
+ Corresponding Source of the work are being offered to the
+ general public at no charge under subsection 6d.
+
+
+ A separable portion of the object code, whose source code is
+ excluded from the Corresponding Source as a System Library, need
+ not be included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means
+ any tangible personal property which is normally used for personal,
+ family, or household purposes, or (2) anything designed or sold for
+ incorporation into a dwelling. In determining whether a product
+ is a consumer product, doubtful cases shall be resolved in favor of
+ coverage. For a particular product received by a particular user,
+ "normally used" refers to a typical or common use of that class of
+ product, regardless of the status of the particular user or of the
+ way in which the particular user actually uses, or expects or is
+ expected to use, the product. A product is a consumer product
+ regardless of whether the product has substantial commercial,
+ industrial or non-consumer uses, unless such uses represent the
+ only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+ procedures, authorization keys, or other information required to
+ install and execute modified versions of a covered work in that
+ User Product from a modified version of its Corresponding Source.
+ The information must suffice to ensure that the continued
+ functioning of the modified object code is in no case prevented or
+ interfered with solely because modification has been made.
+
+ If you convey an object code work under this section in, or with,
+ or specifically for use in, a User Product, and the conveying
+ occurs as part of a transaction in which the right of possession
+ and use of the User Product is transferred to the recipient in
+ perpetuity or for a fixed term (regardless of how the transaction
+ is characterized), the Corresponding Source conveyed under this
+ section must be accompanied by the Installation Information. But
+ this requirement does not apply if neither you nor any third party
+ retains the ability to install modified object code on the User
+ Product (for example, the work has been installed in ROM).
+
+ The requirement to provide Installation Information does not
+ include a requirement to continue to provide support service,
+ warranty, or updates for a work that has been modified or
+ installed by the recipient, or for the User Product in which it
+ has been modified or installed. Access to a network may be denied
+ when the modification itself materially and adversely affects the
+ operation of the network or violates the rules and protocols for
+ communication across the network.
+
+ Corresponding Source conveyed, and Installation Information
+ provided, in accord with this section must be in a format that is
+ publicly documented (and with an implementation available to the
+ public in source code form), and must require no special password
+ or key for unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of
+ this License by making exceptions from one or more of its
+ conditions. Additional permissions that are applicable to the
+ entire Program shall be treated as though they were included in
+ this License, to the extent that they are valid under applicable
+ law. If additional permissions apply only to part of the Program,
+ that part may be used separately under those permissions, but the
+ entire Program remains governed by this License without regard to
+ the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+ remove any additional permissions from that copy, or from any part
+ of it. (Additional permissions may be written to require their own
+ removal in certain cases when you modify the work.) You may place
+ additional permissions on material, added by you to a covered work,
+ for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material
+ you add to a covered work, you may (if authorized by the copyright
+ holders of that material) supplement the terms of this License
+ with terms:
+
+ a. Disclaiming warranty or limiting liability differently from
+ the terms of sections 15 and 16 of this License; or
+
+ b. Requiring preservation of specified reasonable legal notices
+ or author attributions in that material or in the Appropriate
+ Legal Notices displayed by works containing it; or
+
+ c. Prohibiting misrepresentation of the origin of that material,
+ or requiring that modified versions of such material be
+ marked in reasonable ways as different from the original
+ version; or
+
+ d. Limiting the use for publicity purposes of names of licensors
+ or authors of the material; or
+
+ e. Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f. Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified
+ versions of it) with contractual assumptions of liability to
+ the recipient, for any liability that these contractual
+ assumptions directly impose on those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+ restrictions" within the meaning of section 10. If the Program as
+ you received it, or any part of it, contains a notice stating that
+ it is governed by this License along with a term that is a further
+ restriction, you may remove that term. If a license document
+ contains a further restriction but permits relicensing or
+ conveying under this License, you may add to a covered work
+ material governed by the terms of that license document, provided
+ that the further restriction does not survive such relicensing or
+ conveying.
+
+ If you add terms to a covered work in accord with this section, you
+ must place, in the relevant source files, a statement of the
+ additional terms that apply to those files, or a notice indicating
+ where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in
+ the form of a separately written license, or stated as exceptions;
+ the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+ provided under this License. Any attempt otherwise to propagate or
+ modify it is void, and will automatically terminate your rights
+ under this License (including any patent licenses granted under
+ the third paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+ license from a particular copyright holder is reinstated (a)
+ provisionally, unless and until the copyright holder explicitly
+ and finally terminates your license, and (b) permanently, if the
+ copyright holder fails to notify you of the violation by some
+ reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+ reinstated permanently if the copyright holder notifies you of the
+ violation by some reasonable means, this is the first time you have
+ received notice of violation of this License (for any work) from
+ that copyright holder, and you cure the violation prior to 30 days
+ after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate
+ the licenses of parties who have received copies or rights from
+ you under this License. If your rights have been terminated and
+ not permanently reinstated, you do not qualify to receive new
+ licenses for the same material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+ run a copy of the Program. Ancillary propagation of a covered work
+ occurring solely as a consequence of using peer-to-peer
+ transmission to receive a copy likewise does not require
+ acceptance. However, nothing other than this License grants you
+ permission to propagate or modify any covered work. These actions
+ infringe copyright if you do not accept this License. Therefore,
+ by modifying or propagating a covered work, you indicate your
+ acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+ receives a license from the original licensors, to run, modify and
+ propagate that work, subject to this License. You are not
+ responsible for enforcing compliance by third parties with this
+ License.
+
+ An "entity transaction" is a transaction transferring control of an
+ organization, or substantially all assets of one, or subdividing an
+ organization, or merging organizations. If propagation of a
+ covered work results from an entity transaction, each party to that
+ transaction who receives a copy of the work also receives whatever
+ licenses to the work the party's predecessor in interest had or
+ could give under the previous paragraph, plus a right to
+ possession of the Corresponding Source of the work from the
+ predecessor in interest, if the predecessor has it or can get it
+ with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+ rights granted or affirmed under this License. For example, you
+ may not impose a license fee, royalty, or other charge for
+ exercise of rights granted under this License, and you may not
+ initiate litigation (including a cross-claim or counterclaim in a
+ lawsuit) alleging that any patent claim is infringed by making,
+ using, selling, offering for sale, or importing the Program or any
+ portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+ License of the Program or a work on which the Program is based.
+ The work thus licensed is called the contributor's "contributor
+ version".
+
+ A contributor's "essential patent claims" are all patent claims
+ owned or controlled by the contributor, whether already acquired or
+ hereafter acquired, that would be infringed by some manner,
+ permitted by this License, of making, using, or selling its
+ contributor version, but do not include claims that would be
+ infringed only as a consequence of further modification of the
+ contributor version. For purposes of this definition, "control"
+ includes the right to grant patent sublicenses in a manner
+ consistent with the requirements of this License.
+
+ Each contributor grants you a non-exclusive, worldwide,
+ royalty-free patent license under the contributor's essential
+ patent claims, to make, use, sell, offer for sale, import and
+ otherwise run, modify and propagate the contents of its
+ contributor version.
+
+ In the following three paragraphs, a "patent license" is any
+ express agreement or commitment, however denominated, not to
+ enforce a patent (such as an express permission to practice a
+ patent or covenant not to sue for patent infringement). To
+ "grant" such a patent license to a party means to make such an
+ agreement or commitment not to enforce a patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent
+ license, and the Corresponding Source of the work is not available
+ for anyone to copy, free of charge and under the terms of this
+ License, through a publicly available network server or other
+ readily accessible means, then you must either (1) cause the
+ Corresponding Source to be so available, or (2) arrange to deprive
+ yourself of the benefit of the patent license for this particular
+ work, or (3) arrange, in a manner consistent with the requirements
+ of this License, to extend the patent license to downstream
+ recipients. "Knowingly relying" means you have actual knowledge
+ that, but for the patent license, your conveying the covered work
+ in a country, or your recipient's use of the covered work in a
+ country, would infringe one or more identifiable patents in that
+ country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+ arrangement, you convey, or propagate by procuring conveyance of, a
+ covered work, and grant a patent license to some of the parties
+ receiving the covered work authorizing them to use, propagate,
+ modify or convey a specific copy of the covered work, then the
+ patent license you grant is automatically extended to all
+ recipients of the covered work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+ the scope of its coverage, prohibits the exercise of, or is
+ conditioned on the non-exercise of one or more of the rights that
+ are specifically granted under this License. You may not convey a
+ covered work if you are a party to an arrangement with a third
+ party that is in the business of distributing software, under
+ which you make payment to the third party based on the extent of
+ your activity of conveying the work, and under which the third
+ party grants, to any of the parties who would receive the covered
+ work from you, a discriminatory patent license (a) in connection
+ with copies of the covered work conveyed by you (or copies made
+ from those copies), or (b) primarily for and in connection with
+ specific products or compilations that contain the covered work,
+ unless you entered into that arrangement, or that patent license
+ was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+ any implied license or other defenses to infringement that may
+ otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order,
+ agreement or otherwise) that contradict the conditions of this
+ License, they do not excuse you from the conditions of this
+ License. If you cannot convey a covered work so as to satisfy
+ simultaneously your obligations under this License and any other
+ pertinent obligations, then as a consequence you may not convey it
+ at all. For example, if you agree to terms that obligate you to
+ collect a royalty for further conveying from those to whom you
+ convey the Program, the only way you could satisfy both those
+ terms and this License would be to refrain entirely from conveying
+ the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+ permission to link or combine any covered work with a work licensed
+ under version 3 of the GNU Affero General Public License into a
+ single combined work, and to convey the resulting work. The terms
+ of this License will continue to apply to the part which is the
+ covered work, but the special requirements of the GNU Affero
+ General Public License, section 13, concerning interaction through
+ a network will apply to the combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new
+ versions of the GNU General Public License from time to time.
+ Such new versions will be similar in spirit to the present
+ version, but may differ in detail to address new problems or
+ concerns.
+
+ Each version is given a distinguishing version number. If the
+ Program specifies that a certain numbered version of the GNU
+ General Public License "or any later version" applies to it, you
+ have the option of following the terms and conditions either of
+ that numbered version or of any later version published by the
+ Free Software Foundation. If the Program does not specify a
+ version number of the GNU General Public License, you may choose
+ any version ever published by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+ versions of the GNU General Public License can be used, that
+ proxy's public statement of acceptance of a version permanently
+ authorizes you to choose that version for the Program.
+
+ Later license versions may give you additional or different
+ permissions. However, no additional obligations are imposed on any
+ author or copyright holder as a result of your choosing to follow a
+ later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+ APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE
+ COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
+ WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE
+ RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
+ SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+ NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
+ AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
+ FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+ CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
+ THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
+ BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+ PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
+ THE POSSIBILITY OF SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+ above cannot be given local legal effect according to their terms,
+ reviewing courts shall apply local law that most closely
+ approximates an absolute waiver of all civil liability in
+ connection with the Program, unless a warranty or assumption of
+ liability accompanies a copy of the Program in return for a fee.
+
+
+END OF TERMS AND CONDITIONS
+===========================
+
+How to Apply These Terms to Your New Programs
+=============================================
+
+If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these
+terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
+ Copyright (C) YEAR NAME OF AUTHOR
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or (at
+ your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see `http://www.gnu.org/licenses/'.
+
+ Also add information on how to contact you by electronic and paper
+mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ PROGRAM Copyright (C) YEAR NAME OF AUTHOR
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+ The hypothetical commands `show w' and `show c' should show the
+appropriate parts of the General Public License. Of course, your
+program's commands might be different; for a GUI interface, you would
+use an "about box".
+
+ You should also get your employer (if you work as a programmer) or
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. For more information on this, and how to apply and follow
+the GNU GPL, see `http://www.gnu.org/licenses/'.
+
+ The GNU General Public License does not permit incorporating your
+program into proprietary programs. If your program is a subroutine
+library, you may consider it more useful to permit linking proprietary
+applications with the library. If this is what you want to do, use the
+GNU Lesser General Public License instead of this License. But first,
+please read `http://www.gnu.org/philosophy/why-not-lgpl.html'.
+
+
+File: gdb.info, Node: GNU Free Documentation License, Next: Index, Prev: Copying, Up: Top
+
+Appendix K GNU Free Documentation License
+*****************************************
+
+ Version 1.3, 3 November 2008
+
+ Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ `http://fsf.org/'
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ 0. PREAMBLE
+
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document "free" in the sense of freedom: to
+ assure everyone the effective freedom to copy and redistribute it,
+ with or without modifying it, either commercially or
+ noncommercially. Secondarily, this License preserves for the
+ author and publisher a way to get credit for their work, while not
+ being considered responsible for modifications made by others.
+
+ This License is a kind of "copyleft", which means that derivative
+ works of the document must themselves be free in the same sense.
+ It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to
+ software manuals; it can be used for any textual work, regardless
+ of subject matter or whether it is published as a printed book.
+ We recommend this License principally for works whose purpose is
+ instruction or reference.
+
+ 1. APPLICABILITY AND DEFINITIONS
+
+ This License applies to any manual or other work, in any medium,
+ that contains a notice placed by the copyright holder saying it
+ can be distributed under the terms of this License. Such a notice
+ grants a world-wide, royalty-free license, unlimited in duration,
+ to use that work under the conditions stated herein. The
+ "Document", below, refers to any such manual or work. Any member
+ of the public is a licensee, and is addressed as "you". You
+ accept the license if you copy, modify or distribute the work in a
+ way requiring permission under copyright law.
+
+ A "Modified Version" of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+
+ A "Secondary Section" is a named appendix or a front-matter section
+ of the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document's overall
+ subject (or to related matters) and contains nothing that could
+ fall directly within that overall subject. (Thus, if the Document
+ is in part a textbook of mathematics, a Secondary Section may not
+ explain any mathematics.) The relationship could be a matter of
+ historical connection with the subject or with related matters, or
+ of legal, commercial, philosophical, ethical or political position
+ regarding them.
+
+ The "Invariant Sections" are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in
+ the notice that says that the Document is released under this
+ License. If a section does not fit the above definition of
+ Secondary then it is not allowed to be designated as Invariant.
+ The Document may contain zero Invariant Sections. If the Document
+ does not identify any Invariant Sections then there are none.
+
+ The "Cover Texts" are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License. A
+ Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+ be at most 25 words.
+
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ straightforwardly with generic text editors or (for images
+ composed of pixels) generic paint programs or (for drawings) some
+ widely available drawing editor, and that is suitable for input to
+ text formatters or for automatic translation to a variety of
+ formats suitable for input to text formatters. A copy made in an
+ otherwise Transparent file format whose markup, or absence of
+ markup, has been arranged to thwart or discourage subsequent
+ modification by readers is not Transparent. An image format is
+ not Transparent if used for any substantial amount of text. A
+ copy that is not "Transparent" is called "Opaque".
+
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and
+ standard-conforming simple HTML, PostScript or PDF designed for
+ human modification. Examples of transparent image formats include
+ PNG, XCF and JPG. Opaque formats include proprietary formats that
+ can be read and edited only by proprietary word processors, SGML or
+ XML for which the DTD and/or processing tools are not generally
+ available, and the machine-generated HTML, PostScript or PDF
+ produced by some word processors for output purposes only.
+
+ The "Title Page" means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For
+ works in formats which do not have any title page as such, "Title
+ Page" means the text near the most prominent appearance of the
+ work's title, preceding the beginning of the body of the text.
+
+ The "publisher" means any person or entity that distributes copies
+ of the Document to the public.
+
+ A section "Entitled XYZ" means a named subunit of the Document
+ whose title either is precisely XYZ or contains XYZ in parentheses
+ following text that translates XYZ in another language. (Here XYZ
+ stands for a specific section name mentioned below, such as
+ "Acknowledgements", "Dedications", "Endorsements", or "History".)
+ To "Preserve the Title" of such a section when you modify the
+ Document means that it remains a section "Entitled XYZ" according
+ to this definition.
+
+ The Document may include Warranty Disclaimers next to the notice
+ which states that this License applies to the Document. These
+ Warranty Disclaimers are considered to be included by reference in
+ this License, but only as regards disclaiming warranties: any other
+ implication that these Warranty Disclaimers may have is void and
+ has no effect on the meaning of this License.
+
+ 2. VERBATIM COPYING
+
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that you
+ add no other conditions whatsoever to those of this License. You
+ may not use technical measures to obstruct or control the reading
+ or further copying of the copies you make or distribute. However,
+ you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow
+ the conditions in section 3.
+
+ You may also lend copies, under the same conditions stated above,
+ and you may publicly display copies.
+
+ 3. COPYING IN QUANTITY
+
+ If you publish printed copies (or copies in media that commonly
+ have printed covers) of the Document, numbering more than 100, and
+ the Document's license notice requires Cover Texts, you must
+ enclose the copies in covers that carry, clearly and legibly, all
+ these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The
+ front cover must present the full title with all words of the
+ title equally prominent and visible. You may add other material
+ on the covers in addition. Copying with changes limited to the
+ covers, as long as they preserve the title of the Document and
+ satisfy these conditions, can be treated as verbatim copying in
+ other respects.
+
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+
+ If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a
+ machine-readable Transparent copy along with each Opaque copy, or
+ state in or with each Opaque copy a computer-network location from
+ which the general network-using public has access to download
+ using public-standard network protocols a complete Transparent
+ copy of the Document, free of added material. If you use the
+ latter option, you must take reasonably prudent steps, when you
+ begin distribution of Opaque copies in quantity, to ensure that
+ this Transparent copy will remain thus accessible at the stated
+ location until at least one year after the last time you
+ distribute an Opaque copy (directly or through your agents or
+ retailers) of that edition to the public.
+
+ It is requested, but not required, that you contact the authors of
+ the Document well before redistributing any large number of
+ copies, to give them a chance to provide you with an updated
+ version of the Document.
+
+ 4. MODIFICATIONS
+
+ You may copy and distribute a Modified Version of the Document
+ under the conditions of sections 2 and 3 above, provided that you
+ release the Modified Version under precisely this License, with
+ the Modified Version filling the role of the Document, thus
+ licensing distribution and modification of the Modified Version to
+ whoever possesses a copy of it. In addition, you must do these
+ things in the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title
+ distinct from that of the Document, and from those of
+ previous versions (which should, if there were any, be listed
+ in the History section of the Document). You may use the
+ same title as a previous version if the original publisher of
+ that version gives permission.
+
+ B. List on the Title Page, as authors, one or more persons or
+ entities responsible for authorship of the modifications in
+ the Modified Version, together with at least five of the
+ principal authors of the Document (all of its principal
+ authors, if it has fewer than five), unless they release you
+ from this requirement.
+
+ C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+ D. Preserve all the copyright notices of the Document.
+
+ E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+ F. Include, immediately after the copyright notices, a license
+ notice giving the public permission to use the Modified
+ Version under the terms of this License, in the form shown in
+ the Addendum below.
+
+ G. Preserve in that license notice the full lists of Invariant
+ Sections and required Cover Texts given in the Document's
+ license notice.
+
+ H. Include an unaltered copy of this License.
+
+ I. Preserve the section Entitled "History", Preserve its Title,
+ and add to it an item stating at least the title, year, new
+ authors, and publisher of the Modified Version as given on
+ the Title Page. If there is no section Entitled "History" in
+ the Document, create one stating the title, year, authors,
+ and publisher of the Document as given on its Title Page,
+ then add an item describing the Modified Version as stated in
+ the previous sentence.
+
+ J. Preserve the network location, if any, given in the Document
+ for public access to a Transparent copy of the Document, and
+ likewise the network locations given in the Document for
+ previous versions it was based on. These may be placed in
+ the "History" section. You may omit a network location for a
+ work that was published at least four years before the
+ Document itself, or if the original publisher of the version
+ it refers to gives permission.
+
+ K. For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the
+ section all the substance and tone of each of the contributor
+ acknowledgements and/or dedications given therein.
+
+ L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section
+ titles.
+
+ M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+
+ N. Do not retitle any existing section to be Entitled
+ "Endorsements" or to conflict in title with any Invariant
+ Section.
+
+ O. Preserve any Warranty Disclaimers.
+
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option
+ designate some or all of these sections as invariant. To do this,
+ add their titles to the list of Invariant Sections in the Modified
+ Version's license notice. These titles must be distinct from any
+ other section titles.
+
+ You may add a section Entitled "Endorsements", provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties--for example, statements of peer review or that the text
+ has been approved by an organization as the authoritative
+ definition of a standard.
+
+ You may add a passage of up to five words as a Front-Cover Text,
+ and a passage of up to 25 words as a Back-Cover Text, to the end
+ of the list of Cover Texts in the Modified Version. Only one
+ passage of Front-Cover Text and one of Back-Cover Text may be
+ added by (or through arrangements made by) any one entity. If the
+ Document already includes a cover text for the same cover,
+ previously added by you or by arrangement made by the same entity
+ you are acting on behalf of, you may not add another; but you may
+ replace the old one, on explicit permission from the previous
+ publisher that added the old one.
+
+ The author(s) and publisher(s) of the Document do not by this
+ License give permission to use their names for publicity for or to
+ assert or imply endorsement of any Modified Version.
+
+ 5. COMBINING DOCUMENTS
+
+ You may combine the Document with other documents released under
+ this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination
+ all of the Invariant Sections of all of the original documents,
+ unmodified, and list them all as Invariant Sections of your
+ combined work in its license notice, and that you preserve all
+ their Warranty Disclaimers.
+
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy. If there are multiple Invariant Sections with the same name
+ but different contents, make the title of each such section unique
+ by adding at the end of it, in parentheses, the name of the
+ original author or publisher of that section if known, or else a
+ unique number. Make the same adjustment to the section titles in
+ the list of Invariant Sections in the license notice of the
+ combined work.
+
+ In the combination, you must combine any sections Entitled
+ "History" in the various original documents, forming one section
+ Entitled "History"; likewise combine any sections Entitled
+ "Acknowledgements", and any sections Entitled "Dedications". You
+ must delete all sections Entitled "Endorsements."
+
+ 6. COLLECTIONS OF DOCUMENTS
+
+ You may make a collection consisting of the Document and other
+ documents released under this License, and replace the individual
+ copies of this License in the various documents with a single copy
+ that is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the
+ documents in all other respects.
+
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you insert
+ a copy of this License into the extracted document, and follow
+ this License in all other respects regarding verbatim copying of
+ that document.
+
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+
+ A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume of
+ a storage or distribution medium, is called an "aggregate" if the
+ copyright resulting from the compilation is not used to limit the
+ legal rights of the compilation's users beyond what the individual
+ works permit. When the Document is included in an aggregate, this
+ License does not apply to the other works in the aggregate which
+ are not themselves derivative works of the Document.
+
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one half
+ of the entire aggregate, the Document's Cover Texts may be placed
+ on covers that bracket the Document within the aggregate, or the
+ electronic equivalent of covers if the Document is in electronic
+ form. Otherwise they must appear on printed covers that bracket
+ the whole aggregate.
+
+ 8. TRANSLATION
+
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section
+ 4. Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include a
+ translation of this License, and all the license notices in the
+ Document, and any Warranty Disclaimers, provided that you also
+ include the original English version of this License and the
+ original versions of those notices and disclaimers. In case of a
+ disagreement between the translation and the original version of
+ this License or a notice or disclaimer, the original version will
+ prevail.
+
+ If a section in the Document is Entitled "Acknowledgements",
+ "Dedications", or "History", the requirement (section 4) to
+ Preserve its Title (section 1) will typically require changing the
+ actual title.
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense, or distribute it is void,
+ and will automatically terminate your rights under this License.
+
+ However, if you cease all violation of this License, then your
+ license from a particular copyright holder is reinstated (a)
+ provisionally, unless and until the copyright holder explicitly
+ and finally terminates your license, and (b) permanently, if the
+ copyright holder fails to notify you of the violation by some
+ reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+ reinstated permanently if the copyright holder notifies you of the
+ violation by some reasonable means, this is the first time you have
+ received notice of violation of this License (for any work) from
+ that copyright holder, and you cure the violation prior to 30 days
+ after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate
+ the licenses of parties who have received copies or rights from
+ you under this License. If your rights have been terminated and
+ not permanently reinstated, receipt of a copy of some or all of
+ the same material does not give you any rights to use it.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+ The Free Software Foundation may publish new, revised versions of
+ the GNU Free Documentation License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns. See
+ `http://www.gnu.org/copyleft/'.
+
+ Each version of the License is given a distinguishing version
+ number. If the Document specifies that a particular numbered
+ version of this License "or any later version" applies to it, you
+ have the option of following the terms and conditions either of
+ that specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If
+ the Document does not specify a version number of this License,
+ you may choose any version ever published (not as a draft) by the
+ Free Software Foundation. If the Document specifies that a proxy
+ can decide which future versions of this License can be used, that
+ proxy's public statement of acceptance of a version permanently
+ authorizes you to choose that version for the Document.
+
+ 11. RELICENSING
+
+ "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+ World Wide Web server that publishes copyrightable works and also
+ provides prominent facilities for anybody to edit those works. A
+ public wiki that anybody can edit is an example of such a server.
+ A "Massive Multiauthor Collaboration" (or "MMC") contained in the
+ site means any set of copyrightable works thus published on the MMC
+ site.
+
+ "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+ license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license
+ published by that same organization.
+
+ "Incorporate" means to publish or republish a Document, in whole or
+ in part, as part of another Document.
+
+ An MMC is "eligible for relicensing" if it is licensed under this
+ License, and if all works that were first published under this
+ License somewhere other than this MMC, and subsequently
+ incorporated in whole or in part into the MMC, (1) had no cover
+ texts or invariant sections, and (2) were thus incorporated prior
+ to November 1, 2008.
+
+ The operator of an MMC Site may republish an MMC contained in the
+ site under CC-BY-SA on the same site at any time before August 1,
+ 2009, provided the MMC is eligible for relicensing.
+
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+ Copyright (C) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with
+ the Front-Cover Texts being LIST, and with the Back-Cover Texts
+ being LIST.
+
+ If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+ If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License, to
+permit their use in free software.
+
+
+File: gdb.info, Node: Index, Prev: GNU Free Documentation License, Up: Top
+
+Index
+*****
+
+
+* Menu:
+
+* ! packet: Packets. (line 49)
+* "No symbol "foo" in current context": Variables. (line 74)
+* # (a comment): Command Syntax. (line 38)
+* # in Modula-2: GDB/M2. (line 18)
+* $: Value History. (line 13)
+* $$: Value History. (line 13)
+* $_ and info breakpoints: Set Breaks. (line 128)
+* $_ and info line: Machine Code. (line 30)
+* $_, $__, and value history: Memory. (line 109)
+* $_, convenience variable: Convenience Vars. (line 64)
+* $__, convenience variable: Convenience Vars. (line 73)
+* $_exitcode, convenience variable: Convenience Vars. (line 79)
+* $_sdata, collect: Tracepoint Actions. (line 65)
+* $_sdata, inspect, convenience variable: Convenience Vars. (line 83)
+* $_siginfo, convenience variable: Convenience Vars. (line 89)
+* $_thread, convenience variable: Threads. (line 116)
+* $_tlb, convenience variable: Convenience Vars. (line 95)
+* $bpnum, convenience variable: Set Breaks. (line 6)
+* $cdir, convenience variable: Source Path. (line 108)
+* $cwd, convenience variable: Source Path. (line 108)
+* $tpnum: Create and Delete Tracepoints.
+ (line 98)
+* $trace_file: Tracepoint Variables.
+ (line 16)
+* $trace_frame: Tracepoint Variables.
+ (line 6)
+* $trace_func: Tracepoint Variables.
+ (line 19)
+* $trace_line: Tracepoint Variables.
+ (line 13)
+* $tracepoint: Tracepoint Variables.
+ (line 10)
+* --annotate: Mode Options. (line 107)
+* --args: Mode Options. (line 120)
+* --batch: Mode Options. (line 23)
+* --batch-silent: Mode Options. (line 41)
+* --baud: Mode Options. (line 126)
+* --cd: Mode Options. (line 82)
+* --command: File Options. (line 51)
+* --core: File Options. (line 43)
+* --data-directory: Mode Options. (line 86)
+* --directory: File Options. (line 67)
+* --disable-gdb-index: Mode Options. (line 172)
+* --epoch: Mode Options. (line 102)
+* --eval-command: File Options. (line 57)
+* --exec: File Options. (line 35)
+* --fullname: Mode Options. (line 91)
+* --interpreter: Mode Options. (line 147)
+* --nowindows: Mode Options. (line 72)
+* --nx: Mode Options. (line 11)
+* --pid: File Options. (line 47)
+* --quiet: Mode Options. (line 19)
+* --readnow: File Options. (line 71)
+* --return-child-result: Mode Options. (line 53)
+* --se: File Options. (line 39)
+* --silent: Mode Options. (line 19)
+* --statistics: Mode Options. (line 164)
+* --symbols: File Options. (line 31)
+* --tty: Mode Options. (line 135)
+* --tui: Mode Options. (line 138)
+* --version: Mode Options. (line 168)
+* --windows: Mode Options. (line 78)
+* --with-gdb-datadir: Data Files. (line 19)
+* --with-relocated-sources: Source Path. (line 89)
+* --with-sysroot: Files. (line 434)
+* --write: Mode Options. (line 159)
+* -add-inferior: GDB/MI Miscellaneous Commands.
+ (line 288)
+* -b: Mode Options. (line 126)
+* -break-after: GDB/MI Breakpoint Commands.
+ (line 11)
+* -break-commands: GDB/MI Breakpoint Commands.
+ (line 55)
+* -break-condition: GDB/MI Breakpoint Commands.
+ (line 88)
+* -break-delete: GDB/MI Breakpoint Commands.
+ (line 125)
+* -break-disable: GDB/MI Breakpoint Commands.
+ (line 159)
+* -break-enable: GDB/MI Breakpoint Commands.
+ (line 195)
+* -break-info: GDB/MI Breakpoint Commands.
+ (line 230)
+* -break-insert: GDB/MI Breakpoint Commands.
+ (line 250)
+* -break-list: GDB/MI Breakpoint Commands.
+ (line 355)
+* -break-passcount: GDB/MI Breakpoint Commands.
+ (line 430)
+* -break-watch: GDB/MI Breakpoint Commands.
+ (line 442)
+* -c: File Options. (line 43)
+* -d: File Options. (line 67)
+* -data-disassemble: GDB/MI Data Manipulation.
+ (line 12)
+* -data-evaluate-expression: GDB/MI Data Manipulation.
+ (line 141)
+* -data-list-changed-registers: GDB/MI Data Manipulation.
+ (line 179)
+* -data-list-register-names: GDB/MI Data Manipulation.
+ (line 215)
+* -data-list-register-values: GDB/MI Data Manipulation.
+ (line 255)
+* -data-read-memory: GDB/MI Data Manipulation.
+ (line 345)
+* -data-read-memory-bytes: GDB/MI Data Manipulation.
+ (line 452)
+* -data-write-memory-bytes: GDB/MI Data Manipulation.
+ (line 527)
+* -e: File Options. (line 35)
+* -enable-pretty-printing: GDB/MI Variable Objects.
+ (line 116)
+* -enable-timings: GDB/MI Miscellaneous Commands.
+ (line 384)
+* -environment-cd: GDB/MI Program Context.
+ (line 33)
+* -environment-directory: GDB/MI Program Context.
+ (line 56)
+* -environment-path: GDB/MI Program Context.
+ (line 100)
+* -environment-pwd: GDB/MI Program Context.
+ (line 141)
+* -ex: File Options. (line 57)
+* -exec-arguments: GDB/MI Program Context.
+ (line 9)
+* -exec-continue: GDB/MI Program Execution.
+ (line 13)
+* -exec-finish: GDB/MI Program Execution.
+ (line 56)
+* -exec-interrupt: GDB/MI Program Execution.
+ (line 99)
+* -exec-jump: GDB/MI Program Execution.
+ (line 149)
+* -exec-next: GDB/MI Program Execution.
+ (line 173)
+* -exec-next-instruction: GDB/MI Program Execution.
+ (line 204)
+* -exec-return: GDB/MI Program Execution.
+ (line 240)
+* -exec-run: GDB/MI Program Execution.
+ (line 283)
+* -exec-step: GDB/MI Program Execution.
+ (line 348)
+* -exec-step-instruction: GDB/MI Program Execution.
+ (line 390)
+* -exec-until: GDB/MI Program Execution.
+ (line 431)
+* -f: Mode Options. (line 91)
+* -file-exec-and-symbols: GDB/MI File Commands.
+ (line 12)
+* -file-exec-file: GDB/MI File Commands.
+ (line 40)
+* -file-list-exec-source-file: GDB/MI File Commands.
+ (line 67)
+* -file-list-exec-source-files: GDB/MI File Commands.
+ (line 93)
+* -file-symbol-file: GDB/MI File Commands.
+ (line 123)
+* -gdb-exit: GDB/MI Miscellaneous Commands.
+ (line 9)
+* -gdb-set: GDB/MI Miscellaneous Commands.
+ (line 31)
+* -gdb-show: GDB/MI Miscellaneous Commands.
+ (line 54)
+* -gdb-version: GDB/MI Miscellaneous Commands.
+ (line 77)
+* -inferior-tty-set: GDB/MI Miscellaneous Commands.
+ (line 335)
+* -inferior-tty-show: GDB/MI Miscellaneous Commands.
+ (line 358)
+* -interpreter-exec: GDB/MI Miscellaneous Commands.
+ (line 310)
+* -l: Mode Options. (line 130)
+* -list-features: GDB/MI Miscellaneous Commands.
+ (line 111)
+* -list-target-features: GDB/MI Miscellaneous Commands.
+ (line 154)
+* -list-thread-groups: GDB/MI Miscellaneous Commands.
+ (line 180)
+* -n: Mode Options. (line 11)
+* -nw: Mode Options. (line 72)
+* -p: File Options. (line 47)
+* -q: Mode Options. (line 19)
+* -r: File Options. (line 71)
+* -s: File Options. (line 31)
+* -stack-info-depth: GDB/MI Stack Manipulation.
+ (line 35)
+* -stack-info-frame: GDB/MI Stack Manipulation.
+ (line 9)
+* -stack-list-arguments: GDB/MI Stack Manipulation.
+ (line 73)
+* -stack-list-frames: GDB/MI Stack Manipulation.
+ (line 162)
+* -stack-list-locals: GDB/MI Stack Manipulation.
+ (line 265)
+* -stack-list-variables: GDB/MI Stack Manipulation.
+ (line 305)
+* -stack-select-frame: GDB/MI Stack Manipulation.
+ (line 328)
+* -symbol-list-lines: GDB/MI Symbol Query. (line 9)
+* -t: Mode Options. (line 135)
+* -target-attach: GDB/MI Target Manipulation.
+ (line 9)
+* -target-detach: GDB/MI Target Manipulation.
+ (line 36)
+* -target-disconnect: GDB/MI Target Manipulation.
+ (line 61)
+* -target-download: GDB/MI Target Manipulation.
+ (line 85)
+* -target-file-delete: GDB/MI File Transfer Commands.
+ (line 57)
+* -target-file-get: GDB/MI File Transfer Commands.
+ (line 33)
+* -target-file-put: GDB/MI File Transfer Commands.
+ (line 9)
+* -target-select: GDB/MI Target Manipulation.
+ (line 198)
+* -thread-info: GDB/MI Thread Commands.
+ (line 9)
+* -thread-list-ids: GDB/MI Thread Commands.
+ (line 90)
+* -thread-select: GDB/MI Thread Commands.
+ (line 118)
+* -trace-define-variable: GDB/MI Tracepoint Commands.
+ (line 83)
+* -trace-find: GDB/MI Tracepoint Commands.
+ (line 12)
+* -trace-list-variables: GDB/MI Tracepoint Commands.
+ (line 100)
+* -trace-save: GDB/MI Tracepoint Commands.
+ (line 143)
+* -trace-start: GDB/MI Tracepoint Commands.
+ (line 160)
+* -trace-status: GDB/MI Tracepoint Commands.
+ (line 176)
+* -trace-stop: GDB/MI Tracepoint Commands.
+ (line 244)
+* -var-assign: GDB/MI Variable Objects.
+ (line 474)
+* -var-create: GDB/MI Variable Objects.
+ (line 134)
+* -var-delete: GDB/MI Variable Objects.
+ (line 220)
+* -var-evaluate-expression: GDB/MI Variable Objects.
+ (line 453)
+* -var-info-expression: GDB/MI Variable Objects.
+ (line 391)
+* -var-info-num-children: GDB/MI Variable Objects.
+ (line 269)
+* -var-info-path-expression: GDB/MI Variable Objects.
+ (line 415)
+* -var-info-type: GDB/MI Variable Objects.
+ (line 378)
+* -var-list-children: GDB/MI Variable Objects.
+ (line 285)
+* -var-set-format: GDB/MI Variable Objects.
+ (line 233)
+* -var-set-frozen: GDB/MI Variable Objects.
+ (line 612)
+* -var-set-update-range: GDB/MI Variable Objects.
+ (line 638)
+* -var-set-visualizer: GDB/MI Variable Objects.
+ (line 661)
+* -var-show-attributes: GDB/MI Variable Objects.
+ (line 439)
+* -var-show-format: GDB/MI Variable Objects.
+ (line 256)
+* -var-update: GDB/MI Variable Objects.
+ (line 498)
+* -w: Mode Options. (line 78)
+* -x: File Options. (line 51)
+* ., Modula-2 scope operator: M2 Scope. (line 6)
+* .build-id directory: Separate Debug Files.
+ (line 6)
+* .debug subdirectories: Separate Debug Files.
+ (line 6)
+* .debug_gdb_scripts section: .debug_gdb_scripts section.
+ (line 6)
+* .gdb_index section: Index Files. (line 6)
+* .gdbinit: Startup. (line 60)
+* .gnu_debuglink sections: Separate Debug Files.
+ (line 78)
+* .note.gnu.build-id sections: Separate Debug Files.
+ (line 96)
+* .o files, reading symbols from: Files. (line 132)
+* /proc: SVR4 Process Information.
+ (line 6)
+* <architecture>: Target Description Format.
+ (line 73)
+* <compatible>: Target Description Format.
+ (line 96)
+* <feature>: Target Description Format.
+ (line 120)
+* <flags>: Target Description Format.
+ (line 186)
+* <osabi>: Target Description Format.
+ (line 83)
+* <reg>: Target Description Format.
+ (line 199)
+* <struct>: Target Description Format.
+ (line 164)
+* <union>: Target Description Format.
+ (line 154)
+* <vector>: Target Description Format.
+ (line 147)
+* ? packet: Packets. (line 58)
+* @, referencing memory as an array: Arrays. (line 6)
+* ^connected: GDB/MI Result Records.
+ (line 22)
+* ^done: GDB/MI Result Records.
+ (line 9)
+* ^error: GDB/MI Result Records.
+ (line 25)
+* ^exit: GDB/MI Result Records.
+ (line 29)
+* ^running: GDB/MI Result Records.
+ (line 14)
+* __init__ on Breakpoint: Breakpoints In Python.
+ (line 9)
+* __init__ on Command: Commands In Python. (line 12)
+* __init__ on Function: Functions In Python. (line 11)
+* __init__ on Parameter: Parameters In Python.
+ (line 20)
+* __init__ on Value: Values From Inferior.
+ (line 76)
+* _NSPrintForDebugger, and printing Objective-C objects: The Print Command with Objective-C.
+ (line 11)
+* A packet: Packets. (line 65)
+* abbreviation: Command Syntax. (line 13)
+* abort (C-g): Miscellaneous Commands.
+ (line 10)
+* accept-line (Newline or Return): Commands For History.
+ (line 6)
+* acknowledgment, for GDB remote: Packet Acknowledgment.
+ (line 6)
+* actions: Tracepoint Actions. (line 6)
+* active targets: Active Targets. (line 6)
+* Ada: Ada. (line 6)
+* Ada exception catching: Set Catchpoints. (line 19)
+* Ada mode, general: Ada Mode Intro. (line 6)
+* Ada task switching: Ada Tasks. (line 115)
+* Ada tasking and core file debugging: Ada Tasks and Core Files.
+ (line 6)
+* Ada, deviations from: Additions to Ada. (line 6)
+* Ada, omissions from: Omissions from Ada. (line 6)
+* Ada, problems: Ada Glitches. (line 6)
+* Ada, tasking: Ada Tasks. (line 6)
+* add new commands for external monitor: Connecting. (line 105)
+* add-inferior: Inferiors and Programs.
+ (line 60)
+* add-shared-symbol-files: Files. (line 172)
+* add-symbol-file: Files. (line 113)
+* add-symbol-file-from-memory: Files. (line 162)
+* addr_class: Symbols In Python. (line 71)
+* address <1>: Lazy Strings In Python.
+ (line 27)
+* address: Values From Inferior.
+ (line 45)
+* address of a symbol: Symbols. (line 44)
+* address size for remote targets: Remote Configuration.
+ (line 12)
+* ADP (Angel Debugger Protocol) logging: ARM. (line 89)
+* advance LOCATION: Continuing and Stepping.
+ (line 181)
+* aggregates (Ada): Omissions from Ada. (line 44)
+* AIX threads: Debugging Output. (line 28)
+* alignment of remote memory accesses: Packets. (line 228)
+* all-stop mode: All-Stop Mode. (line 6)
+* Alpha stack: MIPS. (line 6)
+* ambiguous expressions: Ambiguous Expressions.
+ (line 6)
+* AMD 29K register stack: A29K. (line 6)
+* annotations: Annotations Overview.
+ (line 6)
+* annotations for errors, warnings and interrupts: Errors. (line 6)
+* annotations for invalidation messages: Invalidation. (line 6)
+* annotations for prompts: Prompting. (line 6)
+* annotations for running programs: Annotations for Running.
+ (line 6)
+* annotations for source display: Source Annotations. (line 6)
+* append: Dump/Restore Files. (line 35)
+* append data to a file: Dump/Restore Files. (line 6)
+* apply command to several threads: Threads. (line 122)
+* apropos: Help. (line 62)
+* architecture debugging info: Debugging Output. (line 18)
+* argument count in user-defined commands: Define. (line 25)
+* arguments (to your program): Arguments. (line 6)
+* arguments, to gdbserver: Server. (line 34)
+* arguments, to user-defined commands: Define. (line 6)
+* ARM 32-bit mode: ARM. (line 25)
+* ARM RDI: ARM. (line 6)
+* array aggregates (Ada): Omissions from Ada. (line 44)
+* array on Type: Types In Python. (line 82)
+* arrays: Arrays. (line 6)
+* arrays in expressions: Expressions. (line 14)
+* artificial array: Arrays. (line 6)
+* assembly instructions: Machine Code. (line 36)
+* assf: Files. (line 172)
+* assignment: Assignment. (line 6)
+* async output in GDB/MI: GDB/MI Output Syntax.
+ (line 98)
+* async records in GDB/MI: GDB/MI Async Records.
+ (line 6)
+* asynchronous execution: Background Execution.
+ (line 6)
+* asynchronous execution, and process record and replay: Process Record and Replay.
+ (line 52)
+* AT&T disassembly flavor: Machine Code. (line 127)
+* attach: Attach. (line 6)
+* attach to a program by name: Server. (line 79)
+* attach&: Background Execution.
+ (line 38)
+* auto-loading, Python: Auto-loading. (line 6)
+* auto-retry, for remote TCP target: Remote Configuration.
+ (line 108)
+* automatic display: Auto Display. (line 6)
+* automatic hardware breakpoints: Set Breaks. (line 284)
+* automatic overlay debugging: Automatic Overlay Debugging.
+ (line 6)
+* automatic thread selection: All-Stop Mode. (line 28)
+* auxiliary vector: OS Information. (line 21)
+* AVR: AVR. (line 6)
+* awatch: Set Watchpoints. (line 68)
+* b (break): Set Breaks. (line 6)
+* B packet: Packets. (line 92)
+* b packet: Packets. (line 77)
+* background execution: Background Execution.
+ (line 6)
+* backtrace: Backtrace. (line 11)
+* backtrace beyond main function: Backtrace. (line 93)
+* backtrace limit: Backtrace. (line 129)
+* backward-char (C-b): Commands For Moving. (line 15)
+* backward-delete-char (Rubout): Commands For Text. (line 11)
+* backward-kill-line (C-x Rubout): Commands For Killing.
+ (line 9)
+* backward-kill-word (M-<DEL>): Commands For Killing.
+ (line 24)
+* backward-word (M-b): Commands For Moving. (line 22)
+* base name differences: Files. (line 501)
+* baud rate for remote targets: Remote Configuration.
+ (line 21)
+* bc packet: Packets. (line 97)
+* bcache statistics: Maintenance Commands.
+ (line 223)
+* beginning-of-history (M-<): Commands For History.
+ (line 19)
+* beginning-of-line (C-a): Commands For Moving. (line 6)
+* bell-style: Readline Init File Syntax.
+ (line 35)
+* bind-tty-special-chars: Readline Init File Syntax.
+ (line 42)
+* bits in remote address: Remote Configuration.
+ (line 12)
+* block on Frame: Frames In Python. (line 83)
+* block_for_pc: Blocks In Python. (line 17)
+* blocks in python: Blocks In Python. (line 6)
+* bookmark: Checkpoint/Restart. (line 6)
+* BP_ACCESS_WATCHPOINT: Breakpoints In Python.
+ (line 131)
+* BP_BREAKPOINT: Breakpoints In Python.
+ (line 119)
+* BP_HARDWARE_WATCHPOINT: Breakpoints In Python.
+ (line 125)
+* BP_READ_WATCHPOINT: Breakpoints In Python.
+ (line 128)
+* BP_WATCHPOINT: Breakpoints In Python.
+ (line 122)
+* break: Set Breaks. (line 6)
+* break ... task TASKNO (Ada): Ada Tasks. (line 135)
+* break ... thread THREADNO: Thread-Specific Breakpoints.
+ (line 10)
+* break in overloaded functions: Debugging C Plus Plus.
+ (line 9)
+* break on a system call.: Set Catchpoints. (line 48)
+* break on fork/exec: Set Catchpoints. (line 43)
+* BREAK signal instead of Ctrl-C: Remote Configuration.
+ (line 29)
+* break, and Objective-C: Method Names in Commands.
+ (line 9)
+* break-range: PowerPC Embedded. (line 38)
+* breakpoint: Events In Python. (line 102)
+* breakpoint address adjusted: Breakpoint-related Warnings.
+ (line 6)
+* breakpoint annotation: Annotations for Running.
+ (line 47)
+* breakpoint commands: Break Commands. (line 6)
+* breakpoint commands for GDB/MI: GDB/MI Breakpoint Commands.
+ (line 6)
+* breakpoint conditions: Conditions. (line 6)
+* breakpoint numbers: Breakpoints. (line 41)
+* breakpoint on events: Breakpoints. (line 33)
+* breakpoint on memory address: Breakpoints. (line 20)
+* breakpoint on variable modification: Breakpoints. (line 20)
+* breakpoint ranges: Breakpoints. (line 48)
+* breakpoint subroutine, remote: Stub Contents. (line 31)
+* breakpointing Ada elaboration code: Stopping Before Main Program.
+ (line 6)
+* breakpoints <1>: Basic Python. (line 32)
+* breakpoints: Breakpoints. (line 6)
+* breakpoints and tasks, in Ada: Ada Tasks. (line 135)
+* breakpoints and threads: Thread-Specific Breakpoints.
+ (line 10)
+* breakpoints at functions matching a regexp: Set Breaks. (line 92)
+* breakpoints in overlays: Overlay Commands. (line 93)
+* breakpoints in python: Breakpoints In Python.
+ (line 6)
+* breakpoints, multiple locations: Set Breaks. (line 190)
+* breakpoints-invalid annotation: Invalidation. (line 13)
+* bs packet: Packets. (line 103)
+* bt (backtrace): Backtrace. (line 11)
+* bug criteria: Bug Criteria. (line 6)
+* bug reports: Bug Reporting. (line 6)
+* bugs in GDB: GDB Bugs. (line 6)
+* build ID sections: Separate Debug Files.
+ (line 96)
+* build ID, and separate debugging files: Separate Debug Files.
+ (line 6)
+* building GDB, requirements for: Requirements. (line 6)
+* built-in simulator target: Target Commands. (line 73)
+* c (continue): Continuing and Stepping.
+ (line 15)
+* c (SingleKey TUI key): TUI Single Key Mode. (line 10)
+* C and C++: C. (line 6)
+* C and C++ checks: C Checks. (line 6)
+* C and C++ constants: C Constants. (line 6)
+* C and C++ defaults: C Defaults. (line 6)
+* C and C++ operators: C Operators. (line 6)
+* C packet: Packets. (line 116)
+* c packet: Packets. (line 110)
+* C++: C. (line 10)
+* C++ compilers: C Plus Plus Expressions.
+ (line 8)
+* C++ exception handling: Debugging C Plus Plus.
+ (line 20)
+* C++ overload debugging info: Debugging Output. (line 125)
+* C++ scope resolution: Variables. (line 54)
+* C++ symbol decoding style: Print Settings. (line 296)
+* C++ symbol display: Debugging C Plus Plus.
+ (line 29)
+* C-L: TUI Keys. (line 65)
+* C-x 1: TUI Keys. (line 19)
+* C-x 2: TUI Keys. (line 26)
+* C-x a: TUI Keys. (line 11)
+* C-x A: TUI Keys. (line 12)
+* C-x C-a: TUI Keys. (line 10)
+* C-x o: TUI Keys. (line 34)
+* C-x s: TUI Keys. (line 41)
+* caching data of remote targets: Caching Remote Data. (line 6)
+* call: Calling. (line 10)
+* call dummy stack unwinding: Calling. (line 35)
+* call dummy stack unwinding on unhandled exception.: Calling.
+ (line 46)
+* call overloaded functions: C Plus Plus Expressions.
+ (line 27)
+* call stack: Stack. (line 9)
+* call stack traces: Backtrace. (line 6)
+* call-last-kbd-macro (C-x e): Keyboard Macros. (line 13)
+* calling functions: Calling. (line 6)
+* calling make: Shell Commands. (line 19)
+* capitalize-word (M-c): Commands For Text. (line 49)
+* case sensitivity in symbol names: Symbols. (line 27)
+* case-insensitive symbol names: Symbols. (line 27)
+* cast on Value: Values From Inferior.
+ (line 109)
+* casts, in expressions: Expressions. (line 28)
+* casts, to view memory: Expressions. (line 43)
+* catch: Set Catchpoints. (line 10)
+* catch Ada exceptions: Set Catchpoints. (line 19)
+* catch exceptions, list active handlers: Frame Info. (line 60)
+* catchpoints: Breakpoints. (line 33)
+* catchpoints, setting: Set Catchpoints. (line 6)
+* cd: Working Directory. (line 16)
+* cdir: Source Path. (line 108)
+* Cell Broadband Engine: SPU. (line 6)
+* change working directory: Working Directory. (line 16)
+* character sets: Character Sets. (line 6)
+* character-search (C-]): Miscellaneous Commands.
+ (line 41)
+* character-search-backward (M-C-]): Miscellaneous Commands.
+ (line 46)
+* charset: Character Sets. (line 6)
+* checkpoint: Checkpoint/Restart. (line 6)
+* checkpoints and process id: Checkpoint/Restart. (line 80)
+* checks, range: Type Checking. (line 65)
+* checks, type: Checks. (line 31)
+* checksum, for GDB remote: Overview. (line 20)
+* children on pretty printer: Pretty Printing API. (line 12)
+* choosing target byte order: Byte Order. (line 6)
+* circular trace buffer: Starting and Stopping Trace Experiments.
+ (line 74)
+* clear: Delete Breaks. (line 21)
+* clear, and Objective-C: Method Names in Commands.
+ (line 9)
+* clear-screen (C-l): Commands For Moving. (line 26)
+* clearing breakpoints, watchpoints, catchpoints: Delete Breaks.
+ (line 6)
+* clone-inferior: Inferiors and Programs.
+ (line 67)
+* close, file-i/o system call: close. (line 6)
+* closest symbol and offset for an address: Symbols. (line 54)
+* code: Types In Python. (line 24)
+* code address and its source line: Machine Code. (line 25)
+* collect (tracepoints): Tracepoint Actions. (line 49)
+* collected data discarded: Starting and Stopping Trace Experiments.
+ (line 6)
+* colon, doubled as scope operator: M2 Scope. (line 6)
+* colon-colon, context for variables/functions: Variables. (line 44)
+* colon-colon, in Modula-2: M2 Scope. (line 6)
+* command editing: Readline Bare Essentials.
+ (line 6)
+* command files: Command Files. (line 6)
+* command history: Command History. (line 6)
+* command hooks: Hooks. (line 6)
+* command interpreters: Interpreters. (line 6)
+* command line editing: Editing. (line 6)
+* command scripts, debugging: Messages/Warnings. (line 67)
+* command tracing: Messages/Warnings. (line 62)
+* COMMAND_BREAKPOINTS: Commands In Python. (line 145)
+* COMMAND_DATA: Commands In Python. (line 115)
+* COMMAND_FILES: Commands In Python. (line 126)
+* COMMAND_MAINTENANCE: Commands In Python. (line 163)
+* COMMAND_NONE: Commands In Python. (line 105)
+* COMMAND_OBSCURE: Commands In Python. (line 157)
+* COMMAND_RUNNING: Commands In Python. (line 109)
+* COMMAND_STACK: Commands In Python. (line 120)
+* COMMAND_STATUS: Commands In Python. (line 139)
+* COMMAND_SUPPORT: Commands In Python. (line 132)
+* COMMAND_TRACEPOINTS: Commands In Python. (line 151)
+* commands <1>: Breakpoints In Python.
+ (line 157)
+* commands: Break Commands. (line 11)
+* commands annotation: Prompting. (line 27)
+* commands for C++: Debugging C Plus Plus.
+ (line 6)
+* commands in python: Commands In Python. (line 6)
+* commands to access python: Python Commands. (line 6)
+* comment: Command Syntax. (line 38)
+* comment-begin: Readline Init File Syntax.
+ (line 47)
+* COMMON blocks, Fortran: Special Fortran Commands.
+ (line 9)
+* common targets: Target Commands. (line 46)
+* compare-sections: Memory. (line 129)
+* compatibility, GDB/MI and CLI: GDB/MI Compatibility with CLI.
+ (line 6)
+* compilation directory: Source Path. (line 108)
+* compiling, on Sparclet: Sparclet. (line 16)
+* complete: Help. (line 76)
+* complete (<TAB>): Commands For Completion.
+ (line 6)
+* complete on Command: Commands In Python. (line 73)
+* COMPLETE_COMMAND: Commands In Python. (line 184)
+* COMPLETE_FILENAME: Commands In Python. (line 177)
+* COMPLETE_LOCATION: Commands In Python. (line 180)
+* COMPLETE_NONE: Commands In Python. (line 174)
+* COMPLETE_SYMBOL: Commands In Python. (line 188)
+* completion: Completion. (line 6)
+* completion of Python commands: Commands In Python. (line 72)
+* completion of quoted strings: Completion. (line 57)
+* completion of structure field names: Completion. (line 96)
+* completion of union field names: Completion. (line 96)
+* completion-query-items: Readline Init File Syntax.
+ (line 57)
+* compressed debug sections: Requirements. (line 41)
+* condition <1>: Breakpoints In Python.
+ (line 152)
+* condition: Conditions. (line 45)
+* conditional breakpoints: Conditions. (line 6)
+* conditional tracepoints: Tracepoint Conditions.
+ (line 6)
+* configuring GDB: Running Configure. (line 6)
+* confirmation: Messages/Warnings. (line 50)
+* connect on EventRegistry: Events In Python. (line 20)
+* connection timeout, for remote TCP target: Remote Configuration.
+ (line 123)
+* console i/o as part of file-i/o: Console I/O. (line 6)
+* console interpreter: Interpreters. (line 21)
+* console output in GDB/MI: GDB/MI Output Syntax.
+ (line 106)
+* const on Type: Types In Python. (line 91)
+* constants, in file-i/o protocol: Constants. (line 6)
+* continue: Continuing and Stepping.
+ (line 15)
+* continue&: Background Execution.
+ (line 53)
+* continuing: Continuing and Stepping.
+ (line 6)
+* continuing threads: Thread Stops. (line 6)
+* control C, and remote debugging: Bootstrapping. (line 25)
+* controlling terminal: Input/Output. (line 23)
+* convenience functions: Convenience Vars. (line 106)
+* convenience functions in python: Functions In Python. (line 6)
+* convenience variables: Convenience Vars. (line 6)
+* convenience variables for tracepoints: Tracepoint Variables.
+ (line 6)
+* convenience variables, and trace state variables: Trace State Variables.
+ (line 17)
+* convenience variables, initializing: Convenience Vars. (line 41)
+* convert-meta: Readline Init File Syntax.
+ (line 67)
+* copy-backward-word (): Commands For Killing.
+ (line 49)
+* copy-forward-word (): Commands For Killing.
+ (line 54)
+* copy-region-as-kill (): Commands For Killing.
+ (line 45)
+* core dump file: Files. (line 6)
+* core dump file target: Target Commands. (line 54)
+* core-file: Files. (line 97)
+* crash of debugger: Bug Criteria. (line 9)
+* CRC algorithm definition: Separate Debug Files.
+ (line 140)
+* CRC of memory block, remote request: General Query Packets.
+ (line 63)
+* CRIS: CRIS. (line 6)
+* CRIS mode: CRIS. (line 26)
+* CRIS version: CRIS. (line 10)
+* Ctrl-BREAK, MS-Windows: Cygwin Native. (line 9)
+* ctrl-c message, in file-i/o protocol: The Ctrl-C Message. (line 6)
+* Ctrl-o (operate-and-get-next): Command Syntax. (line 42)
+* current Ada task ID: Ada Tasks. (line 105)
+* current directory: Source Path. (line 108)
+* current stack frame: Frames. (line 45)
+* current thread: Threads. (line 45)
+* current thread, remote request: General Query Packets.
+ (line 52)
+* current_objfile: Objfiles In Python. (line 16)
+* current_progspace: Progspaces In Python.
+ (line 15)
+* cwd: Source Path. (line 108)
+* Cygwin DLL, debugging: Cygwin Native. (line 42)
+* Cygwin-specific commands: Cygwin Native. (line 6)
+* D: D. (line 6)
+* d (delete): Delete Breaks. (line 41)
+* d (SingleKey TUI key): TUI Single Key Mode. (line 13)
+* d packet: Packets. (line 122)
+* D packet: Packets. (line 129)
+* Darwin: Darwin. (line 6)
+* data breakpoints: Breakpoints. (line 20)
+* data manipulation, in GDB/MI: GDB/MI Data Manipulation.
+ (line 6)
+* dcache line-size: Caching Remote Data. (line 48)
+* dcache size: Caching Remote Data. (line 45)
+* dead names, GNU Hurd: Hurd Native. (line 85)
+* debug expression parser: Debugging Output. (line 131)
+* debug formats and C++: C Plus Plus Expressions.
+ (line 8)
+* debug link sections: Separate Debug Files.
+ (line 78)
+* debug remote protocol: Debugging Output. (line 140)
+* debug_chaos: M32R/D. (line 50)
+* debugger crash: Bug Criteria. (line 9)
+* debugging C++ programs: C Plus Plus Expressions.
+ (line 8)
+* debugging information directory, global: Separate Debug Files.
+ (line 6)
+* debugging information in separate files: Separate Debug Files.
+ (line 6)
+* debugging libthread_db: Threads. (line 212)
+* debugging multiple processes: Forks. (line 52)
+* debugging optimized code: Optimized Code. (line 6)
+* debugging stub, example: Remote Stub. (line 6)
+* debugging target: Targets. (line 6)
+* debugging the Cygwin DLL: Cygwin Native. (line 42)
+* decimal floating point format: Decimal Floating Point.
+ (line 6)
+* decode_line: Basic Python. (line 158)
+* default collection action: Tracepoint Actions. (line 114)
+* default data directory: Data Files. (line 19)
+* default source path substitution: Source Path. (line 89)
+* default system root: Files. (line 434)
+* default_visualizer: Pretty Printing API. (line 86)
+* define: Define. (line 37)
+* define trace state variable, remote request: Tracepoint Packets.
+ (line 127)
+* defining macros interactively: Macros. (line 52)
+* definition, showing a macro's: Macros. (line 47)
+* delete: Delete Breaks. (line 41)
+* delete breakpoints: Delete Breaks. (line 41)
+* delete checkpoint CHECKPOINT-ID: Checkpoint/Restart. (line 56)
+* delete display: Auto Display. (line 45)
+* delete mem: Memory Region Attributes.
+ (line 34)
+* delete on Breakpoint: Breakpoints In Python.
+ (line 70)
+* delete tracepoint: Create and Delete Tracepoints.
+ (line 101)
+* delete tvariable: Trace State Variables.
+ (line 42)
+* delete-char (C-d): Commands For Text. (line 6)
+* delete-char-or-list (): Commands For Completion.
+ (line 30)
+* delete-horizontal-space (): Commands For Killing.
+ (line 37)
+* deleting breakpoints, watchpoints, catchpoints: Delete Breaks.
+ (line 6)
+* deliver a signal to a program: Signaling. (line 6)
+* demangling C++ names: Print Settings. (line 277)
+* deprecated commands: Maintenance Commands.
+ (line 90)
+* dereference on Value: Values From Inferior.
+ (line 115)
+* derived type of an object, printing: Print Settings. (line 329)
+* descriptor tables display: DJGPP Native. (line 24)
+* detach: Attach. (line 36)
+* detach (remote): Connecting. (line 91)
+* detach from task, GNU Hurd: Hurd Native. (line 60)
+* detach from thread, GNU Hurd: Hurd Native. (line 110)
+* detach inferiors INFNO...: Inferiors and Programs.
+ (line 97)
+* digit-argument (M-0, M-1, ... M--): Numeric Arguments. (line 6)
+* dir: Source Path. (line 39)
+* direct memory access (DMA) on MS-DOS: DJGPP Native. (line 75)
+* directories for source files: Source Path. (line 6)
+* directory: Source Path. (line 39)
+* directory, compilation: Source Path. (line 108)
+* directory, current: Source Path. (line 108)
+* dis (disable): Disabling. (line 38)
+* disable: Disabling. (line 38)
+* disable display: Auto Display. (line 56)
+* disable mem: Memory Region Attributes.
+ (line 38)
+* disable pretty-printer: Pretty-Printer Commands.
+ (line 20)
+* disable tracepoint: Enable and Disable Tracepoints.
+ (line 9)
+* disable-completion: Readline Init File Syntax.
+ (line 73)
+* disassemble: Machine Code. (line 36)
+* disconnect: Connecting. (line 98)
+* disconnect on EventRegistry: Events In Python. (line 25)
+* disconnected tracing: Starting and Stopping Trace Experiments.
+ (line 38)
+* displaced stepping debugging info: Debugging Output. (line 53)
+* displaced stepping support: Maintenance Commands.
+ (line 56)
+* displaced stepping, and process record and replay: Process Record and Replay.
+ (line 47)
+* display: Auto Display. (line 23)
+* display command history: Command History. (line 78)
+* display derived types: Print Settings. (line 329)
+* display disabled out of scope: Auto Display. (line 86)
+* display GDB copyright: Help. (line 136)
+* display of expressions: Auto Display. (line 6)
+* display remote monitor communications: Target Commands. (line 108)
+* display remote packets: Debugging Output. (line 140)
+* display_hint on pretty printer: Pretty Printing API. (line 25)
+* DJGPP debugging: DJGPP Native. (line 6)
+* dll-symbols: Cygwin Native. (line 38)
+* DLLs with no debugging symbols: Non-debug DLL Symbols.
+ (line 6)
+* do (down): Selection. (line 40)
+* do not print frame argument values: Print Settings. (line 135)
+* do-uppercase-version (M-a, M-b, M-X, ...): Miscellaneous Commands.
+ (line 14)
+* document: Define. (line 49)
+* documentation: Formatting Documentation.
+ (line 22)
+* don't repeat command: Define. (line 61)
+* don't repeat Python command: Commands In Python. (line 43)
+* dont-repeat: Define. (line 61)
+* dont_repeat on Command: Commands In Python. (line 44)
+* DOS file-name semantics of file names.: Files. (line 457)
+* DOS serial data link, remote debugging: DJGPP Native. (line 121)
+* DOS serial port status: DJGPP Native. (line 142)
+* down: Selection. (line 40)
+* Down: TUI Keys. (line 56)
+* down-silently: Selection. (line 64)
+* downcase-word (M-l): Commands For Text. (line 45)
+* download server address (M32R): M32R/D. (line 27)
+* download to Sparclet: Sparclet Download. (line 6)
+* download to VxWorks: VxWorks Download. (line 6)
+* DPMI: DJGPP Native. (line 6)
+* dump: Dump/Restore Files. (line 13)
+* dump all data collected at tracepoint: tdump. (line 6)
+* dump core from inferior: Core File Generation.
+ (line 6)
+* dump data to a file: Dump/Restore Files. (line 6)
+* dump-functions (): Miscellaneous Commands.
+ (line 61)
+* dump-macros (): Miscellaneous Commands.
+ (line 73)
+* dump-variables (): Miscellaneous Commands.
+ (line 67)
+* dump/restore files: Dump/Restore Files. (line 6)
+* DVC register: PowerPC Embedded. (line 6)
+* DWARF 2 compilation units cache: Maintenance Commands.
+ (line 281)
+* DWARF-2 CFI and CRIS: CRIS. (line 18)
+* DWARF2 DIEs: Debugging Output. (line 46)
+* dynamic linking: Files. (line 113)
+* dynamic varobj: GDB/MI Variable Objects.
+ (line 164)
+* dynamic_cast on Value: Values From Inferior.
+ (line 131)
+* dynamic_type: Values From Inferior.
+ (line 59)
+* e (edit): Edit. (line 6)
+* echo: Output. (line 12)
+* edit: Edit. (line 6)
+* editing: Editing. (line 15)
+* editing command lines: Readline Bare Essentials.
+ (line 6)
+* editing source files: Edit. (line 6)
+* editing-mode: Readline Init File Syntax.
+ (line 78)
+* eight-bit characters in strings: Print Settings. (line 222)
+* elaboration phase: Starting. (line 90)
+* else: Command Files. (line 75)
+* Emacs: Emacs. (line 6)
+* empty response, for unsupported packets: Overview. (line 96)
+* enable: Disabling. (line 45)
+* enable display: Auto Display. (line 65)
+* enable mem: Memory Region Attributes.
+ (line 42)
+* enable pretty-printer: Pretty-Printer Commands.
+ (line 25)
+* enable tracepoint: Enable and Disable Tracepoints.
+ (line 15)
+* enable-keypad: Readline Init File Syntax.
+ (line 84)
+* enable/disable a breakpoint: Disabling. (line 6)
+* enabled: Breakpoints In Python.
+ (line 75)
+* encoding: Lazy Strings In Python.
+ (line 37)
+* end: Blocks In Python. (line 40)
+* end (breakpoint commands): Break Commands. (line 11)
+* end (if/else/while commands): Command Files. (line 104)
+* end (user-defined commands): Define. (line 49)
+* end-kbd-macro (C-x )): Keyboard Macros. (line 9)
+* end-of-history (M->): Commands For History.
+ (line 22)
+* end-of-line (C-e): Commands For Moving. (line 9)
+* entering numbers: Numbers. (line 6)
+* environment (of your program): Environment. (line 6)
+* errno values, in file-i/o protocol: Errno Values. (line 6)
+* error annotation: Errors. (line 10)
+* error on valid input: Bug Criteria. (line 12)
+* error-begin annotation: Errors. (line 22)
+* eval: Output. (line 117)
+* event debugging info: Debugging Output. (line 61)
+* event designators: Event Designators. (line 6)
+* event handling: Set Catchpoints. (line 6)
+* examine process image: SVR4 Process Information.
+ (line 6)
+* examining data: Data. (line 6)
+* examining memory: Memory. (line 9)
+* exception handlers: Set Catchpoints. (line 6)
+* exception handlers, how to list: Frame Info. (line 60)
+* exceptionHandler: Bootstrapping. (line 38)
+* exceptions, python: Exception Handling. (line 6)
+* exchange-point-and-mark (C-x C-x): Miscellaneous Commands.
+ (line 36)
+* exec-file: Files. (line 39)
+* executable file: Files. (line 16)
+* executable file target: Target Commands. (line 50)
+* executable file, for remote target: Remote Configuration.
+ (line 79)
+* execute: Basic Python. (line 15)
+* execute commands from a file: Command Files. (line 17)
+* execute forward or backward in time: Reverse Execution. (line 87)
+* execute remote command, remote request: General Query Packets.
+ (line 268)
+* execution, foreground, background and asynchronous: Background Execution.
+ (line 6)
+* exit_code: Events In Python. (line 72)
+* exited annotation: Annotations for Running.
+ (line 18)
+* exiting GDB: Quitting GDB. (line 6)
+* expand macro once: Macros. (line 38)
+* expand-tilde: Readline Init File Syntax.
+ (line 89)
+* expanding preprocessor macros: Macros. (line 29)
+* expression: Breakpoints In Python.
+ (line 146)
+* expression debugging info: Debugging Output. (line 68)
+* expression parser, debugging info: Debugging Output. (line 131)
+* expressions: Expressions. (line 6)
+* expressions in Ada: Ada. (line 11)
+* expressions in C or C++: C. (line 6)
+* expressions in C++: C Plus Plus Expressions.
+ (line 6)
+* expressions in Modula-2: Modula-2. (line 12)
+* extend GDB for remote targets: Connecting. (line 105)
+* extending GDB: Extending GDB. (line 6)
+* extra signal information: Signals. (line 102)
+* f (frame): Selection. (line 11)
+* f (SingleKey TUI key): TUI Single Key Mode. (line 16)
+* F packet: Packets. (line 146)
+* F reply packet: The F Reply Packet. (line 6)
+* F request packet: The F Request Packet.
+ (line 6)
+* fast tracepoints: Set Tracepoints. (line 24)
+* fast tracepoints, setting: Create and Delete Tracepoints.
+ (line 40)
+* fatal signal: Bug Criteria. (line 9)
+* fatal signals: Signals. (line 15)
+* features of the remote protocol: General Query Packets.
+ (line 328)
+* fg (resume foreground execution): Continuing and Stepping.
+ (line 15)
+* fields on Type: Types In Python. (line 41)
+* file: Files. (line 16)
+* file name canonicalization: Files. (line 501)
+* file transfer: File Transfer. (line 6)
+* file transfer, remote protocol: Host I/O Packets. (line 6)
+* file-i/o examples: File-I/O Examples. (line 6)
+* file-i/o overview: File-I/O Overview. (line 6)
+* File-I/O remote protocol extension: File-I/O Remote Protocol Extension.
+ (line 6)
+* file-i/o reply packet: The F Reply Packet. (line 6)
+* file-i/o request packet: The F Request Packet.
+ (line 6)
+* filename <1>: Symbol Tables In Python.
+ (line 41)
+* filename <2>: Progspaces In Python.
+ (line 25)
+* filename: Objfiles In Python. (line 29)
+* fin (finish): Continuing and Stepping.
+ (line 110)
+* find: Searching Memory. (line 9)
+* find downloadable SREC files (M32R): M32R/D. (line 15)
+* find trace snapshot: tfind. (line 6)
+* find_sal on Frame: Frames In Python. (line 96)
+* finish: Continuing and Stepping.
+ (line 110)
+* finish&: Background Execution.
+ (line 56)
+* flinching: Messages/Warnings. (line 50)
+* float promotion: ABI. (line 29)
+* floating point: Floating Point Hardware.
+ (line 6)
+* floating point registers: Registers. (line 15)
+* floating point, MIPS remote: MIPS Embedded. (line 60)
+* flush: Basic Python. (line 122)
+* flush_i_cache: Bootstrapping. (line 60)
+* flushregs: Maintenance Commands.
+ (line 208)
+* focus: TUI Commands. (line 40)
+* focus of debugging: Threads. (line 45)
+* foo: Symbol Errors. (line 50)
+* foreground execution: Background Execution.
+ (line 6)
+* fork, debugging programs which call: Forks. (line 6)
+* format options: Print Settings. (line 6)
+* formatted output: Output Formats. (line 6)
+* Fortran: Summary. (line 40)
+* Fortran Defaults: Fortran Defaults. (line 6)
+* Fortran operators and expressions: Fortran Operators. (line 6)
+* Fortran-specific support in GDB: Fortran. (line 6)
+* forward-backward-delete-char (): Commands For Text. (line 15)
+* forward-char (C-f): Commands For Moving. (line 12)
+* forward-search: Search. (line 9)
+* forward-search-history (C-s): Commands For History.
+ (line 30)
+* forward-word (M-f): Commands For Moving. (line 18)
+* FR-V shared-library debugging: Debugging Output. (line 158)
+* frame debugging info: Debugging Output. (line 76)
+* frame number: Frames. (line 28)
+* frame pointer: Frames. (line 21)
+* frame pointer register: Registers. (line 26)
+* frame, command: Frames. (line 45)
+* frame, definition: Frames. (line 6)
+* frame, selecting: Selection. (line 11)
+* frame_stop_reason_string: Frames In Python. (line 30)
+* frameless execution: Frames. (line 34)
+* frames in python: Frames In Python. (line 6)
+* frames-invalid annotation: Invalidation. (line 9)
+* free memory information (MS-DOS): DJGPP Native. (line 19)
+* fstat, file-i/o system call: stat/fstat. (line 6)
+* ftrace: Create and Delete Tracepoints.
+ (line 40)
+* Fujitsu: Remote Stub. (line 69)
+* full symbol tables, listing GDB's internal: Symbols. (line 291)
+* fullname on Symtab: Symbol Tables In Python.
+ (line 58)
+* Function: Functions In Python. (line 6)
+* function: Blocks In Python. (line 43)
+* function call arguments, optimized out: Backtrace. (line 71)
+* function entry/exit, wrong values of variables: Variables. (line 58)
+* function on Frame: Frames In Python. (line 86)
+* functions without line info, and stepping: Continuing and Stepping.
+ (line 93)
+* G packet: Packets. (line 180)
+* g packet: Packets. (line 151)
+* g++, GNU C++ compiler: C. (line 10)
+* garbled pointers: DJGPP Native. (line 42)
+* GCC and C++: C Plus Plus Expressions.
+ (line 8)
+* gcore: Core File Generation.
+ (line 18)
+* GDB bugs, reporting: Bug Reporting. (line 6)
+* GDB internal error: Maintenance Commands.
+ (line 124)
+* gdb module: Basic Python. (line 6)
+* GDB reference card: Formatting Documentation.
+ (line 6)
+* GDB startup: Startup. (line 6)
+* GDB version number: Help. (line 126)
+* gdb.Block: Blocks In Python. (line 6)
+* gdb.block_for_pc: Blocks In Python. (line 16)
+* gdb.BP_ACCESS_WATCHPOINT: Breakpoints In Python.
+ (line 131)
+* gdb.BP_BREAKPOINT: Breakpoints In Python.
+ (line 119)
+* gdb.BP_HARDWARE_WATCHPOINT: Breakpoints In Python.
+ (line 125)
+* gdb.BP_READ_WATCHPOINT: Breakpoints In Python.
+ (line 128)
+* gdb.BP_WATCHPOINT: Breakpoints In Python.
+ (line 122)
+* gdb.Breakpoint: Breakpoints In Python.
+ (line 6)
+* gdb.breakpoints: Basic Python. (line 31)
+* gdb.COMMAND_BREAKPOINTS: Commands In Python. (line 145)
+* gdb.COMMAND_DATA: Commands In Python. (line 115)
+* gdb.COMMAND_FILES: Commands In Python. (line 126)
+* gdb.COMMAND_MAINTENANCE: Commands In Python. (line 163)
+* gdb.COMMAND_NONE: Commands In Python. (line 105)
+* gdb.COMMAND_OBSCURE: Commands In Python. (line 157)
+* gdb.COMMAND_RUNNING: Commands In Python. (line 109)
+* gdb.COMMAND_STACK: Commands In Python. (line 120)
+* gdb.COMMAND_STATUS: Commands In Python. (line 139)
+* gdb.COMMAND_SUPPORT: Commands In Python. (line 132)
+* gdb.COMMAND_TRACEPOINTS: Commands In Python. (line 151)
+* gdb.COMPLETE_COMMAND: Commands In Python. (line 184)
+* gdb.COMPLETE_FILENAME: Commands In Python. (line 177)
+* gdb.COMPLETE_LOCATION: Commands In Python. (line 180)
+* gdb.COMPLETE_NONE: Commands In Python. (line 174)
+* gdb.COMPLETE_SYMBOL: Commands In Python. (line 188)
+* gdb.current_objfile: Objfiles In Python. (line 15)
+* gdb.current_progspace: Progspaces In Python.
+ (line 14)
+* gdb.decode_line: Basic Python. (line 157)
+* gdb.default_visualizer: Pretty Printing API. (line 85)
+* gdb.error: Exception Handling. (line 22)
+* gdb.execute: Basic Python. (line 14)
+* gdb.flush: Basic Python. (line 121)
+* gdb.Function: Functions In Python. (line 6)
+* gdb.GdbError: Exception Handling. (line 42)
+* gdb.history: Basic Python. (line 46)
+* gdb.Inferior: Inferiors In Python. (line 6)
+* gdb.InferiorThread: Threads In Python. (line 6)
+* gdb.ini: Startup. (line 60)
+* gdb.LazyString: Lazy Strings In Python.
+ (line 6)
+* gdb.lookup_global_symbol: Symbols In Python. (line 33)
+* gdb.lookup_symbol: Symbols In Python. (line 13)
+* gdb.lookup_type: Types In Python. (line 11)
+* gdb.MemoryError: Exception Handling. (line 30)
+* gdb.newest_frame: Frames In Python. (line 26)
+* gdb.Objfile: Objfiles In Python. (line 6)
+* gdb.objfiles: Objfiles In Python. (line 21)
+* gdb.PARAM_AUTO_BOOLEAN: Parameters In Python.
+ (line 93)
+* gdb.PARAM_BOOLEAN: Parameters In Python.
+ (line 89)
+* gdb.PARAM_ENUM: Parameters In Python.
+ (line 127)
+* gdb.PARAM_FILENAME: Parameters In Python.
+ (line 119)
+* gdb.PARAM_INTEGER: Parameters In Python.
+ (line 102)
+* gdb.PARAM_OPTIONAL_FILENAME: Parameters In Python.
+ (line 116)
+* gdb.PARAM_STRING: Parameters In Python.
+ (line 106)
+* gdb.PARAM_STRING_NOESCAPE: Parameters In Python.
+ (line 112)
+* gdb.PARAM_UINTEGER: Parameters In Python.
+ (line 98)
+* gdb.PARAM_ZINTEGER: Parameters In Python.
+ (line 123)
+* gdb.parameter: Basic Python. (line 35)
+* gdb.Parameter: Parameters In Python.
+ (line 6)
+* gdb.parse_and_eval: Basic Python. (line 58)
+* gdb.post_event: Basic Python. (line 69)
+* gdb.printing: gdb.printing. (line 6)
+* gdb.Progspace: Progspaces In Python.
+ (line 6)
+* gdb.progspaces: Progspaces In Python.
+ (line 18)
+* gdb.PYTHONDIR: Basic Python. (line 11)
+* gdb.read_memory: Inferiors In Python. (line 44)
+* gdb.search_memory: Inferiors In Python. (line 57)
+* gdb.selected_frame: Frames In Python. (line 22)
+* gdb.selected_thread: Threads In Python. (line 13)
+* gdb.solib_name: Basic Python. (line 153)
+* gdb.STDERR: Basic Python. (line 111)
+* gdb.STDLOG: Basic Python. (line 135)
+* gdb.STDOUT: Basic Python. (line 129)
+* gdb.string_to_argv: Commands In Python. (line 62)
+* gdb.Symbol: Symbols In Python. (line 6)
+* gdb.SYMBOL_FUNCTIONS_DOMAIN: Symbols In Python. (line 117)
+* gdb.SYMBOL_LABEL_DOMAIN: Symbols In Python. (line 110)
+* gdb.SYMBOL_LOC_ARG: Symbols In Python. (line 139)
+* gdb.SYMBOL_LOC_BLOCK: Symbols In Python. (line 160)
+* gdb.SYMBOL_LOC_COMPUTED: Symbols In Python. (line 174)
+* gdb.SYMBOL_LOC_CONST: Symbols In Python. (line 130)
+* gdb.SYMBOL_LOC_CONST_BYTES: Symbols In Python. (line 163)
+* gdb.SYMBOL_LOC_LOCAL: Symbols In Python. (line 153)
+* gdb.SYMBOL_LOC_OPTIMIZED_OUT: Symbols In Python. (line 171)
+* gdb.SYMBOL_LOC_REF_ARG: Symbols In Python. (line 143)
+* gdb.SYMBOL_LOC_REGISTER: Symbols In Python. (line 136)
+* gdb.SYMBOL_LOC_REGPARM_ADDR: Symbols In Python. (line 148)
+* gdb.SYMBOL_LOC_STATIC: Symbols In Python. (line 133)
+* gdb.SYMBOL_LOC_TYPEDEF: Symbols In Python. (line 156)
+* gdb.SYMBOL_LOC_UNDEF: Symbols In Python. (line 128)
+* gdb.SYMBOL_LOC_UNRESOLVED: Symbols In Python. (line 166)
+* gdb.SYMBOL_STRUCT_DOMAIN: Symbols In Python. (line 107)
+* gdb.SYMBOL_TYPES_DOMAIN: Symbols In Python. (line 120)
+* gdb.SYMBOL_UNDEF_DOMAIN: Symbols In Python. (line 100)
+* gdb.SYMBOL_VAR_DOMAIN: Symbols In Python. (line 103)
+* gdb.SYMBOL_VARIABLES_DOMAIN: Symbols In Python. (line 113)
+* gdb.Symtab: Symbol Tables In Python.
+ (line 6)
+* gdb.Symtab_and_line: Symbol Tables In Python.
+ (line 6)
+* gdb.target_charset: Basic Python. (line 142)
+* gdb.target_wide_charset: Basic Python. (line 147)
+* gdb.Type: Types In Python. (line 6)
+* gdb.TYPE_CODE_ARRAY: Types In Python. (line 155)
+* gdb.TYPE_CODE_BITSTRING: Types In Python. (line 193)
+* gdb.TYPE_CODE_BOOL: Types In Python. (line 214)
+* gdb.TYPE_CODE_CHAR: Types In Python. (line 211)
+* gdb.TYPE_CODE_COMPLEX: Types In Python. (line 217)
+* gdb.TYPE_CODE_DECFLOAT: Types In Python. (line 226)
+* gdb.TYPE_CODE_ENUM: Types In Python. (line 164)
+* gdb.TYPE_CODE_ERROR: Types In Python. (line 196)
+* gdb.TYPE_CODE_FLAGS: Types In Python. (line 167)
+* gdb.TYPE_CODE_FLT: Types In Python. (line 176)
+* gdb.TYPE_CODE_FUNC: Types In Python. (line 170)
+* gdb.TYPE_CODE_INT: Types In Python. (line 173)
+* gdb.TYPE_CODE_INTERNAL_FUNCTION: Types In Python. (line 229)
+* gdb.TYPE_CODE_MEMBERPTR: Types In Python. (line 205)
+* gdb.TYPE_CODE_METHOD: Types In Python. (line 199)
+* gdb.TYPE_CODE_METHODPTR: Types In Python. (line 202)
+* gdb.TYPE_CODE_NAMESPACE: Types In Python. (line 223)
+* gdb.TYPE_CODE_PTR: Types In Python. (line 152)
+* gdb.TYPE_CODE_RANGE: Types In Python. (line 185)
+* gdb.TYPE_CODE_REF: Types In Python. (line 208)
+* gdb.TYPE_CODE_SET: Types In Python. (line 182)
+* gdb.TYPE_CODE_STRING: Types In Python. (line 188)
+* gdb.TYPE_CODE_STRUCT: Types In Python. (line 158)
+* gdb.TYPE_CODE_TYPEDEF: Types In Python. (line 220)
+* gdb.TYPE_CODE_UNION: Types In Python. (line 161)
+* gdb.TYPE_CODE_VOID: Types In Python. (line 179)
+* gdb.types: gdb.types. (line 6)
+* gdb.Value: Values From Inferior.
+ (line 6)
+* gdb.WP_ACCESS: Breakpoints In Python.
+ (line 58)
+* gdb.WP_READ: Breakpoints In Python.
+ (line 52)
+* gdb.WP_WRITE: Breakpoints In Python.
+ (line 55)
+* gdb.write: Basic Python. (line 103)
+* gdb.write_memory: Inferiors In Python. (line 50)
+* GDB/MI development: GDB/MI Development and Front Ends.
+ (line 6)
+* GDB/MI General Design: GDB/MI General Design.
+ (line 6)
+* GDB/MI, async records: GDB/MI Async Records.
+ (line 6)
+* GDB/MI, breakpoint commands: GDB/MI Breakpoint Commands.
+ (line 6)
+* GDB/MI, compatibility with CLI: GDB/MI Compatibility with CLI.
+ (line 6)
+* GDB/MI, data manipulation: GDB/MI Data Manipulation.
+ (line 6)
+* GDB/MI, input syntax: GDB/MI Input Syntax. (line 6)
+* GDB/MI, its purpose: GDB/MI. (line 9)
+* GDB/MI, output syntax: GDB/MI Output Syntax.
+ (line 6)
+* GDB/MI, result records: GDB/MI Result Records.
+ (line 6)
+* GDB/MI, simple examples: GDB/MI Simple Examples.
+ (line 6)
+* GDB/MI, stream records: GDB/MI Stream Records.
+ (line 6)
+* gdbarch debugging info: Debugging Output. (line 18)
+* GDBHISTFILE, environment variable: Command History. (line 26)
+* gdbserver: Server. (line 6)
+* gdbserver, multiple processes: Server. (line 91)
+* gdbserver, search path for libthread_db: Server. (line 188)
+* GDT: DJGPP Native. (line 24)
+* generate-core-file: Core File Generation.
+ (line 18)
+* get thread information block address: General Query Packets.
+ (line 143)
+* get thread-local storage address, remote request: General Query Packets.
+ (line 112)
+* get_set_string on parameter: Parameters In Python.
+ (line 74)
+* get_show_string on parameter: Parameters In Python.
+ (line 80)
+* getDebugChar: Bootstrapping. (line 14)
+* gettimeofday, file-i/o system call: gettimeofday. (line 6)
+* global debugging information directory: Separate Debug Files.
+ (line 6)
+* GNU C++: C. (line 10)
+* GNU Emacs: Emacs. (line 6)
+* GNU Hurd debugging: Hurd Native. (line 6)
+* GNU/Hurd debug messages: Debugging Output. (line 83)
+* GNU/Linux LWP async debug messages: Debugging Output. (line 111)
+* GNU/Linux LWP debug messages: Debugging Output. (line 104)
+* gnu_debuglink_crc32: Separate Debug Files.
+ (line 164)
+* h (help): Help. (line 9)
+* H packet: Packets. (line 191)
+* handle: Signals. (line 45)
+* handle_exception: Stub Contents. (line 15)
+* handling signals: Signals. (line 27)
+* hardware breakpoints: Set Breaks. (line 62)
+* hardware debug registers: Maintenance Commands.
+ (line 307)
+* hardware watchpoints: Set Watchpoints. (line 31)
+* hash mark while downloading: Target Commands. (line 99)
+* hbreak: Set Breaks. (line 62)
+* help: Help. (line 6)
+* help function: Convenience Vars. (line 112)
+* help target: Target Commands. (line 19)
+* help user-defined: Define. (line 66)
+* heuristic-fence-post (Alpha, MIPS): MIPS. (line 14)
+* history: Basic Python. (line 47)
+* history events: Event Designators. (line 7)
+* history expansion: History Interaction. (line 6)
+* history expansion, turn on/off: Command History. (line 53)
+* history file: Command History. (line 26)
+* history number: Value History. (line 13)
+* history of values printed by GDB: Value History. (line 6)
+* history size: Command History. (line 45)
+* history substitution: Command History. (line 26)
+* history-preserve-point: Readline Init File Syntax.
+ (line 93)
+* history-search-backward (): Commands For History.
+ (line 50)
+* history-search-forward (): Commands For History.
+ (line 45)
+* HISTSIZE, environment variable: Command History. (line 45)
+* hit_count: Breakpoints In Python.
+ (line 135)
+* hook: Hooks. (line 6)
+* hookpost: Hooks. (line 11)
+* hooks, for commands: Hooks. (line 6)
+* hooks, post-command: Hooks. (line 11)
+* hooks, pre-command: Hooks. (line 6)
+* horizontal-scroll-mode: Readline Init File Syntax.
+ (line 98)
+* host character set: Character Sets. (line 6)
+* Host I/O, remote protocol: Host I/O Packets. (line 6)
+* how many arguments (user-defined commands): Define. (line 25)
+* HPPA support: HPPA. (line 6)
+* htrace: OpenRISC 1000. (line 69)
+* hwatch: OpenRISC 1000. (line 59)
+* i (info): Help. (line 99)
+* i packet: Packets. (line 205)
+* I packet: Packets. (line 210)
+* i/o: Input/Output. (line 6)
+* I/O registers (Atmel AVR): AVR. (line 10)
+* i386: Remote Stub. (line 57)
+* i386-stub.c: Remote Stub. (line 57)
+* IDT: DJGPP Native. (line 24)
+* if: Command Files. (line 75)
+* ignore: Conditions. (line 77)
+* ignore count (of breakpoint): Conditions. (line 66)
+* ignore_count: Breakpoints In Python.
+ (line 98)
+* INCLUDE_RDB: VxWorks. (line 33)
+* incomplete type: Symbols. (line 107)
+* indentation in structure display: Print Settings. (line 198)
+* index files: Index Files. (line 6)
+* inferior: Inferiors and Programs.
+ (line 13)
+* inferior debugging info: Debugging Output. (line 89)
+* inferior events in Python: Events In Python. (line 6)
+* inferior functions, calling: Calling. (line 6)
+* inferior INFNO: Inferiors and Programs.
+ (line 49)
+* inferior tty: Input/Output. (line 44)
+* inferior_thread: Events In Python. (line 57)
+* inferiors: Inferiors In Python. (line 15)
+* inferiors in Python: Inferiors In Python. (line 6)
+* infinite recursion in user-defined commands: Define. (line 76)
+* info: Help. (line 99)
+* info address: Symbols. (line 44)
+* info all-registers: Registers. (line 15)
+* info args: Frame Info. (line 51)
+* info auto-load-scripts: Auto-loading. (line 29)
+* info auxv: OS Information. (line 33)
+* info breakpoints: Set Breaks. (line 128)
+* info catch: Frame Info. (line 60)
+* info checkpoints: Checkpoint/Restart. (line 31)
+* info classes: Symbols. (line 205)
+* info common: Special Fortran Commands.
+ (line 9)
+* info copying: Help. (line 136)
+* info dcache: Caching Remote Data. (line 34)
+* info display: Auto Display. (line 78)
+* info dll: Cygwin Native. (line 35)
+* info dos: DJGPP Native. (line 15)
+* info extensions: Show. (line 34)
+* info f (info frame): Frame Info. (line 17)
+* info files: Files. (line 191)
+* info float: Floating Point Hardware.
+ (line 9)
+* info for known .debug_gdb_scripts-loaded scripts: Maintenance Commands.
+ (line 216)
+* info for known object files: Maintenance Commands.
+ (line 211)
+* info frame: Frame Info. (line 17)
+* info frame, show the source language: Show. (line 15)
+* info functions: Symbols. (line 184)
+* info handle: Signals. (line 33)
+* info inferiors: Inferiors and Programs.
+ (line 25)
+* info io_registers, AVR: AVR. (line 10)
+* info line: Machine Code. (line 14)
+* info line, and Objective-C: Method Names in Commands.
+ (line 9)
+* info locals: Frame Info. (line 55)
+* info macro: Macros. (line 47)
+* info mem: Memory Region Attributes.
+ (line 45)
+* info meminfo: SVR4 Process Information.
+ (line 78)
+* info or1k spr: OpenRISC 1000. (line 20)
+* info os: OS Information. (line 47)
+* info os processes: OS Information. (line 52)
+* info pidlist: SVR4 Process Information.
+ (line 74)
+* info pretty-printer: Pretty-Printer Commands.
+ (line 6)
+* info proc: SVR4 Process Information.
+ (line 16)
+* info program: Stopping. (line 18)
+* info record: Process Record and Replay.
+ (line 137)
+* info registers: Registers. (line 11)
+* info scope: Symbols. (line 138)
+* info selectors: Symbols. (line 211)
+* info serial: DJGPP Native. (line 142)
+* info set: Help. (line 119)
+* info share: Files. (line 326)
+* info sharedlibrary: Files. (line 326)
+* info signals: Signals. (line 33)
+* info source: Symbols. (line 159)
+* info source, show the source language: Show. (line 21)
+* info sources: Symbols. (line 178)
+* info spu: SPU. (line 10)
+* info stack: Backtrace. (line 34)
+* info static-tracepoint-markers: Listing Static Tracepoint Markers.
+ (line 6)
+* info symbol: Symbols. (line 54)
+* info target: Files. (line 191)
+* info task TASKNO: Ada Tasks. (line 89)
+* info tasks: Ada Tasks. (line 9)
+* info terminal: Input/Output. (line 12)
+* info threads: Threads. (line 66)
+* info tp [N...]: Listing Tracepoints. (line 6)
+* info tracepoints [N...]: Listing Tracepoints. (line 6)
+* info tvariables: Trace State Variables.
+ (line 37)
+* info types: Symbols. (line 124)
+* info udot: OS Information. (line 16)
+* info variables: Symbols. (line 196)
+* info vector: Vector Unit. (line 9)
+* info w32: Cygwin Native. (line 19)
+* info warranty: Help. (line 140)
+* info watchpoints [N...]: Set Watchpoints. (line 72)
+* info win: TUI Commands. (line 18)
+* information about static tracepoint markers: Listing Static Tracepoint Markers.
+ (line 6)
+* information about tracepoints: Listing Tracepoints. (line 6)
+* inheritance: Debugging C Plus Plus.
+ (line 25)
+* init file: Startup. (line 11)
+* init file name: Startup. (line 60)
+* init-if-undefined: Convenience Vars. (line 41)
+* initial frame: Frames. (line 12)
+* initialization file, readline: Readline Init File. (line 6)
+* inline functions, debugging: Inline Functions. (line 6)
+* innermost frame: Frames. (line 12)
+* input syntax for GDB/MI: GDB/MI Input Syntax. (line 6)
+* input-meta: Readline Init File Syntax.
+ (line 105)
+* insert-comment (M-#): Miscellaneous Commands.
+ (line 51)
+* insert-completions (M-*): Commands For Completion.
+ (line 14)
+* inspect: Data. (line 6)
+* installation: Installing GDB. (line 6)
+* instructions, assembly: Machine Code. (line 36)
+* integral datatypes, in file-i/o protocol: Integral Datatypes.
+ (line 6)
+* Intel: Remote Stub. (line 57)
+* Intel disassembly flavor: Machine Code. (line 127)
+* interaction, readline: Readline Interaction.
+ (line 6)
+* internal commands: Maintenance Commands.
+ (line 6)
+* internal errors, control of GDB behavior: Maintenance Commands.
+ (line 124)
+* internal GDB breakpoints: Set Breaks. (line 333)
+* interpreter-exec: Interpreters. (line 43)
+* interrupt <1>: Quitting GDB. (line 13)
+* interrupt: Background Execution.
+ (line 73)
+* interrupt debuggee on MS-Windows: Cygwin Native. (line 9)
+* interrupt remote programs: Remote Configuration.
+ (line 85)
+* interrupting remote programs: Connecting. (line 78)
+* interrupting remote targets: Bootstrapping. (line 25)
+* interrupts (remote protocol): Interrupts. (line 6)
+* invalid input: Bug Criteria. (line 16)
+* invoke another interpreter: Interpreters. (line 37)
+* invoke on Command: Commands In Python. (line 50)
+* invoke on Function: Functions In Python. (line 21)
+* is_argument: Symbols In Python. (line 77)
+* is_constant: Symbols In Python. (line 80)
+* is_exited on InferiorThread: Threads In Python. (line 61)
+* is_function: Symbols In Python. (line 83)
+* is_optimized_out: Values From Inferior.
+ (line 50)
+* is_running on InferiorThread: Threads In Python. (line 58)
+* is_stopped on InferiorThread: Threads In Python. (line 55)
+* is_valid on Block: Blocks In Python. (line 24)
+* is_valid on Breakpoint: Breakpoints In Python.
+ (line 62)
+* is_valid on Frame: Frames In Python. (line 37)
+* is_valid on Inferior: Inferiors In Python. (line 33)
+* is_valid on InferiorThread: Threads In Python. (line 43)
+* is_valid on Objfile: Objfiles In Python. (line 42)
+* is_valid on Symbol: Symbols In Python. (line 91)
+* is_valid on Symtab: Symbol Tables In Python.
+ (line 51)
+* is_valid on Symtab_and_line: Symbol Tables In Python.
+ (line 31)
+* is_variable: Symbols In Python. (line 86)
+* isatty, file-i/o system call: isatty. (line 6)
+* isearch-terminators: Readline Init File Syntax.
+ (line 112)
+* JIT compilation interface: JIT Interface. (line 6)
+* jump: Jumping. (line 10)
+* jump, and Objective-C: Method Names in Commands.
+ (line 9)
+* just-in-time compilation: JIT Interface. (line 6)
+* just-in-time compilation, debugging messages: Debugging Output.
+ (line 98)
+* k packet: Packets. (line 214)
+* kernel crash dump: BSD libkvm Interface.
+ (line 6)
+* kernel memory image: BSD libkvm Interface.
+ (line 6)
+* KeyboardInterrupt: Exception Handling. (line 34)
+* keymap: Readline Init File Syntax.
+ (line 119)
+* kill: Kill Process. (line 6)
+* kill inferiors INFNO...: Inferiors and Programs.
+ (line 103)
+* kill ring: Readline Killing Commands.
+ (line 19)
+* kill-line (C-k): Commands For Killing.
+ (line 6)
+* kill-region (): Commands For Killing.
+ (line 41)
+* kill-whole-line (): Commands For Killing.
+ (line 15)
+* kill-word (M-d): Commands For Killing.
+ (line 19)
+* killing text: Readline Killing Commands.
+ (line 6)
+* kvm: BSD libkvm Interface.
+ (line 24)
+* l (list): List. (line 6)
+* languages: Languages. (line 6)
+* last tracepoint number: Create and Delete Tracepoints.
+ (line 98)
+* latest breakpoint: Set Breaks. (line 6)
+* layout: TUI Commands. (line 21)
+* lazy strings in python: Lazy Strings In Python.
+ (line 6)
+* lazy_string on Value: Values From Inferior.
+ (line 172)
+* LDT: DJGPP Native. (line 24)
+* leaving GDB: Quitting GDB. (line 6)
+* Left: TUI Keys. (line 59)
+* length: Lazy Strings In Python.
+ (line 31)
+* libkvm: BSD libkvm Interface.
+ (line 6)
+* library list format, remote protocol: Library List Format. (line 6)
+* limit hardware breakpoints and watchpoints: Remote Configuration.
+ (line 72)
+* limit on number of printed array elements: Print Settings. (line 123)
+* limits, in file-i/o protocol: Limits. (line 6)
+* line: Symbol Tables In Python.
+ (line 25)
+* linespec: Specify Location. (line 6)
+* linkage_name: Symbols In Python. (line 62)
+* Linux lightweight processes: Debugging Output. (line 111)
+* list: List. (line 6)
+* list active threads, remote request: General Query Packets.
+ (line 84)
+* list of supported file-i/o calls: List of Supported Calls.
+ (line 6)
+* list output in GDB/MI: GDB/MI Output Syntax.
+ (line 117)
+* list, and Objective-C: Method Names in Commands.
+ (line 9)
+* list, how many lines to display: List. (line 30)
+* listing GDB's internal symbol tables: Symbols. (line 291)
+* listing machine instructions: Machine Code. (line 36)
+* listing mapped overlays: Overlay Commands. (line 60)
+* load address, overlay's: How Overlays Work. (line 6)
+* load FILENAME: Target Commands. (line 115)
+* load shared library: Files. (line 323)
+* load symbols from memory: Files. (line 162)
+* local variables: Symbols. (line 138)
+* locate address: Output Formats. (line 35)
+* location: Breakpoints In Python.
+ (line 140)
+* lock scheduler: All-Stop Mode. (line 37)
+* log output in GDB/MI: GDB/MI Output Syntax.
+ (line 113)
+* logging file name: Logging Output. (line 13)
+* logging GDB output: Logging Output. (line 6)
+* lookup_global_symbol: Symbols In Python. (line 34)
+* lookup_symbol: Symbols In Python. (line 14)
+* lookup_type: Types In Python. (line 12)
+* loop_break: Command Files. (line 94)
+* loop_continue: Command Files. (line 98)
+* lseek flags, in file-i/o protocol: Lseek Flags. (line 6)
+* lseek, file-i/o system call: lseek. (line 6)
+* M packet: Packets. (line 241)
+* m packet: Packets. (line 221)
+* M32-EVA target board address: M32R/D. (line 21)
+* M32R/Chaos debugging: M32R/D. (line 50)
+* m680x0: Remote Stub. (line 60)
+* m68k-stub.c: Remote Stub. (line 60)
+* machine instructions: Machine Code. (line 36)
+* macro define: Macros. (line 52)
+* macro definition, showing: Macros. (line 47)
+* macro exp1: Macros. (line 36)
+* macro expand: Macros. (line 29)
+* macro expansion, showing the results of preprocessor: Macros.
+ (line 29)
+* macro list: Macros. (line 73)
+* macro undef: Macros. (line 67)
+* macros, example of debugging with: Macros. (line 76)
+* macros, user-defined: Macros. (line 52)
+* mailing lists: GDB/MI Development and Front Ends.
+ (line 35)
+* maint agent: Maintenance Commands.
+ (line 12)
+* maint agent-eval: Maintenance Commands.
+ (line 12)
+* maint check-symtabs: Maintenance Commands.
+ (line 78)
+* maint cplus first_component: Maintenance Commands.
+ (line 81)
+* maint cplus namespace: Maintenance Commands.
+ (line 84)
+* maint demangle: Maintenance Commands.
+ (line 87)
+* maint deprecate: Maintenance Commands.
+ (line 90)
+* maint dump-me: Maintenance Commands.
+ (line 98)
+* maint info breakpoints: Maintenance Commands.
+ (line 25)
+* maint info program-spaces: Inferiors and Programs.
+ (line 138)
+* maint info psymtabs: Symbols. (line 291)
+* maint info sections: Files. (line 200)
+* maint info sol-threads: Threads. (line 98)
+* maint info symtabs: Symbols. (line 291)
+* maint internal-error: Maintenance Commands.
+ (line 103)
+* maint internal-warning: Maintenance Commands.
+ (line 103)
+* maint packet: Maintenance Commands.
+ (line 143)
+* maint print architecture: Maintenance Commands.
+ (line 149)
+* maint print c-tdesc: Maintenance Commands.
+ (line 153)
+* maint print cooked-registers: Maintenance Commands.
+ (line 176)
+* maint print dummy-frames: Maintenance Commands.
+ (line 158)
+* maint print objfiles: Maintenance Commands.
+ (line 211)
+* maint print psymbols: Symbols. (line 272)
+* maint print raw-registers: Maintenance Commands.
+ (line 176)
+* maint print reggroups: Maintenance Commands.
+ (line 192)
+* maint print register-groups: Maintenance Commands.
+ (line 176)
+* maint print registers: Maintenance Commands.
+ (line 176)
+* maint print section-scripts: Maintenance Commands.
+ (line 216)
+* maint print statistics: Maintenance Commands.
+ (line 223)
+* maint print symbols: Symbols. (line 272)
+* maint print target-stack: Maintenance Commands.
+ (line 236)
+* maint print type: Maintenance Commands.
+ (line 248)
+* maint print unwind, HPPA: HPPA. (line 17)
+* maint set dwarf2 always-disassemble: Maintenance Commands.
+ (line 255)
+* maint set dwarf2 max-cache-age: Maintenance Commands.
+ (line 277)
+* maint set internal-error: Maintenance Commands.
+ (line 124)
+* maint set internal-warning: Maintenance Commands.
+ (line 124)
+* maint set profile: Maintenance Commands.
+ (line 291)
+* maint set python print-stack: Python Commands. (line 31)
+* maint set show-all-tib: Maintenance Commands.
+ (line 315)
+* maint set show-debug-regs: Maintenance Commands.
+ (line 307)
+* maint show dwarf2 always-disassemble: Maintenance Commands.
+ (line 255)
+* maint show dwarf2 max-cache-age: Maintenance Commands.
+ (line 277)
+* maint show internal-error: Maintenance Commands.
+ (line 124)
+* maint show internal-warning: Maintenance Commands.
+ (line 124)
+* maint show profile: Maintenance Commands.
+ (line 291)
+* maint show show-all-tib: Maintenance Commands.
+ (line 315)
+* maint show show-debug-regs: Maintenance Commands.
+ (line 307)
+* maint space: Maintenance Commands.
+ (line 321)
+* maint time: Maintenance Commands.
+ (line 328)
+* maint translate-address: Maintenance Commands.
+ (line 339)
+* maint undeprecate: Maintenance Commands.
+ (line 90)
+* maintenance commands: Maintenance Commands.
+ (line 6)
+* make: Shell Commands. (line 19)
+* manual overlay debugging: Overlay Commands. (line 23)
+* map an overlay: Overlay Commands. (line 30)
+* mapinfo list, QNX Neutrino: SVR4 Process Information.
+ (line 78)
+* mapped address: How Overlays Work. (line 6)
+* mapped overlays: How Overlays Work. (line 6)
+* mark-modified-lines: Readline Init File Syntax.
+ (line 132)
+* mark-symlinked-directories: Readline Init File Syntax.
+ (line 137)
+* markers, static tracepoints: Set Tracepoints. (line 28)
+* match-hidden-files: Readline Init File Syntax.
+ (line 142)
+* maximum value for offset of closest symbol: Print Settings. (line 70)
+* may-insert-breakpoints: Observer Mode. (line 50)
+* may-insert-fast-tracepoints: Observer Mode. (line 69)
+* may-insert-tracepoints: Observer Mode. (line 59)
+* may-interrupt: Observer Mode. (line 79)
+* may-write-memory: Observer Mode. (line 41)
+* may-write-registers: Observer Mode. (line 32)
+* mem: Memory Region Attributes.
+ (line 22)
+* member functions: C Plus Plus Expressions.
+ (line 18)
+* memory address space mappings: SVR4 Process Information.
+ (line 32)
+* memory map format: Memory Map Format. (line 6)
+* memory region attributes: Memory Region Attributes.
+ (line 6)
+* memory tracing: Breakpoints. (line 20)
+* memory transfer, in file-i/o protocol: Memory Transfer. (line 6)
+* memory used by commands: Maintenance Commands.
+ (line 321)
+* memory used for symbol tables: Files. (line 311)
+* memory, alignment and size of remote accesses: Packets. (line 228)
+* memory, viewing as typed object: Expressions. (line 43)
+* memset: Bootstrapping. (line 70)
+* menu-complete (): Commands For Completion.
+ (line 18)
+* meta-flag: Readline Init File Syntax.
+ (line 105)
+* mi interpreter: Interpreters. (line 26)
+* mi1 interpreter: Interpreters. (line 34)
+* mi2 interpreter: Interpreters. (line 31)
+* minimal language: Unsupported Languages.
+ (line 6)
+* Minimal symbols and DLLs: Non-debug DLL Symbols.
+ (line 6)
+* MIPS addresses, masking: MIPS. (line 61)
+* MIPS boards: MIPS Embedded. (line 6)
+* MIPS remote floating point: MIPS Embedded. (line 60)
+* MIPS stack: MIPS. (line 6)
+* miscellaneous settings: Other Misc Settings. (line 6)
+* MMX registers (x86): Registers. (line 71)
+* mode_t values, in file-i/o protocol: mode_t Values. (line 6)
+* Modula-2: Summary. (line 29)
+* Modula-2 built-ins: Built-In Func/Proc. (line 6)
+* Modula-2 checks: M2 Checks. (line 6)
+* Modula-2 constants: Built-In Func/Proc. (line 112)
+* Modula-2 defaults: M2 Defaults. (line 6)
+* Modula-2 operators: M2 Operators. (line 6)
+* Modula-2 types: M2 Types. (line 6)
+* Modula-2, deviations from: Deviations. (line 6)
+* Modula-2, GDB support: Modula-2. (line 6)
+* monitor: Connecting. (line 105)
+* monitor commands, for gdbserver: Server. (line 171)
+* Motorola 680x0: Remote Stub. (line 60)
+* MS Windows debugging: Cygwin Native. (line 6)
+* MS-DOS system info: DJGPP Native. (line 19)
+* MS-DOS-specific commands: DJGPP Native. (line 6)
+* multiple locations, breakpoints: Set Breaks. (line 190)
+* multiple processes: Forks. (line 6)
+* multiple processes with gdbserver: Server. (line 91)
+* multiple targets: Active Targets. (line 6)
+* multiple threads: Threads. (line 6)
+* multiple threads, backtrace: Backtrace. (line 37)
+* multiple-symbols menu: Ambiguous Expressions.
+ (line 51)
+* multiprocess extensions, in remote protocol: General Query Packets.
+ (line 527)
+* n (next): Continuing and Stepping.
+ (line 78)
+* n (SingleKey TUI key): TUI Single Key Mode. (line 19)
+* name <1>: Threads In Python. (line 20)
+* name: Symbols In Python. (line 58)
+* name a thread: Threads. (line 131)
+* name on Frame: Frames In Python. (line 44)
+* names of symbols: Symbols. (line 14)
+* namespace in C++: C Plus Plus Expressions.
+ (line 22)
+* native Cygwin debugging: Cygwin Native. (line 6)
+* native DJGPP debugging: DJGPP Native. (line 6)
+* negative breakpoint numbers: Set Breaks. (line 333)
+* NetROM ROM emulator target: Target Commands. (line 88)
+* New SYSTAG message: Threads. (line 51)
+* newer on Frame: Frames In Python. (line 93)
+* newest_frame: Frames In Python. (line 27)
+* next: Continuing and Stepping.
+ (line 78)
+* next&: Background Execution.
+ (line 47)
+* next-history (C-n): Commands For History.
+ (line 16)
+* nexti: Continuing and Stepping.
+ (line 203)
+* nexti&: Background Execution.
+ (line 50)
+* ni (nexti): Continuing and Stepping.
+ (line 203)
+* non-incremental-forward-search-history (M-n): Commands For History.
+ (line 40)
+* non-incremental-reverse-search-history (M-p): Commands For History.
+ (line 35)
+* non-member C++ functions, set breakpoint in: Set Breaks. (line 108)
+* non-stop mode: Non-Stop Mode. (line 6)
+* non-stop mode, and breakpoint always-inserted: Set Breaks. (line 326)
+* non-stop mode, and process record and replay: Process Record and Replay.
+ (line 52)
+* non-stop mode, and set displaced-stepping: Maintenance Commands.
+ (line 73)
+* non-stop mode, remote request: General Query Packets.
+ (line 220)
+* noninvasive task options: Hurd Native. (line 73)
+* nosharedlibrary: Files. (line 341)
+* notation, readline: Readline Bare Essentials.
+ (line 6)
+* notational conventions, for GDB/MI: GDB/MI. (line 25)
+* notification packets: Notification Packets.
+ (line 6)
+* notify output in GDB/MI: GDB/MI Output Syntax.
+ (line 102)
+* NULL elements in arrays: Print Settings. (line 189)
+* num <1>: Threads In Python. (line 30)
+* num: Inferiors In Python. (line 20)
+* number: Breakpoints In Python.
+ (line 102)
+* number of array elements to print: Print Settings. (line 123)
+* number representation: Numbers. (line 6)
+* numbers for breakpoints: Breakpoints. (line 41)
+* object files, relocatable, reading symbols from: Files. (line 132)
+* Objective-C: Objective-C. (line 6)
+* Objective-C, classes and selectors: Symbols. (line 205)
+* Objective-C, print objects: The Print Command with Objective-C.
+ (line 6)
+* objfile: Symbol Tables In Python.
+ (line 45)
+* Objfile: Objfiles In Python. (line 6)
+* OBJFILE-gdb.py: objfile-gdb.py file. (line 6)
+* objfiles: Objfiles In Python. (line 22)
+* objfiles in python: Objfiles In Python. (line 6)
+* observer: Observer Mode. (line 22)
+* observer debugging info: Debugging Output. (line 118)
+* octal escapes in strings: Print Settings. (line 222)
+* older on Frame: Frames In Python. (line 90)
+* online documentation: Help. (line 6)
+* opaque data types: Symbols. (line 241)
+* open flags, in file-i/o protocol: Open Flags. (line 6)
+* open, file-i/o system call: open. (line 6)
+* OpenCL C: OpenCL C. (line 6)
+* OpenCL C Datatypes: OpenCL C Datatypes. (line 6)
+* OpenCL C Expressions: OpenCL C Expressions.
+ (line 6)
+* OpenCL C Operators: OpenCL C Operators. (line 6)
+* OpenRISC 1000: OpenRISC 1000. (line 6)
+* OpenRISC 1000 htrace: OpenRISC 1000. (line 58)
+* operating system information: Operating System Information.
+ (line 6)
+* operating system information, process list: Process list. (line 6)
+* optimized code, debugging: Optimized Code. (line 6)
+* optimized code, wrong values of variables: Variables. (line 58)
+* optimized out value in Python: Values From Inferior.
+ (line 49)
+* optimized out, in backtrace: Backtrace. (line 71)
+* optional debugging messages: Debugging Output. (line 6)
+* optional warnings: Messages/Warnings. (line 6)
+* or1k boards: OpenRISC 1000. (line 6)
+* or1ksim: OpenRISC 1000. (line 16)
+* OS ABI: ABI. (line 11)
+* OS information: OS Information. (line 6)
+* out-of-line single-stepping: Maintenance Commands.
+ (line 56)
+* outermost frame: Frames. (line 12)
+* output: Output. (line 35)
+* output formats: Output Formats. (line 6)
+* output syntax of GDB/MI: GDB/MI Output Syntax.
+ (line 6)
+* output-meta: Readline Init File Syntax.
+ (line 149)
+* overlay: Overlay Commands. (line 17)
+* overlay area: How Overlays Work. (line 6)
+* overlay example program: Overlay Sample Program.
+ (line 6)
+* overlays: Overlays. (line 6)
+* overlays, setting breakpoints in: Overlay Commands. (line 93)
+* overload-choice annotation: Prompting. (line 32)
+* overloaded functions, calling: C Plus Plus Expressions.
+ (line 27)
+* overloaded functions, overload resolution: Debugging C Plus Plus.
+ (line 48)
+* overloading in C++: Debugging C Plus Plus.
+ (line 15)
+* overwrite-mode (): Commands For Text. (line 53)
+* p packet: Packets. (line 254)
+* P packet: Packets. (line 269)
+* packet acknowledgment, for GDB remote: Packet Acknowledgment.
+ (line 6)
+* packet size, remote protocol: General Query Packets.
+ (line 458)
+* packets, notification: Notification Packets.
+ (line 6)
+* packets, reporting on stdout: Debugging Output. (line 140)
+* packets, tracepoint: Tracepoint Packets. (line 6)
+* page tables display (MS-DOS): DJGPP Native. (line 56)
+* page-completions: Readline Init File Syntax.
+ (line 154)
+* PARAM_AUTO_BOOLEAN: Parameters In Python.
+ (line 93)
+* PARAM_BOOLEAN: Parameters In Python.
+ (line 89)
+* PARAM_ENUM: Parameters In Python.
+ (line 127)
+* PARAM_FILENAME: Parameters In Python.
+ (line 119)
+* PARAM_INTEGER: Parameters In Python.
+ (line 102)
+* PARAM_OPTIONAL_FILENAME: Parameters In Python.
+ (line 116)
+* PARAM_STRING: Parameters In Python.
+ (line 106)
+* PARAM_STRING_NOESCAPE: Parameters In Python.
+ (line 112)
+* PARAM_UINTEGER: Parameters In Python.
+ (line 98)
+* PARAM_ZINTEGER: Parameters In Python.
+ (line 123)
+* Parameter: Parameters In Python.
+ (line 6)
+* parameter: Basic Python. (line 36)
+* parameters in python: Parameters In Python.
+ (line 6)
+* parse_and_eval: Basic Python. (line 59)
+* partial symbol dump: Symbols. (line 272)
+* partial symbol tables, listing GDB's internal: Symbols. (line 291)
+* Pascal: Summary. (line 35)
+* Pascal objects, static members display: Print Settings. (line 353)
+* Pascal support in GDB, limitations: Pascal. (line 6)
+* pass signals to inferior, remote request: General Query Packets.
+ (line 240)
+* passcount: Tracepoint Passcounts.
+ (line 6)
+* patching binaries: Patching. (line 6)
+* patching object files: Files. (line 26)
+* path: Environment. (line 14)
+* pause current task (GNU Hurd): Hurd Native. (line 49)
+* pause current thread (GNU Hurd): Hurd Native. (line 91)
+* pauses in output: Screen Size. (line 6)
+* pc: Symbol Tables In Python.
+ (line 21)
+* pc on Frame: Frames In Python. (line 80)
+* pending breakpoints: Set Breaks. (line 232)
+* PgDn: TUI Keys. (line 50)
+* PgUp: TUI Keys. (line 47)
+* physical address from linear address: DJGPP Native. (line 81)
+* physname: Debugging Output. (line 35)
+* pid: Inferiors In Python. (line 23)
+* pipe, target remote to: Connecting. (line 60)
+* pipes: Starting. (line 62)
+* pmon, MIPS remote: MIPS Embedded. (line 132)
+* po (print-object): The Print Command with Objective-C.
+ (line 6)
+* pointer on Type: Types In Python. (line 114)
+* pointer values, in file-i/o protocol: Pointer Values. (line 6)
+* pointer, finding referent: Print Settings. (line 79)
+* port rights, GNU Hurd: Hurd Native. (line 85)
+* port sets, GNU Hurd: Hurd Native. (line 85)
+* possible-completions (M-?): Commands For Completion.
+ (line 11)
+* post-commands annotation: Prompting. (line 27)
+* post-overload-choice annotation: Prompting. (line 32)
+* post-prompt annotation: Prompting. (line 24)
+* post-prompt-for-continue annotation: Prompting. (line 40)
+* post-query annotation: Prompting. (line 36)
+* post_event: Basic Python. (line 70)
+* PowerPC architecture: PowerPC. (line 6)
+* pre-commands annotation: Prompting. (line 27)
+* pre-overload-choice annotation: Prompting. (line 32)
+* pre-prompt annotation: Prompting. (line 24)
+* pre-prompt-for-continue annotation: Prompting. (line 40)
+* pre-query annotation: Prompting. (line 36)
+* prefix for data files: Data Files. (line 6)
+* prefix for shared library file names: Files. (line 374)
+* prefix-meta (<ESC>): Miscellaneous Commands.
+ (line 18)
+* premature return from system calls: Interrupted System Calls.
+ (line 6)
+* preprocessor macro expansion, showing the results of: Macros.
+ (line 29)
+* pretty print arrays: Print Settings. (line 98)
+* pretty print C++ virtual function tables: Print Settings. (line 364)
+* pretty-printer commands: Pretty-Printer Commands.
+ (line 6)
+* pretty_printers <1>: Objfiles In Python. (line 32)
+* pretty_printers: Progspaces In Python.
+ (line 28)
+* previous-history (C-p): Commands For History.
+ (line 12)
+* print: Data. (line 6)
+* print all frame argument values: Print Settings. (line 135)
+* print an Objective-C object description: The Print Command with Objective-C.
+ (line 11)
+* print array indexes: Print Settings. (line 108)
+* print frame argument values for scalars only: Print Settings.
+ (line 135)
+* print list of auto-loaded scripts: Auto-loading. (line 29)
+* print messages on inferior start and exit: Inferiors and Programs.
+ (line 117)
+* print messages on thread start and exit: Threads. (line 156)
+* print messages when symbols are loaded: Symbols. (line 259)
+* print settings: Print Settings. (line 6)
+* print structures in indented form: Print Settings. (line 198)
+* print-object: The Print Command with Objective-C.
+ (line 6)
+* print/don't print memory addresses: Print Settings. (line 13)
+* print_name: Symbols In Python. (line 66)
+* printf: Output. (line 46)
+* printing byte arrays: Output Formats. (line 60)
+* printing data: Data. (line 6)
+* printing frame argument values: Print Settings. (line 135)
+* printing strings: Output Formats. (line 60)
+* probe static tracepoint marker: Create and Delete Tracepoints.
+ (line 51)
+* probing markers, static tracepoints: Set Tracepoints. (line 28)
+* proc-trace-entry: SVR4 Process Information.
+ (line 70)
+* proc-trace-exit: SVR4 Process Information.
+ (line 70)
+* proc-untrace-entry: SVR4 Process Information.
+ (line 70)
+* proc-untrace-exit: SVR4 Process Information.
+ (line 70)
+* process detailed status information: SVR4 Process Information.
+ (line 40)
+* process ID: SVR4 Process Information.
+ (line 16)
+* process info via /proc: SVR4 Process Information.
+ (line 6)
+* process list, QNX Neutrino: SVR4 Process Information.
+ (line 74)
+* process record and replay: Process Record and Replay.
+ (line 6)
+* process status register: Registers. (line 26)
+* processes, multiple: Forks. (line 6)
+* procfs API calls: SVR4 Process Information.
+ (line 53)
+* profiling GDB: Maintenance Commands.
+ (line 291)
+* program counter register: Registers. (line 26)
+* program entry point: Backtrace. (line 93)
+* programming in python: Python API. (line 6)
+* Progspace: Progspaces In Python.
+ (line 6)
+* progspaces: Progspaces In Python.
+ (line 19)
+* progspaces in python: Progspaces In Python.
+ (line 6)
+* prompt: Prompt. (line 6)
+* prompt annotation: Prompting. (line 24)
+* prompt-for-continue annotation: Prompting. (line 40)
+* protocol basics, file-i/o: Protocol Basics. (line 6)
+* protocol, GDB remote serial: Overview. (line 14)
+* protocol-specific representation of datatypes, in file-i/o protocol: Protocol-specific Representation of Datatypes.
+ (line 6)
+* ptid: Threads In Python. (line 33)
+* ptrace system call: OS Information. (line 9)
+* ptype: Symbols. (line 85)
+* putDebugChar: Bootstrapping. (line 20)
+* pwd: Working Directory. (line 19)
+* python: Python Commands. (line 9)
+* python api: Python API. (line 6)
+* python commands <1>: Commands In Python. (line 6)
+* python commands: Python Commands. (line 6)
+* python convenience functions: Functions In Python. (line 6)
+* python directory: Python. (line 10)
+* python exceptions: Exception Handling. (line 6)
+* python functions: Basic Python. (line 6)
+* python module: Basic Python. (line 6)
+* python modules: Python modules. (line 6)
+* python pagination: Python API. (line 6)
+* python parameters: Parameters In Python.
+ (line 6)
+* python scripting: Python. (line 6)
+* python stdout: Python API. (line 6)
+* Python, working with types: Types In Python. (line 6)
+* python, working with values from inferior: Values From Inferior.
+ (line 6)
+* PYTHONDIR: Basic Python. (line 12)
+* q (quit): Quitting GDB. (line 6)
+* q (SingleKey TUI key): TUI Single Key Mode. (line 22)
+* q packet: Packets. (line 282)
+* Q packet: Packets. (line 282)
+* QAllow packet: General Query Packets.
+ (line 41)
+* qAttached packet: General Query Packets.
+ (line 835)
+* qC packet: General Query Packets.
+ (line 52)
+* qCRC packet: General Query Packets.
+ (line 63)
+* qfThreadInfo packet: General Query Packets.
+ (line 84)
+* qGetTIBAddr packet: General Query Packets.
+ (line 143)
+* qGetTLSAddr packet: General Query Packets.
+ (line 112)
+* QNonStop packet: General Query Packets.
+ (line 220)
+* QNX Neutrino: Neutrino. (line 6)
+* qOffsets packet: General Query Packets.
+ (line 182)
+* qP packet: General Query Packets.
+ (line 209)
+* QPassSignals packet: General Query Packets.
+ (line 240)
+* qRcmd packet: General Query Packets.
+ (line 268)
+* qSearch:memory packet: General Query Packets.
+ (line 293)
+* QStartNoAckMode packet: General Query Packets.
+ (line 313)
+* qsThreadInfo packet: General Query Packets.
+ (line 84)
+* qSupported packet: General Query Packets.
+ (line 328)
+* qSymbol packet: General Query Packets.
+ (line 567)
+* QTDPsrc packet: Tracepoint Packets. (line 96)
+* QTDV packet: Tracepoint Packets. (line 127)
+* qThreadExtraInfo packet: General Query Packets.
+ (line 612)
+* qTV packet: Tracepoint Packets. (line 276)
+* query annotation: Prompting. (line 36)
+* query attached, remote request: General Query Packets.
+ (line 835)
+* quit [EXPRESSION]: Quitting GDB. (line 6)
+* quit annotation: Errors. (line 6)
+* quoted-insert (C-q or C-v): Commands For Text. (line 20)
+* quotes in commands: Completion. (line 57)
+* quoting Ada internal identifiers: Additions to Ada. (line 76)
+* quoting names: Symbols. (line 14)
+* qXfer packet: General Query Packets.
+ (line 648)
+* r (run): Starting. (line 6)
+* r (SingleKey TUI key): TUI Single Key Mode. (line 25)
+* r packet: Packets. (line 286)
+* R packet: Packets. (line 291)
+* raise exceptions: Set Catchpoints. (line 197)
+* range checking: Type Checking. (line 65)
+* range on Type: Types In Python. (line 104)
+* ranged breakpoint: PowerPC Embedded. (line 30)
+* ranges of breakpoints: Breakpoints. (line 48)
+* Ravenscar Profile: Ravenscar Profile. (line 6)
+* raw printing: Output Formats. (line 70)
+* rbreak: Set Breaks. (line 92)
+* rc (reverse-continue): Reverse Execution. (line 30)
+* RDI heartbeat: ARM. (line 112)
+* rdilogenable: ARM. (line 95)
+* rdilogfile: ARM. (line 89)
+* re-read-init-file (C-x C-r): Miscellaneous Commands.
+ (line 6)
+* read special object, remote request: General Query Packets.
+ (line 648)
+* read, file-i/o system call: read. (line 6)
+* read-only sections: Files. (line 258)
+* read_memory on Inferior: Inferiors In Python. (line 45)
+* read_var on Frame: Frames In Python. (line 100)
+* reading symbols from relocatable object files: Files. (line 132)
+* reading symbols immediately: Files. (line 90)
+* readline: Editing. (line 6)
+* readnow: Files. (line 90)
+* rec: Process Record and Replay.
+ (line 38)
+* rec del: Process Record and Replay.
+ (line 155)
+* rec s: Process Record and Replay.
+ (line 57)
+* receive rights, GNU Hurd: Hurd Native. (line 85)
+* recent tracepoint number: Create and Delete Tracepoints.
+ (line 98)
+* record: Process Record and Replay.
+ (line 38)
+* record aggregates (Ada): Omissions from Ada. (line 44)
+* record delete: Process Record and Replay.
+ (line 155)
+* record mode: Process Record and Replay.
+ (line 19)
+* record restore: Process Record and Replay.
+ (line 85)
+* record save: Process Record and Replay.
+ (line 80)
+* record serial communications on file: Remote Configuration.
+ (line 57)
+* record stop: Process Record and Replay.
+ (line 57)
+* recording a session script: Bug Reporting. (line 104)
+* recording inferior's execution and replaying it: Process Record and Replay.
+ (line 6)
+* redirection: Input/Output. (line 6)
+* redraw-current-line (): Commands For Moving. (line 30)
+* reference card: Formatting Documentation.
+ (line 6)
+* reference declarations: C Plus Plus Expressions.
+ (line 51)
+* reference on Type: Types In Python. (line 110)
+* refresh: TUI Commands. (line 58)
+* register stack, AMD29K: A29K. (line 6)
+* registers: Registers. (line 6)
+* regs, Super-H: Super-H. (line 9)
+* regular expression: Set Breaks. (line 92)
+* reinterpret_cast on Value: Values From Inferior.
+ (line 135)
+* reloading symbols: Symbols. (line 217)
+* reloading the overlay table: Overlay Commands. (line 52)
+* relocatable object files, reading symbols from: Files. (line 132)
+* remote connection without stubs: Server. (line 6)
+* remote debugging: Remote Debugging. (line 6)
+* remote delete: File Transfer. (line 23)
+* remote get: File Transfer. (line 19)
+* remote memory comparison: Memory. (line 123)
+* remote monitor prompt: MIPS Embedded. (line 107)
+* remote packets, enabling and disabling: Remote Configuration.
+ (line 132)
+* remote programs, interrupting: Connecting. (line 78)
+* remote protocol debugging: Debugging Output. (line 140)
+* remote protocol, binary data: Overview. (line 61)
+* remote protocol, field separator: Overview. (line 53)
+* remote put: File Transfer. (line 15)
+* remote query requests: General Query Packets.
+ (line 6)
+* remote serial debugging summary: Debug Session. (line 6)
+* remote serial debugging, overview: Remote Stub. (line 14)
+* remote serial protocol: Overview. (line 14)
+* remote serial stub: Stub Contents. (line 6)
+* remote serial stub list: Remote Stub. (line 54)
+* remote serial stub, initialization: Stub Contents. (line 10)
+* remote serial stub, main routine: Stub Contents. (line 15)
+* remote stub, example: Remote Stub. (line 6)
+* remote stub, support routines: Bootstrapping. (line 6)
+* remote target: Target Commands. (line 58)
+* remote target, file transfer: File Transfer. (line 6)
+* remote target, limit break- and watchpoints: Remote Configuration.
+ (line 72)
+* remote timeout: Remote Configuration.
+ (line 65)
+* remotetimeout: Sparclet. (line 12)
+* remove actions from a tracepoint: Tracepoint Actions. (line 21)
+* remove-inferiors: Inferiors and Programs.
+ (line 86)
+* rename, file-i/o system call: rename. (line 6)
+* Renesas: Remote Stub. (line 63)
+* repeated array elements: Print Settings. (line 176)
+* repeating command sequences: Command Syntax. (line 42)
+* repeating commands: Command Syntax. (line 21)
+* replay log events, remote reply: Stop Reply Packets. (line 61)
+* replay mode: Process Record and Replay.
+ (line 10)
+* reporting bugs in GDB: GDB Bugs. (line 6)
+* reprint the last value: Data. (line 23)
+* reset SDI connection, M32R: M32R/D. (line 44)
+* response time, MIPS debugging: MIPS. (line 10)
+* restart: Checkpoint/Restart. (line 6)
+* restart CHECKPOINT-ID: Checkpoint/Restart. (line 44)
+* restore: Dump/Restore Files. (line 41)
+* restore data from a file: Dump/Restore Files. (line 6)
+* result records in GDB/MI: GDB/MI Result Records.
+ (line 6)
+* resume threads of multiple processes simultaneously: All-Stop Mode.
+ (line 53)
+* resuming execution: Continuing and Stepping.
+ (line 6)
+* RET (repeat last command): Command Syntax. (line 21)
+* retransmit-timeout, MIPS protocol: MIPS Embedded. (line 83)
+* return: Returning. (line 6)
+* returning from a function: Returning. (line 6)
+* reverse execution: Reverse Execution. (line 6)
+* reverse-continue: Reverse Execution. (line 30)
+* reverse-finish: Reverse Execution. (line 77)
+* reverse-next: Reverse Execution. (line 60)
+* reverse-nexti: Reverse Execution. (line 69)
+* reverse-search: Search. (line 16)
+* reverse-search-history (C-r): Commands For History.
+ (line 26)
+* reverse-step: Reverse Execution. (line 37)
+* reverse-stepi: Reverse Execution. (line 52)
+* revert-line (M-r): Miscellaneous Commands.
+ (line 25)
+* rewind program state: Checkpoint/Restart. (line 6)
+* Right: TUI Keys. (line 62)
+* rn (reverse-next): Reverse Execution. (line 60)
+* rni (reverse-nexti): Reverse Execution. (line 69)
+* ROM at zero address, RDI: ARM. (line 102)
+* rs (step): Reverse Execution. (line 37)
+* rsi (reverse-stepi): Reverse Execution. (line 52)
+* run: Starting. (line 6)
+* run to main procedure: Starting. (line 79)
+* run until specified location: Continuing and Stepping.
+ (line 118)
+* run&: Background Execution.
+ (line 34)
+* running: Starting. (line 6)
+* running and debugging Sparclet programs: Sparclet Execution.
+ (line 6)
+* running programs backward: Reverse Execution. (line 6)
+* running VxWorks tasks: VxWorks Attach. (line 6)
+* running, on Sparclet: Sparclet. (line 28)
+* rwatch: Set Watchpoints. (line 64)
+* s (SingleKey TUI key): TUI Single Key Mode. (line 28)
+* s (step): Continuing and Stepping.
+ (line 46)
+* S packet: Packets. (line 304)
+* s packet: Packets. (line 298)
+* save breakpoints: Save Breakpoints. (line 9)
+* save breakpoints to a file for future sessions: Save Breakpoints.
+ (line 9)
+* save command history: Command History. (line 36)
+* save GDB output to a file: Logging Output. (line 6)
+* save gdb-index: Index Files. (line 19)
+* save tracepoints: save tracepoints. (line 6)
+* save tracepoints for future sessions: save tracepoints. (line 6)
+* save-tracepoints: save tracepoints. (line 6)
+* scheduler locking mode: All-Stop Mode. (line 37)
+* scope: M2 Scope. (line 6)
+* scripting commands: Command Files. (line 6)
+* scripting with python: Python. (line 6)
+* sdireset: M32R/D. (line 44)
+* sdistatus: M32R/D. (line 47)
+* SDS protocol: PowerPC Embedded. (line 80)
+* sds, a command: PowerPC Embedded. (line 91)
+* search: Search. (line 9)
+* search for a thread: Threads. (line 142)
+* search path for libthread_db: Threads. (line 177)
+* search_memory on Inferior: Inferiors In Python. (line 58)
+* searching memory: Searching Memory. (line 6)
+* searching memory, in remote debugging: General Query Packets.
+ (line 293)
+* searching source files: Search. (line 6)
+* section: Files. (line 182)
+* section offsets, remote request: General Query Packets.
+ (line 182)
+* segment descriptor tables: DJGPP Native. (line 24)
+* select Ctrl-C, BREAK or BREAK-g: Remote Configuration.
+ (line 85)
+* select on Frame: Frames In Python. (line 108)
+* select trace snapshot: tfind. (line 6)
+* select-frame: Frames. (line 51)
+* selected frame: Stack. (line 19)
+* selected_frame: Frames In Python. (line 23)
+* selected_thread: Threads In Python. (line 14)
+* selecting frame silently: Frames. (line 51)
+* self-insert (a, b, A, 1, !, ...): Commands For Text. (line 27)
+* send command to remote monitor: Connecting. (line 105)
+* send command to simulator: Embedded Processors. (line 9)
+* send interrupt-sequence on start: Remote Configuration.
+ (line 98)
+* send PMON command: MIPS Embedded. (line 132)
+* send rights, GNU Hurd: Hurd Native. (line 85)
+* sending files to remote systems: File Transfer. (line 6)
+* separate debugging information files: Separate Debug Files.
+ (line 6)
+* sequence-id, for GDB remote: Overview. (line 29)
+* serial connections, debugging: Debugging Output. (line 140)
+* serial line, target remote: Connecting. (line 18)
+* serial protocol, GDB remote: Overview. (line 14)
+* server prefix: Server Prefix. (line 6)
+* server, command prefix: Command History. (line 20)
+* set: Help. (line 107)
+* set ABI for MIPS: MIPS. (line 32)
+* set ada trust-PAD-over-XVS: Ada Glitches. (line 43)
+* set annotate: Annotations Overview.
+ (line 29)
+* set architecture: Targets. (line 21)
+* set args: Arguments. (line 21)
+* set arm: ARM. (line 18)
+* set auto-load-scripts: Auto-loading. (line 23)
+* set auto-solib-add: Files. (line 303)
+* set backtrace: Backtrace. (line 104)
+* set basenames-may-differ: Files. (line 517)
+* set board-address: M32R/D. (line 21)
+* set breakpoint always-inserted: Set Breaks. (line 314)
+* set breakpoint auto-hw: Set Breaks. (line 294)
+* set breakpoint pending: Set Breaks. (line 263)
+* set breakpoints in many functions: Set Breaks. (line 92)
+* set breakpoints on all functions: Set Breaks. (line 112)
+* set can-use-hw-watchpoints: Set Watchpoints. (line 101)
+* set case-sensitive: Symbols. (line 27)
+* set charset: Character Sets. (line 46)
+* set check range: Range Checking. (line 34)
+* set check type: Type Checking. (line 42)
+* set circular-trace-buffer: Starting and Stopping Trace Experiments.
+ (line 87)
+* set coerce-float-to-double: ABI. (line 41)
+* set com1base: DJGPP Native. (line 125)
+* set com1irq: DJGPP Native. (line 125)
+* set com2base: DJGPP Native. (line 125)
+* set com2irq: DJGPP Native. (line 125)
+* set com3base: DJGPP Native. (line 125)
+* set com3irq: DJGPP Native. (line 125)
+* set com4base: DJGPP Native. (line 125)
+* set com4irq: DJGPP Native. (line 125)
+* set complaints: Messages/Warnings. (line 29)
+* set confirm: Messages/Warnings. (line 50)
+* set cp-abi: ABI. (line 53)
+* set cygwin-exceptions: Cygwin Native. (line 42)
+* set data-directory: Data Files. (line 12)
+* set dcache line-size: Caching Remote Data. (line 48)
+* set dcache size: Caching Remote Data. (line 45)
+* set debug: Debugging Output. (line 18)
+* set debug darwin: Darwin. (line 9)
+* set debug hppa: HPPA. (line 10)
+* set debug libthread-db: Threads. (line 212)
+* set debug mach-o: Darwin. (line 16)
+* set debug mips: MIPS. (line 81)
+* set debug monitor: Target Commands. (line 108)
+* set debug nto-debug: Neutrino. (line 9)
+* set debug-file-directory: Separate Debug Files.
+ (line 68)
+* set debugevents: Cygwin Native. (line 71)
+* set debugexceptions: Cygwin Native. (line 82)
+* set debugexec: Cygwin Native. (line 78)
+* set debugmemory: Cygwin Native. (line 86)
+* set default-collect: Tracepoint Actions. (line 114)
+* set demangle-style: Print Settings. (line 296)
+* set detach-on-fork: Forks. (line 55)
+* set directories: Source Path. (line 120)
+* set disable-randomization: Starting. (line 136)
+* set disassemble-next-line: Machine Code. (line 139)
+* set disassembly-flavor: Machine Code. (line 127)
+* set disconnected-tracing: Starting and Stopping Trace Experiments.
+ (line 48)
+* set displaced-stepping: Maintenance Commands.
+ (line 56)
+* set download-path: M32R/D. (line 15)
+* set editing: Editing. (line 15)
+* set endian: Byte Order. (line 13)
+* set environment: Environment. (line 39)
+* set exceptions, Hurd command: Hurd Native. (line 40)
+* set exec-direction: Reverse Execution. (line 83)
+* set exec-done-display: Debugging Output. (line 11)
+* set exec-wrapper: Starting. (line 111)
+* set extension-language: Show. (line 30)
+* set fast tracepoint: Create and Delete Tracepoints.
+ (line 40)
+* set follow-exec-mode: Forks. (line 101)
+* set follow-fork-mode: Forks. (line 35)
+* set gnutarget: Target Commands. (line 28)
+* set hash, for remote monitors: Target Commands. (line 99)
+* set height: Screen Size. (line 21)
+* set history expansion: Command History. (line 65)
+* set history filename: Command History. (line 26)
+* set history save: Command History. (line 36)
+* set history size: Command History. (line 45)
+* set host-charset: Character Sets. (line 33)
+* set inferior controlling terminal: Input/Output. (line 44)
+* set inferior-tty: Input/Output. (line 49)
+* set input-radix: Numbers. (line 14)
+* set interactive-mode: Other Misc Settings. (line 6)
+* set language: Manually. (line 9)
+* set libthread-db-search-path: Threads. (line 177)
+* set listsize: List. (line 33)
+* set logging: Logging Output. (line 9)
+* set mach-exceptions: Darwin. (line 27)
+* set max-user-call-depth: Define. (line 76)
+* set mem inaccessible-by-default: Memory Region Attributes.
+ (line 130)
+* set mips abi: MIPS. (line 32)
+* set mips mask-address: MIPS. (line 61)
+* set mipsfpu: MIPS Embedded. (line 60)
+* set monitor-prompt, MIPS remote: MIPS Embedded. (line 107)
+* set monitor-warnings, MIPS remote: MIPS Embedded. (line 123)
+* set multiple-symbols: Ambiguous Expressions.
+ (line 50)
+* set new-console: Cygwin Native. (line 54)
+* set new-group: Cygwin Native. (line 63)
+* set non-stop: Non-Stop Mode. (line 38)
+* set opaque-type-resolution: Symbols. (line 241)
+* set osabi: ABI. (line 11)
+* set output-radix: Numbers. (line 31)
+* set overload-resolution: Debugging C Plus Plus.
+ (line 48)
+* set pagination: Screen Size. (line 38)
+* set powerpc: PowerPC Embedded. (line 48)
+* set print: Print Settings. (line 11)
+* set print frame-arguments: Print Settings. (line 135)
+* set print inferior-events: Inferiors and Programs.
+ (line 117)
+* set print symbol-loading: Symbols. (line 259)
+* set print thread-events: Threads. (line 156)
+* set processor: Targets. (line 31)
+* set procfs-file: SVR4 Process Information.
+ (line 59)
+* set procfs-trace: SVR4 Process Information.
+ (line 53)
+* set prompt: Prompt. (line 16)
+* set radix: Numbers. (line 44)
+* set ravenscar task-switching off: Ravenscar Profile. (line 14)
+* set ravenscar task-switching on: Ravenscar Profile. (line 10)
+* set rdiheartbeat: ARM. (line 112)
+* set rdiromatzero: ARM. (line 102)
+* set record insn-number-max: Process Record and Replay.
+ (line 89)
+* set record memory-query: Process Record and Replay.
+ (line 123)
+* set record stop-at-limit: Process Record and Replay.
+ (line 109)
+* set remote: Remote Configuration.
+ (line 6)
+* set remote system-call-allowed: system. (line 38)
+* set remote-mips64-transfers-32bit-regs: MIPS. (line 71)
+* set remotecache: Caching Remote Data. (line 18)
+* set remoteflow: Remote Configuration.
+ (line 41)
+* set retransmit-timeout: MIPS Embedded. (line 83)
+* set rstack_high_address: A29K. (line 6)
+* set schedule-multiple: All-Stop Mode. (line 66)
+* set script-extension: Extending GDB. (line 19)
+* set sdstimeout: PowerPC Embedded. (line 84)
+* set server-address: M32R/D. (line 27)
+* set sh calling-convention: Super-H. (line 12)
+* set shell: Cygwin Native. (line 90)
+* set signal-thread: Hurd Native. (line 21)
+* set signals, Hurd command: Hurd Native. (line 11)
+* set sigs, Hurd command: Hurd Native. (line 11)
+* set sigthread: Hurd Native. (line 21)
+* set solib-absolute-prefix: Files. (line 374)
+* set solib-search-path: Files. (line 443)
+* set spu: SPU. (line 39)
+* set stack-cache: Caching Remote Data. (line 26)
+* set static tracepoint: Create and Delete Tracepoints.
+ (line 51)
+* set step-mode: Continuing and Stepping.
+ (line 92)
+* set stop-on-solib-events: Files. (line 351)
+* set stopped, Hurd command: Hurd Native. (line 32)
+* set struct-convention: i386. (line 7)
+* set substitute-path: Source Path. (line 127)
+* set symbol-reloading: Symbols. (line 224)
+* set syn-garbage-limit, MIPS remote: MIPS Embedded. (line 98)
+* set sysroot: Files. (line 374)
+* set target-async: Background Execution.
+ (line 17)
+* set target-charset: Character Sets. (line 28)
+* set target-file-system-kind (unix|dos-based|auto): Files. (line 457)
+* set target-wide-charset: Character Sets. (line 61)
+* set task, Hurd commands: Hurd Native. (line 49)
+* set tcp: Remote Configuration.
+ (line 107)
+* set tdesc filename: Retrieving Descriptions.
+ (line 18)
+* set thread, Hurd command: Hurd Native. (line 91)
+* set timeout: MIPS Embedded. (line 83)
+* set trace-commands: Messages/Warnings. (line 67)
+* set tracepoint: Create and Delete Tracepoints.
+ (line 6)
+* set trust-readonly-sections: Files. (line 258)
+* set tui active-border-mode: TUI Configuration. (line 24)
+* set tui border-kind: TUI Configuration. (line 9)
+* set tui border-mode: TUI Configuration. (line 23)
+* set unwind-on-terminating-exception: Calling. (line 46)
+* set unwindonsignal: Calling. (line 35)
+* set variable: Assignment. (line 16)
+* set verbose: Messages/Warnings. (line 15)
+* set watchdog: Maintenance Commands.
+ (line 357)
+* set width: Screen Size. (line 21)
+* set write: Patching. (line 15)
+* set-mark (C-@): Miscellaneous Commands.
+ (line 32)
+* set_debug_traps: Stub Contents. (line 10)
+* set_doc: Parameters In Python.
+ (line 54)
+* setting variables: Assignment. (line 6)
+* setting watchpoints: Set Watchpoints. (line 6)
+* SH: Remote Stub. (line 63)
+* sh-stub.c: Remote Stub. (line 63)
+* share: Files. (line 332)
+* shared libraries: Files. (line 281)
+* shared library events, remote reply: Stop Reply Packets. (line 56)
+* sharedlibrary: Files. (line 332)
+* shell: Shell Commands. (line 10)
+* shell escape: Shell Commands. (line 10)
+* show: Help. (line 112)
+* show ada trust-PAD-over-XVS: Ada Glitches. (line 43)
+* show all convenience functions: Convenience Vars. (line 112)
+* show all user variables: Convenience Vars. (line 37)
+* show annotate: Annotations Overview.
+ (line 34)
+* show architecture: Targets. (line 21)
+* show args: Arguments. (line 28)
+* show arm: ARM. (line 22)
+* show auto-load-scripts: Auto-loading. (line 26)
+* show auto-solib-add: Files. (line 320)
+* show backtrace: Backtrace. (line 111)
+* show basenames-may-differ: Files. (line 520)
+* show board-address: M32R/D. (line 24)
+* show breakpoint always-inserted: Set Breaks. (line 314)
+* show breakpoint auto-hw: Set Breaks. (line 294)
+* show breakpoint pending: Set Breaks. (line 263)
+* show can-use-hw-watchpoints: Set Watchpoints. (line 104)
+* show case-sensitive: Symbols. (line 40)
+* show charset: Character Sets. (line 52)
+* show check range: Range Checking. (line 34)
+* show check type: Type Checking. (line 42)
+* show circular-trace-buffer: Starting and Stopping Trace Experiments.
+ (line 94)
+* show coerce-float-to-double: ABI. (line 50)
+* show com1base: DJGPP Native. (line 137)
+* show com1irq: DJGPP Native. (line 137)
+* show com2base: DJGPP Native. (line 137)
+* show com2irq: DJGPP Native. (line 137)
+* show com3base: DJGPP Native. (line 137)
+* show com3irq: DJGPP Native. (line 137)
+* show com4base: DJGPP Native. (line 137)
+* show com4irq: DJGPP Native. (line 137)
+* show commands: Command History. (line 78)
+* show complaints: Messages/Warnings. (line 35)
+* show confirm: Messages/Warnings. (line 58)
+* show convenience: Convenience Vars. (line 37)
+* show copying: Help. (line 136)
+* show cp-abi: ABI. (line 53)
+* show cygwin-exceptions: Cygwin Native. (line 50)
+* show data-directory: Data Files. (line 16)
+* show dcache line-size: Caching Remote Data. (line 56)
+* show dcache size: Caching Remote Data. (line 52)
+* show debug: Debugging Output. (line 22)
+* show debug darwin: Darwin. (line 13)
+* show debug libthread-db: Threads. (line 212)
+* show debug mach-o: Darwin. (line 23)
+* show debug mips: MIPS. (line 85)
+* show debug monitor: Target Commands. (line 112)
+* show debug nto-debug: Neutrino. (line 13)
+* show debug-file-directory: Separate Debug Files.
+ (line 73)
+* show default-collect: Tracepoint Actions. (line 123)
+* show detach-on-fork: Forks. (line 71)
+* show directories: Source Path. (line 124)
+* show disassemble-next-line: Machine Code. (line 139)
+* show disassembly-flavor: Machine Code. (line 136)
+* show disconnected-tracing: Starting and Stopping Trace Experiments.
+ (line 55)
+* show displaced-stepping: Maintenance Commands.
+ (line 56)
+* show download-path: M32R/D. (line 18)
+* show editing: Editing. (line 22)
+* show environment: Environment. (line 33)
+* show exceptions, Hurd command: Hurd Native. (line 46)
+* show exec-done-display: Debugging Output. (line 14)
+* show follow-fork-mode: Forks. (line 49)
+* show gnutarget: Target Commands. (line 40)
+* show hash, for remote monitors: Target Commands. (line 105)
+* show height: Screen Size. (line 21)
+* show history: Command History. (line 70)
+* show host-charset: Character Sets. (line 55)
+* show inferior-tty: Input/Output. (line 52)
+* show input-radix: Numbers. (line 36)
+* show interactive-mode: Other Misc Settings. (line 21)
+* show language: Show. (line 10)
+* show last commands: Command History. (line 78)
+* show libthread-db-search-path: Threads. (line 209)
+* show listsize: List. (line 37)
+* show logging: Logging Output. (line 26)
+* show mach-exceptions: Darwin. (line 34)
+* show max-user-call-depth: Define. (line 76)
+* show mem inaccessible-by-default: Memory Region Attributes.
+ (line 136)
+* show mips abi: MIPS. (line 54)
+* show mips mask-address: MIPS. (line 67)
+* show mipsfpu: MIPS Embedded. (line 60)
+* show monitor-prompt, MIPS remote: MIPS Embedded. (line 119)
+* show monitor-warnings, MIPS remote: MIPS Embedded. (line 129)
+* show multiple-symbols: Ambiguous Expressions.
+ (line 70)
+* show new-console: Cygwin Native. (line 59)
+* show new-group: Cygwin Native. (line 68)
+* show non-stop: Non-Stop Mode. (line 42)
+* show opaque-type-resolution: Symbols. (line 256)
+* show osabi: ABI. (line 11)
+* show output-radix: Numbers. (line 39)
+* show overload-resolution: Debugging C Plus Plus.
+ (line 65)
+* show pagination: Screen Size. (line 44)
+* show paths: Environment. (line 29)
+* show print: Print Settings. (line 39)
+* show print inferior-events: Inferiors and Programs.
+ (line 125)
+* show print symbol-loading: Symbols. (line 269)
+* show print thread-events: Threads. (line 166)
+* show processor: Targets. (line 31)
+* show procfs-file: SVR4 Process Information.
+ (line 64)
+* show procfs-trace: SVR4 Process Information.
+ (line 56)
+* show prompt: Prompt. (line 19)
+* show radix: Numbers. (line 44)
+* show ravenscar task-switching: Ravenscar Profile. (line 22)
+* show rdiheartbeat: ARM. (line 117)
+* show rdiromatzero: ARM. (line 109)
+* show record insn-number-max: Process Record and Replay.
+ (line 106)
+* show record memory-query: Process Record and Replay.
+ (line 134)
+* show record stop-at-limit: Process Record and Replay.
+ (line 120)
+* show remote: Remote Configuration.
+ (line 6)
+* show remote system-call-allowed: system. (line 42)
+* show remote-mips64-transfers-32bit-regs: MIPS. (line 77)
+* show remotecache: Caching Remote Data. (line 23)
+* show remoteflow: Remote Configuration.
+ (line 45)
+* show retransmit-timeout: MIPS Embedded. (line 83)
+* show rstack_high_address: A29K. (line 17)
+* show script-extension: Extending GDB. (line 19)
+* show sdstimeout: PowerPC Embedded. (line 88)
+* show server-address: M32R/D. (line 31)
+* show sh calling-convention: Super-H. (line 25)
+* show shell: Cygwin Native. (line 94)
+* show signal-thread: Hurd Native. (line 28)
+* show signals, Hurd command: Hurd Native. (line 17)
+* show sigs, Hurd command: Hurd Native. (line 17)
+* show sigthread: Hurd Native. (line 28)
+* show solib-search-path: Files. (line 454)
+* show spu: SPU. (line 44)
+* show stack-cache: Caching Remote Data. (line 31)
+* show stop-on-solib-events: Files. (line 357)
+* show stopped, Hurd command: Hurd Native. (line 37)
+* show struct-convention: i386. (line 15)
+* show substitute-path: Source Path. (line 164)
+* show symbol-reloading: Symbols. (line 238)
+* show syn-garbage-limit, MIPS remote: MIPS Embedded. (line 103)
+* show sysroot: Files. (line 440)
+* show target-async: Background Execution.
+ (line 21)
+* show target-charset: Character Sets. (line 58)
+* show target-file-system-kind: Files. (line 457)
+* show target-wide-charset: Character Sets. (line 67)
+* show task, Hurd commands: Hurd Native. (line 57)
+* show tcp: Remote Configuration.
+ (line 107)
+* show tdesc filename: Retrieving Descriptions.
+ (line 25)
+* show thread, Hurd command: Hurd Native. (line 101)
+* show timeout: MIPS Embedded. (line 83)
+* show unwind-on-terminating-exception: Calling. (line 54)
+* show unwindonsignal: Calling. (line 42)
+* show user: Define. (line 70)
+* show values: Value History. (line 47)
+* show verbose: Messages/Warnings. (line 21)
+* show version: Help. (line 126)
+* show warranty: Help. (line 140)
+* show width: Screen Size. (line 21)
+* show write: Patching. (line 26)
+* show-all-if-ambiguous: Readline Init File Syntax.
+ (line 164)
+* show-all-if-unmodified: Readline Init File Syntax.
+ (line 170)
+* show_doc: Parameters In Python.
+ (line 60)
+* si (stepi): Continuing and Stepping.
+ (line 190)
+* signal: Signaling. (line 6)
+* signal annotation: Annotations for Running.
+ (line 42)
+* signal-name annotation: Annotations for Running.
+ (line 22)
+* signal-name-end annotation: Annotations for Running.
+ (line 22)
+* signal-string annotation: Annotations for Running.
+ (line 22)
+* signal-string-end annotation: Annotations for Running.
+ (line 22)
+* signalled annotation: Annotations for Running.
+ (line 22)
+* signals: Signals. (line 6)
+* SIGQUIT signal, dump core of GDB: Maintenance Commands.
+ (line 99)
+* silent <1>: Break Commands. (line 43)
+* silent: Breakpoints In Python.
+ (line 79)
+* sim: Z8000. (line 15)
+* sim, a command: Embedded Processors. (line 13)
+* simulator, Z8000: Z8000. (line 6)
+* size of remote memory accesses: Packets. (line 228)
+* size of screen: Screen Size. (line 6)
+* sizeof: Types In Python. (line 28)
+* snapshot of a process: Checkpoint/Restart. (line 6)
+* software watchpoints: Set Watchpoints. (line 31)
+* solib_name: Basic Python. (line 154)
+* source: Command Files. (line 17)
+* source annotation: Source Annotations. (line 6)
+* source file and line of a symbol: Print Settings. (line 51)
+* source line and its code address: Machine Code. (line 6)
+* source path: Source Path. (line 6)
+* Sparc: Remote Stub. (line 66)
+* sparc-stub.c: Remote Stub. (line 66)
+* sparcl-stub.c: Remote Stub. (line 69)
+* Sparclet: Sparclet. (line 6)
+* SparcLite: Remote Stub. (line 69)
+* Special Fortran commands: Special Fortran Commands.
+ (line 6)
+* specifying location: Specify Location. (line 6)
+* spr: OpenRISC 1000. (line 33)
+* SPU: SPU. (line 6)
+* SSE registers (x86): Registers. (line 71)
+* stack frame: Frames. (line 6)
+* stack on Alpha: MIPS. (line 6)
+* stack on MIPS: MIPS. (line 6)
+* stack pointer register: Registers. (line 26)
+* stacking targets: Active Targets. (line 6)
+* standard registers: Registers. (line 26)
+* start <1>: Blocks In Python. (line 36)
+* start: Starting. (line 78)
+* start a new trace experiment: Starting and Stopping Trace Experiments.
+ (line 6)
+* start-kbd-macro (C-x (): Keyboard Macros. (line 6)
+* starting: Starting. (line 6)
+* starting annotation: Annotations for Running.
+ (line 6)
+* startup code, and backtrace: Backtrace. (line 93)
+* stat, file-i/o system call: stat/fstat. (line 6)
+* static members of C++ objects: Print Settings. (line 342)
+* static members of Pascal objects: Print Settings. (line 353)
+* static tracepoints: Set Tracepoints. (line 28)
+* static tracepoints, in remote protocol: General Query Packets.
+ (line 563)
+* static tracepoints, setting: Create and Delete Tracepoints.
+ (line 51)
+* status of trace data collection: Starting and Stopping Trace Experiments.
+ (line 20)
+* status output in GDB/MI: GDB/MI Output Syntax.
+ (line 94)
+* STDERR: Basic Python. (line 132)
+* STDLOG: Basic Python. (line 114)
+* STDOUT: Basic Python. (line 129)
+* step: Continuing and Stepping.
+ (line 46)
+* step&: Background Execution.
+ (line 41)
+* stepi: Continuing and Stepping.
+ (line 190)
+* stepi&: Background Execution.
+ (line 44)
+* stepping: Continuing and Stepping.
+ (line 6)
+* stepping into functions with no line info: Continuing and Stepping.
+ (line 93)
+* stop a running trace experiment: Starting and Stopping Trace Experiments.
+ (line 12)
+* stop on C++ exceptions: Set Catchpoints. (line 13)
+* stop on gdb.Breakpoint: Breakpoints In Python.
+ (line 25)
+* stop reply packets: Stop Reply Packets. (line 6)
+* stop, a pseudo-command: Hooks. (line 21)
+* stop_signal: Events In Python. (line 91)
+* stopped threads: Thread Stops. (line 6)
+* stopping annotation: Annotations for Running.
+ (line 6)
+* strace: Create and Delete Tracepoints.
+ (line 51)
+* stream records in GDB/MI: GDB/MI Stream Records.
+ (line 6)
+* string on Value: Values From Inferior.
+ (line 139)
+* strip_typedefs on Type: Types In Python. (line 118)
+* struct return convention: i386. (line 7)
+* struct stat, in file-i/o protocol: struct stat. (line 6)
+* struct timeval, in file-i/o protocol: struct timeval. (line 6)
+* struct user contents: OS Information. (line 9)
+* struct/union returned in registers: i386. (line 7)
+* structure field name completion: Completion. (line 96)
+* stub example, remote debugging: Remote Stub. (line 6)
+* stupid questions: Messages/Warnings. (line 50)
+* Super-H: Super-H. (line 6)
+* superblock: Blocks In Python. (line 48)
+* supported packets, remote query: General Query Packets.
+ (line 328)
+* switch on InferiorThread: Threads In Python. (line 51)
+* switching threads: Threads. (line 6)
+* switching threads automatically: All-Stop Mode. (line 28)
+* symbol decoding style, C++: Print Settings. (line 296)
+* symbol dump: Symbols. (line 272)
+* symbol from address: Symbols. (line 54)
+* symbol lookup, remote request: General Query Packets.
+ (line 567)
+* symbol names: Symbols. (line 14)
+* symbol table: Files. (line 6)
+* symbol tables in python: Symbol Tables In Python.
+ (line 6)
+* symbol tables, listing GDB's internal: Symbols. (line 291)
+* symbol, source file and line: Print Settings. (line 51)
+* symbol-file: Files. (line 45)
+* SYMBOL_FUNCTIONS_DOMAIN: Symbols In Python. (line 117)
+* SYMBOL_LABEL_DOMAIN: Symbols In Python. (line 110)
+* SYMBOL_LOC_ARG: Symbols In Python. (line 139)
+* SYMBOL_LOC_BLOCK: Symbols In Python. (line 160)
+* SYMBOL_LOC_COMPUTED: Symbols In Python. (line 174)
+* SYMBOL_LOC_CONST: Symbols In Python. (line 130)
+* SYMBOL_LOC_CONST_BYTES: Symbols In Python. (line 163)
+* SYMBOL_LOC_LOCAL: Symbols In Python. (line 153)
+* SYMBOL_LOC_OPTIMIZED_OUT: Symbols In Python. (line 171)
+* SYMBOL_LOC_REF_ARG: Symbols In Python. (line 143)
+* SYMBOL_LOC_REGISTER: Symbols In Python. (line 136)
+* SYMBOL_LOC_REGPARM_ADDR: Symbols In Python. (line 148)
+* SYMBOL_LOC_STATIC: Symbols In Python. (line 133)
+* SYMBOL_LOC_TYPEDEF: Symbols In Python. (line 156)
+* SYMBOL_LOC_UNDEF: Symbols In Python. (line 128)
+* SYMBOL_LOC_UNRESOLVED: Symbols In Python. (line 166)
+* SYMBOL_STRUCT_DOMAIN: Symbols In Python. (line 107)
+* SYMBOL_TYPES_DOMAIN: Symbols In Python. (line 120)
+* SYMBOL_UNDEF_DOMAIN: Symbols In Python. (line 100)
+* SYMBOL_VAR_DOMAIN: Symbols In Python. (line 103)
+* SYMBOL_VARIABLES_DOMAIN: Symbols In Python. (line 113)
+* symbols in python: Symbols In Python. (line 6)
+* symbols, reading from relocatable object files: Files. (line 132)
+* symbols, reading immediately: Files. (line 90)
+* symtab <1>: Symbols In Python. (line 53)
+* symtab: Symbol Tables In Python.
+ (line 17)
+* synchronize with remote MIPS target: MIPS Embedded. (line 98)
+* syscall DSO: Files. (line 162)
+* sysinfo: DJGPP Native. (line 19)
+* system calls and thread breakpoints: Interrupted System Calls.
+ (line 6)
+* system root, alternate: Files. (line 374)
+* system, file-i/o system call: system. (line 6)
+* system-wide init file: System-wide configuration.
+ (line 6)
+* T packet: Packets. (line 316)
+* t packet: Packets. (line 311)
+* T packet reply: Stop Reply Packets. (line 22)
+* tabset: TUI Commands. (line 84)
+* tag: Types In Python. (line 33)
+* target: Target Commands. (line 49)
+* target architecture: Targets. (line 17)
+* target array: MIPS Embedded. (line 49)
+* target byte order: Byte Order. (line 6)
+* target character set: Character Sets. (line 6)
+* target dbug: M68K. (line 9)
+* target ddb PORT: MIPS Embedded. (line 41)
+* target debugging info: Debugging Output. (line 165)
+* target descriptions: Target Descriptions. (line 6)
+* target descriptions, ARM features: ARM Features. (line 6)
+* target descriptions, i386 features: i386 Features. (line 6)
+* target descriptions, inclusion: Target Description Format.
+ (line 54)
+* target descriptions, M68K features: M68K Features. (line 6)
+* target descriptions, MIPS features: MIPS Features. (line 6)
+* target descriptions, PowerPC features: PowerPC Features. (line 6)
+* target descriptions, predefined types: Predefined Target Types.
+ (line 6)
+* target descriptions, standard features: Standard Target Features.
+ (line 6)
+* target descriptions, XML format: Target Description Format.
+ (line 6)
+* target dink32: PowerPC Embedded. (line 69)
+* target jtag: OpenRISC 1000. (line 9)
+* target lsi PORT: MIPS Embedded. (line 44)
+* target m32r: M32R/D. (line 6)
+* target m32rsdi: M32R/D. (line 9)
+* target mips PORT: MIPS Embedded. (line 14)
+* target on Type: Types In Python. (line 122)
+* target op50n: PA. (line 6)
+* target output in GDB/MI: GDB/MI Output Syntax.
+ (line 110)
+* target pmon PORT: MIPS Embedded. (line 38)
+* target ppcbug: PowerPC Embedded. (line 72)
+* target ppcbug1: PowerPC Embedded. (line 73)
+* target r3900: MIPS Embedded. (line 46)
+* target rdi: ARM. (line 6)
+* target rdp: ARM. (line 11)
+* target record: Process Record and Replay.
+ (line 38)
+* target remote: Connecting. (line 11)
+* target sds: PowerPC Embedded. (line 77)
+* target sim, with Z8000: Z8000. (line 15)
+* target sparclite: Sparclite. (line 6)
+* target stack description: Maintenance Commands.
+ (line 236)
+* target tfile: Trace Files. (line 22)
+* target vxworks: VxWorks. (line 6)
+* target w89k: PA. (line 9)
+* target_charset: Basic Python. (line 143)
+* target_wide_charset: Basic Python. (line 148)
+* task: Breakpoints In Python.
+ (line 92)
+* task (Ada): Ada Tasks. (line 105)
+* task attributes (GNU Hurd): Hurd Native. (line 49)
+* task breakpoints, in Ada: Ada Tasks. (line 135)
+* task exception port, GNU Hurd: Hurd Native. (line 68)
+* task suspend count: Hurd Native. (line 60)
+* task switching with program using Ravenscar Profile: Ravenscar Profile.
+ (line 10)
+* tbreak: Set Breaks. (line 55)
+* TCP port, target remote: Connecting. (line 29)
+* tdump: tdump. (line 6)
+* template_argument on Type: Types In Python. (line 137)
+* terminal: Input/Output. (line 6)
+* teval (tracepoints): Tracepoint Actions. (line 89)
+* Text User Interface: TUI. (line 6)
+* tfile: Trace Files. (line 22)
+* tfind: tfind. (line 6)
+* thbreak: Set Breaks. (line 82)
+* this, inside C++ member functions: C Plus Plus Expressions.
+ (line 22)
+* thread: Breakpoints In Python.
+ (line 87)
+* thread apply: Threads. (line 122)
+* thread attributes info, remote request: General Query Packets.
+ (line 612)
+* thread breakpoints: Thread-Specific Breakpoints.
+ (line 10)
+* thread breakpoints and system calls: Interrupted System Calls.
+ (line 6)
+* thread default settings, GNU Hurd: Hurd Native. (line 131)
+* thread find: Threads. (line 142)
+* thread identifier (GDB): Threads. (line 63)
+* thread identifier (system): Threads. (line 51)
+* thread info (Solaris): Threads. (line 98)
+* thread information, remote request: General Query Packets.
+ (line 209)
+* thread list format: Thread List Format. (line 6)
+* thread name: Threads. (line 131)
+* thread number: Threads. (line 63)
+* thread properties, GNU Hurd: Hurd Native. (line 91)
+* thread suspend count, GNU Hurd: Hurd Native. (line 110)
+* thread THREADNO: Threads. (line 100)
+* THREAD-ID, in remote protocol: Packets. (line 20)
+* threads and watchpoints: Set Watchpoints. (line 165)
+* threads in python: Threads In Python. (line 6)
+* threads of execution: Threads. (line 6)
+* threads on Inferior: Inferiors In Python. (line 40)
+* threads, automatic switching: All-Stop Mode. (line 28)
+* threads, continuing: Thread Stops. (line 6)
+* threads, stopped: Thread Stops. (line 6)
+* time of command execution: Maintenance Commands.
+ (line 328)
+* timeout for commands: Maintenance Commands.
+ (line 357)
+* timeout for serial communications: Remote Configuration.
+ (line 65)
+* timeout, for remote target connection: Remote Configuration.
+ (line 123)
+* timeout, MIPS protocol: MIPS Embedded. (line 83)
+* timestampping debugging info: Debugging Output. (line 176)
+* tload, M32R: M32R/D. (line 39)
+* to_string on pretty printer: Pretty Printing API. (line 54)
+* trace: Create and Delete Tracepoints.
+ (line 6)
+* trace experiment, status of: Starting and Stopping Trace Experiments.
+ (line 20)
+* trace file format: Trace File Format. (line 6)
+* trace files: Trace Files. (line 6)
+* trace state variable value, remote request: Tracepoint Packets.
+ (line 276)
+* trace state variables: Trace State Variables.
+ (line 6)
+* traceback: Backtrace. (line 6)
+* traceframe info format: Traceframe Info Format.
+ (line 6)
+* tracepoint actions: Tracepoint Actions. (line 6)
+* tracepoint conditions: Tracepoint Conditions.
+ (line 6)
+* tracepoint data, display: tdump. (line 6)
+* tracepoint deletion: Create and Delete Tracepoints.
+ (line 101)
+* tracepoint number: Create and Delete Tracepoints.
+ (line 98)
+* tracepoint packets: Tracepoint Packets. (line 6)
+* tracepoint pass count: Tracepoint Passcounts.
+ (line 6)
+* tracepoint restrictions: Tracepoint Restrictions.
+ (line 6)
+* tracepoint variables: Tracepoint Variables.
+ (line 6)
+* tracepoints: Tracepoints. (line 6)
+* tracepoints support in gdbserver: Server. (line 207)
+* trailing underscore, in Fortran symbols: Fortran. (line 9)
+* translating between character sets: Character Sets. (line 6)
+* transpose-chars (C-t): Commands For Text. (line 30)
+* transpose-words (M-t): Commands For Text. (line 36)
+* tsave: Trace Files. (line 12)
+* tstart: Starting and Stopping Trace Experiments.
+ (line 6)
+* tstatus: Starting and Stopping Trace Experiments.
+ (line 20)
+* tstop: Starting and Stopping Trace Experiments.
+ (line 12)
+* tty: Input/Output. (line 23)
+* TUI: TUI. (line 6)
+* TUI commands: TUI Commands. (line 6)
+* TUI configuration variables: TUI Configuration. (line 6)
+* TUI key bindings: TUI Keys. (line 6)
+* tui reg: TUI Commands. (line 61)
+* TUI single key mode: TUI Single Key Mode. (line 6)
+* tvariable: Trace State Variables.
+ (line 26)
+* type <1>: Symbols In Python. (line 48)
+* type <2>: Values From Inferior.
+ (line 55)
+* type <3>: Lazy Strings In Python.
+ (line 44)
+* type: Breakpoints In Python.
+ (line 107)
+* type casting memory: Expressions. (line 43)
+* type chain of a data type: Maintenance Commands.
+ (line 248)
+* type checking: Checks. (line 31)
+* type conversions in C++: C Plus Plus Expressions.
+ (line 27)
+* type on Frame: Frames In Python. (line 48)
+* TYPE_CODE_ARRAY: Types In Python. (line 155)
+* TYPE_CODE_BITSTRING: Types In Python. (line 193)
+* TYPE_CODE_BOOL: Types In Python. (line 214)
+* TYPE_CODE_CHAR: Types In Python. (line 211)
+* TYPE_CODE_COMPLEX: Types In Python. (line 217)
+* TYPE_CODE_DECFLOAT: Types In Python. (line 226)
+* TYPE_CODE_ENUM: Types In Python. (line 164)
+* TYPE_CODE_ERROR: Types In Python. (line 196)
+* TYPE_CODE_FLAGS: Types In Python. (line 167)
+* TYPE_CODE_FLT: Types In Python. (line 176)
+* TYPE_CODE_FUNC: Types In Python. (line 170)
+* TYPE_CODE_INT: Types In Python. (line 173)
+* TYPE_CODE_INTERNAL_FUNCTION: Types In Python. (line 229)
+* TYPE_CODE_MEMBERPTR: Types In Python. (line 205)
+* TYPE_CODE_METHOD: Types In Python. (line 199)
+* TYPE_CODE_METHODPTR: Types In Python. (line 202)
+* TYPE_CODE_NAMESPACE: Types In Python. (line 223)
+* TYPE_CODE_PTR: Types In Python. (line 152)
+* TYPE_CODE_RANGE: Types In Python. (line 185)
+* TYPE_CODE_REF: Types In Python. (line 208)
+* TYPE_CODE_SET: Types In Python. (line 182)
+* TYPE_CODE_STRING: Types In Python. (line 188)
+* TYPE_CODE_STRUCT: Types In Python. (line 158)
+* TYPE_CODE_TYPEDEF: Types In Python. (line 220)
+* TYPE_CODE_UNION: Types In Python. (line 161)
+* TYPE_CODE_VOID: Types In Python. (line 179)
+* types in Python: Types In Python. (line 6)
+* u (SingleKey TUI key): TUI Single Key Mode. (line 31)
+* u (until): Continuing and Stepping.
+ (line 118)
+* UDP port, target remote: Connecting. (line 49)
+* undisplay: Auto Display. (line 45)
+* undo (C-_ or C-x C-u): Miscellaneous Commands.
+ (line 22)
+* union field name completion: Completion. (line 96)
+* unions in structures, printing: Print Settings. (line 236)
+* universal-argument (): Numeric Arguments. (line 10)
+* unix-filename-rubout (): Commands For Killing.
+ (line 32)
+* unix-line-discard (C-u): Commands For Killing.
+ (line 12)
+* unix-word-rubout (C-w): Commands For Killing.
+ (line 28)
+* unknown address, locating: Output Formats. (line 35)
+* unlink, file-i/o system call: unlink. (line 6)
+* unlinked object files: Files. (line 26)
+* unload symbols from shared libraries: Files. (line 341)
+* unmap an overlay: Overlay Commands. (line 39)
+* unmapped overlays: How Overlays Work. (line 6)
+* unqualified on Type: Types In Python. (line 99)
+* unset environment: Environment. (line 55)
+* unset substitute-path: Source Path. (line 156)
+* unset tdesc filename: Retrieving Descriptions.
+ (line 21)
+* unsupported languages: Unsupported Languages.
+ (line 6)
+* until: Continuing and Stepping.
+ (line 118)
+* until&: Background Execution.
+ (line 59)
+* unwind stack in called functions: Calling. (line 35)
+* unwind stack in called functions with unhandled exceptions: Calling.
+ (line 46)
+* unwind_stop_reason on Frame: Frames In Python. (line 74)
+* up: Selection. (line 35)
+* Up: TUI Keys. (line 53)
+* up-silently: Selection. (line 64)
+* upcase-word (M-u): Commands For Text. (line 41)
+* update: TUI Commands. (line 76)
+* upload, M32R: M32R/D. (line 34)
+* use only software watchpoints: Set Watchpoints. (line 93)
+* use_dbt_break: M32R/D. (line 64)
+* use_debug_dma: M32R/D. (line 53)
+* use_ib_break: M32R/D. (line 61)
+* use_mon_code: M32R/D. (line 57)
+* user-defined command: Define. (line 6)
+* user-defined macros: Macros. (line 52)
+* user-defined variables: Convenience Vars. (line 6)
+* v (SingleKey TUI key): TUI Single Key Mode. (line 34)
+* value: Parameters In Python.
+ (line 66)
+* value history: Value History. (line 6)
+* value on LazyString: Lazy Strings In Python.
+ (line 21)
+* values from inferior, with Python: Values From Inferior.
+ (line 6)
+* variable name conflict: Variables. (line 36)
+* variable object debugging info: Debugging Output. (line 185)
+* variable objects in GDB/MI: GDB/MI Variable Objects.
+ (line 9)
+* variable values, wrong: Variables. (line 58)
+* variables, readline: Readline Init File Syntax.
+ (line 34)
+* variables, setting: Assignment. (line 16)
+* vAttach packet: Packets. (line 331)
+* vCont packet: Packets. (line 351)
+* vCont? packet: Packets. (line 393)
+* vector unit: Vector Unit. (line 6)
+* vector, auxiliary: OS Information. (line 21)
+* verbose operation: Messages/Warnings. (line 6)
+* verify remote memory image: Memory. (line 123)
+* vFile packet: Packets. (line 404)
+* vFlashDone packet: Packets. (line 452)
+* vFlashErase packet: Packets. (line 408)
+* vFlashWrite packet: Packets. (line 430)
+* virtual functions (C++) display: Print Settings. (line 364)
+* visible: Breakpoints In Python.
+ (line 112)
+* visible-stats: Readline Init File Syntax.
+ (line 179)
+* vKill packet: Packets. (line 460)
+* volatile on Type: Types In Python. (line 95)
+* vRun packet: Packets. (line 473)
+* vStopped packet: Packets. (line 490)
+* VTBL display: Print Settings. (line 364)
+* VxWorks: VxWorks. (line 6)
+* vxworks-timeout: VxWorks. (line 23)
+* w (SingleKey TUI key): TUI Single Key Mode. (line 37)
+* was_attached: Inferiors In Python. (line 27)
+* watch: Set Watchpoints. (line 42)
+* watchdog timer: Maintenance Commands.
+ (line 357)
+* watchpoint annotation: Annotations for Running.
+ (line 50)
+* watchpoints: Breakpoints. (line 20)
+* watchpoints and threads: Set Watchpoints. (line 165)
+* weak alias functions: Calling. (line 58)
+* whatis: Symbols. (line 74)
+* where: Backtrace. (line 34)
+* where to look for shared libraries: Files. (line 369)
+* while: Command Files. (line 86)
+* while-stepping (tracepoints): Tracepoint Actions. (line 97)
+* wild pointer, interpreting: Print Settings. (line 79)
+* winheight: TUI Commands. (line 80)
+* word completion: Completion. (line 6)
+* working directory: Source Path. (line 108)
+* working directory (of your program): Working Directory. (line 6)
+* working language: Languages. (line 13)
+* WP_ACCESS: Breakpoints In Python.
+ (line 58)
+* WP_READ: Breakpoints In Python.
+ (line 52)
+* WP_WRITE: Breakpoints In Python.
+ (line 55)
+* write: Basic Python. (line 104)
+* write data into object, remote request: General Query Packets.
+ (line 781)
+* write, file-i/o system call: write. (line 6)
+* write_memory on Inferior: Inferiors In Python. (line 51)
+* writing a pretty-printer: Writing a Pretty-Printer.
+ (line 6)
+* writing convenience functions: Functions In Python. (line 6)
+* writing into corefiles: Patching. (line 6)
+* writing into executables: Patching. (line 6)
+* wrong values: Variables. (line 58)
+* x (examine memory): Memory. (line 9)
+* x command, default address: Machine Code. (line 30)
+* X packet: Packets. (line 502)
+* x(examine), and info line: Machine Code. (line 30)
+* Xilinx MicroBlaze: MicroBlaze. (line 6)
+* XInclude: Target Description Format.
+ (line 54)
+* XMD, Xilinx Microprocessor Debugger: MicroBlaze. (line 6)
+* XML parser debugging: Debugging Output. (line 193)
+* yank (C-y): Commands For Killing.
+ (line 59)
+* yank-last-arg (M-. or M-_): Commands For History.
+ (line 64)
+* yank-nth-arg (M-C-y): Commands For History.
+ (line 55)
+* yank-pop (M-y): Commands For Killing.
+ (line 62)
+* yanking text: Readline Killing Commands.
+ (line 6)
+* z packet: Packets. (line 515)
+* Z packets: Packets. (line 515)
+* Z0 packet: Packets. (line 530)
+* z0 packet: Packets. (line 530)
+* Z1 packet: Packets. (line 558)
+* z1 packet: Packets. (line 558)
+* Z2 packet: Packets. (line 580)
+* z2 packet: Packets. (line 580)
+* z3 packet: Packets. (line 595)
+* Z3 packet: Packets. (line 595)
+* Z4 packet: Packets. (line 610)
+* z4 packet: Packets. (line 610)
+* Z8000: Z8000. (line 6)
+* Zilog Z8000 simulator: Z8000. (line 6)
+* {TYPE}: Expressions. (line 43)
+
+
+
+Tag Table:
+Node: Top1966
+Node: Summary5144
+Node: Free Software6946
+Node: Contributors12514
+Node: Sample Session20603
+Node: Invocation27445
+Node: Invoking GDB27989
+Node: File Options30302
+Node: Mode Options33039
+Node: Startup40151
+Ref: Startup-Footnote-142930
+Node: Quitting GDB43039
+Node: Shell Commands43936
+Node: Logging Output44778
+Node: Commands45624
+Node: Command Syntax46262
+Node: Completion48428
+Ref: Completion-Footnote-153634
+Node: Help53794
+Node: Running59035
+Node: Compilation60264
+Node: Starting62241
+Node: Arguments71131
+Node: Environment72401
+Node: Working Directory75669
+Node: Input/Output76777
+Node: Attach78748
+Node: Kill Process81215
+Node: Inferiors and Programs82196
+Node: Threads89441
+Node: Forks98604
+Node: Checkpoint/Restart104914
+Ref: Checkpoint/Restart-Footnote-1109443
+Node: Stopping109478
+Node: Breakpoints110637
+Node: Set Breaks114073
+Ref: Set Breaks-Footnote-1130385
+Node: Set Watchpoints130633
+Node: Set Catchpoints139162
+Node: Delete Breaks148358
+Node: Disabling150294
+Node: Conditions153147
+Node: Break Commands158096
+Node: Save Breakpoints161320
+Node: Error in Breakpoints162496
+Node: Breakpoint-related Warnings163227
+Node: Continuing and Stepping165554
+Node: Signals174914
+Ref: extra signal information179186
+Node: Thread Stops180689
+Node: All-Stop Mode181788
+Node: Non-Stop Mode185686
+Node: Background Execution189163
+Node: Thread-Specific Breakpoints191732
+Node: Interrupted System Calls193054
+Node: Observer Mode194568
+Node: Reverse Execution198007
+Ref: Reverse Execution-Footnote-1202634
+Ref: Reverse Execution-Footnote-2203261
+Node: Process Record and Replay203311
+Node: Stack210558
+Node: Frames212051
+Node: Backtrace214803
+Ref: Backtrace-Footnote-1220016
+Node: Selection220204
+Node: Frame Info223068
+Node: Source225399
+Node: List226465
+Node: Specify Location229078
+Node: Edit232724
+Ref: Edit-Footnote-1234199
+Node: Search234434
+Node: Source Path235242
+Ref: set substitute-path241609
+Node: Machine Code243830
+Node: Data250504
+Node: Expressions253174
+Node: Ambiguous Expressions255266
+Node: Variables258500
+Node: Arrays263003
+Node: Output Formats265534
+Ref: Output Formats-Footnote-1268722
+Node: Memory268879
+Node: Auto Display275033
+Node: Print Settings279575
+Node: Pretty Printing293179
+Node: Pretty-Printer Introduction293692
+Node: Pretty-Printer Example295447
+Node: Pretty-Printer Commands296225
+Node: Value History298649
+Node: Convenience Vars301070
+Node: Registers305805
+Ref: Registers-Footnote-1310482
+Node: Floating Point Hardware310877
+Node: Vector Unit311409
+Node: OS Information311796
+Node: Memory Region Attributes314441
+Node: Dump/Restore Files319111
+Node: Core File Generation321416
+Node: Character Sets322650
+Node: Caching Remote Data329015
+Ref: Caching Remote Data-Footnote-1331280
+Node: Searching Memory331518
+Node: Optimized Code334395
+Node: Inline Functions336005
+Node: Macros338975
+Node: Tracepoints346078
+Node: Set Tracepoints348139
+Node: Create and Delete Tracepoints351077
+Node: Enable and Disable Tracepoints355965
+Node: Tracepoint Passcounts356749
+Node: Tracepoint Conditions358176
+Node: Trace State Variables359870
+Node: Tracepoint Actions362060
+Node: Listing Tracepoints367400
+Node: Listing Static Tracepoint Markers368521
+Node: Starting and Stopping Trace Experiments370367
+Node: Tracepoint Restrictions374781
+Node: Analyze Collected Data378534
+Node: tfind379839
+Node: tdump384261
+Node: save tracepoints386776
+Node: Tracepoint Variables387272
+Node: Trace Files388400
+Node: Overlays389858
+Node: How Overlays Work390578
+Ref: A code overlay393138
+Node: Overlay Commands396576
+Node: Automatic Overlay Debugging400766
+Node: Overlay Sample Program402907
+Node: Languages404667
+Node: Setting405830
+Node: Filenames407532
+Node: Manually408343
+Node: Automatically409552
+Node: Show410613
+Node: Checks411935
+Node: Type Checking413325
+Node: Range Checking416058
+Node: Supported Languages418459
+Node: C419720
+Node: C Operators421011
+Node: C Constants425330
+Node: C Plus Plus Expressions427734
+Node: C Defaults431277
+Node: C Checks431960
+Node: Debugging C432683
+Node: Debugging C Plus Plus433167
+Node: Decimal Floating Point436354
+Node: D437613
+Node: Objective-C437879
+Node: Method Names in Commands438341
+Node: The Print Command with Objective-C440036
+Node: OpenCL C440687
+Node: OpenCL C Datatypes440962
+Node: OpenCL C Expressions441337
+Node: OpenCL C Operators441694
+Node: Fortran441926
+Node: Fortran Operators442648
+Node: Fortran Defaults443504
+Node: Special Fortran Commands443889
+Node: Pascal444395
+Node: Modula-2444910
+Node: M2 Operators445885
+Node: Built-In Func/Proc448884
+Node: M2 Constants451745
+Node: M2 Types453346
+Node: M2 Defaults456565
+Node: Deviations457165
+Node: M2 Checks458266
+Node: M2 Scope459084
+Node: GDB/M2460108
+Node: Ada461020
+Node: Ada Mode Intro462083
+Node: Omissions from Ada463993
+Node: Additions to Ada468347
+Node: Stopping Before Main Program472277
+Node: Ada Tasks472806
+Node: Ada Tasks and Core Files479219
+Node: Ravenscar Profile480137
+Node: Ada Glitches481207
+Node: Unsupported Languages484001
+Node: Symbols484691
+Node: Altering499089
+Node: Assignment500058
+Node: Jumping503163
+Node: Signaling505298
+Node: Returning506429
+Node: Calling509781
+Node: Patching512808
+Node: GDB Files513885
+Node: Files514530
+Ref: Shared Libraries527365
+Ref: Files-Footnote-1538718
+Node: Separate Debug Files538893
+Node: Index Files550463
+Node: Symbol Errors551806
+Node: Data Files555419
+Node: Targets556375
+Node: Active Targets557855
+Node: Target Commands558929
+Ref: load563202
+Node: Byte Order564183
+Node: Remote Debugging565160
+Node: Connecting566422
+Node: File Transfer571362
+Node: Server572302
+Ref: Monitor Commands for gdbserver579952
+Ref: Server-Footnote-1584606
+Node: Remote Configuration584726
+Ref: set remotebreak585750
+Ref: set remote hardware-watchpoint-limit587214
+Ref: set remote hardware-breakpoint-limit587214
+Ref: set remote exec-file587496
+Node: Remote Stub593764
+Node: Stub Contents596661
+Node: Bootstrapping598772
+Node: Debug Session602581
+Node: Configurations604141
+Node: Native604910
+Node: HP-UX605545
+Node: BSD libkvm Interface605834
+Node: SVR4 Process Information606905
+Node: DJGPP Native610335
+Node: Cygwin Native616915
+Node: Non-debug DLL Symbols620864
+Node: Hurd Native625412
+Node: Neutrino630675
+Node: Darwin631065
+Node: Embedded OS632323
+Node: VxWorks632799
+Node: VxWorks Connection635016
+Node: VxWorks Download635950
+Node: VxWorks Attach637685
+Node: Embedded Processors638083
+Node: ARM639262
+Node: M32R/D643383
+Node: M68K645085
+Node: MicroBlaze645378
+Node: MIPS Embedded646828
+Node: OpenRISC 1000651778
+Node: PowerPC Embedded654633
+Node: PA658261
+Node: Sparclet658550
+Node: Sparclet File660034
+Node: Sparclet Connection660914
+Node: Sparclet Download661392
+Node: Sparclet Execution662441
+Node: Sparclite663032
+Node: Z8000663407
+Node: AVR664791
+Node: CRIS665154
+Node: Super-H666132
+Node: Architectures667247
+Node: i386667669
+Node: A29K668351
+Node: Alpha669190
+Node: MIPS669323
+Node: HPPA671947
+Node: SPU672466
+Node: PowerPC674654
+Node: Controlling GDB675372
+Node: Prompt676198
+Node: Editing676977
+Node: Command History677920
+Node: Screen Size681324
+Node: Numbers683158
+Node: ABI685135
+Node: Messages/Warnings688064
+Ref: confirmation requests689490
+Node: Debugging Output690697
+Node: Other Misc Settings697255
+Node: Extending GDB698282
+Node: Sequences699773
+Node: Define700368
+Node: Hooks703981
+Node: Command Files706348
+Node: Output711418
+Node: Python716351
+Node: Python Commands717270
+Node: Python API718945
+Node: Basic Python720753
+Node: Exception Handling727724
+Node: Values From Inferior730223
+Node: Types In Python738733
+Node: Pretty Printing API746823
+Node: Selecting Pretty-Printers750722
+Node: Writing a Pretty-Printer753055
+Node: Inferiors In Python758369
+Node: Events In Python761285
+Node: Threads In Python765736
+Node: Commands In Python768367
+Node: Parameters In Python777183
+Node: Functions In Python782638
+Node: Progspaces In Python784751
+Node: Objfiles In Python786113
+Node: Frames In Python788045
+Node: Blocks In Python792273
+Node: Symbols In Python794477
+Node: Symbol Tables In Python801197
+Node: Breakpoints In Python803734
+Node: Lazy Strings In Python810585
+Node: Auto-loading812859
+Node: objfile-gdb.py file814755
+Node: .debug_gdb_scripts section816010
+Node: Which flavor to choose?817387
+Node: Python modules819204
+Node: gdb.printing819512
+Node: gdb.types820587
+Node: Interpreters821574
+Node: TUI823673
+Node: TUI Overview824640
+Node: TUI Keys827073
+Node: TUI Single Key Mode829377
+Node: TUI Commands830252
+Node: TUI Configuration832636
+Node: Emacs833932
+Node: GDB/MI839409
+Node: GDB/MI General Design841257
+Node: Context management843780
+Node: Asynchronous and non-stop modes846915
+Node: Thread groups848907
+Node: GDB/MI Command Syntax851185
+Node: GDB/MI Input Syntax851428
+Node: GDB/MI Output Syntax852982
+Node: GDB/MI Compatibility with CLI856554
+Node: GDB/MI Development and Front Ends857291
+Node: GDB/MI Output Records858948
+Node: GDB/MI Result Records859320
+Node: GDB/MI Stream Records860326
+Node: GDB/MI Async Records861591
+Node: GDB/MI Frame Information867888
+Node: GDB/MI Thread Information868966
+Node: GDB/MI Ada Exception Information869945
+Node: GDB/MI Simple Examples870368
+Node: GDB/MI Command Description Format872545
+Node: GDB/MI Breakpoint Commands873425
+Node: GDB/MI Program Context891421
+Node: GDB/MI Thread Commands895689
+Node: GDB/MI Program Execution899642
+Node: GDB/MI Stack Manipulation911423
+Node: GDB/MI Variable Objects922325
+Ref: -var-set-format932057
+Ref: -var-list-children933175
+Ref: -var-update941352
+Ref: -var-set-frozen944049
+Ref: -var-set-update-range944845
+Ref: -var-set-visualizer945375
+Node: GDB/MI Data Manipulation946872
+Node: GDB/MI Tracepoint Commands964457
+Node: GDB/MI Symbol Query971786
+Node: GDB/MI File Commands972475
+Node: GDB/MI Target Manipulation975812
+Node: GDB/MI File Transfer Commands982034
+Node: GDB/MI Miscellaneous Commands983356
+Ref: -interpreter-exec992888
+Node: Annotations995197
+Node: Annotations Overview996116
+Node: Server Prefix998579
+Node: Prompting999313
+Node: Errors1000830
+Node: Invalidation1001726
+Node: Annotations for Running1002203
+Node: Source Annotations1003723
+Node: JIT Interface1004648
+Node: Declarations1006366
+Node: Registering Code1007753
+Node: Unregistering Code1008725
+Node: GDB Bugs1009326
+Node: Bug Criteria1010055
+Node: Bug Reporting1010932
+Node: Command Line Editing1018555
+Node: Introduction and Notation1019207
+Node: Readline Interaction1020827
+Node: Readline Bare Essentials1022016
+Node: Readline Movement Commands1023803
+Node: Readline Killing Commands1024766
+Node: Readline Arguments1026684
+Node: Searching1027726
+Node: Readline Init File1029875
+Node: Readline Init File Syntax1030938
+Node: Conditional Init Constructs1042870
+Node: Sample Init File1045401
+Node: Bindable Readline Commands1048516
+Node: Commands For Moving1049571
+Node: Commands For History1050430
+Node: Commands For Text1053552
+Node: Commands For Killing1056276
+Node: Numeric Arguments1058416
+Node: Commands For Completion1059553
+Node: Keyboard Macros1061095
+Node: Miscellaneous Commands1061664
+Node: Readline vi Mode1065023
+Node: Using History Interactively1065940
+Node: History Interaction1066442
+Node: Event Designators1067864
+Node: Word Designators1068797
+Node: Modifiers1070434
+Node: In Memoriam1071659
+Node: Formatting Documentation1072542
+Ref: Formatting Documentation-Footnote-11075879
+Node: Installing GDB1075955
+Node: Requirements1076527
+Ref: Expat1077096
+Node: Running Configure1079541
+Node: Separate Objdir1083170
+Node: Config Names1086090
+Node: Configure Options1087547
+Node: System-wide configuration1089917
+Node: Maintenance Commands1091212
+Ref: maint info breakpoints1092396
+Node: Remote Protocol1106431
+Node: Overview1107020
+Ref: Binary Data1109582
+Node: Packets1111841
+Ref: thread-id syntax1112741
+Ref: extended mode1114186
+Ref: bc1115907
+Ref: bs1116117
+Ref: read registers packet1117543
+Ref: cycle step packet1119387
+Ref: write register packet1121263
+Ref: step with signal packet1122170
+Ref: vStopped packet1128451
+Ref: X packet1128794
+Ref: insert breakpoint or watchpoint packet1129080
+Node: Stop Reply Packets1131842
+Node: General Query Packets1136582
+Ref: QNonStop1145522
+Ref: QPassSignals1146146
+Ref: qSearch memory1148223
+Ref: QStartNoAckMode1148721
+Ref: qSupported1149251
+Ref: multiprocess extensions1158193
+Ref: qXfer read1162023
+Ref: qXfer auxiliary vector read1162517
+Ref: qXfer target description read1162866
+Ref: qXfer library list read1163310
+Ref: qXfer memory map read1163956
+Ref: qXfer sdata read1164342
+Ref: qXfer siginfo read1164806
+Ref: qXfer spu read1165202
+Ref: qXfer threads read1165725
+Ref: qXfer traceframe info read1166127
+Ref: qXfer osdata read1166544
+Ref: qXfer write1167746
+Ref: qXfer siginfo write1168303
+Ref: qXfer spu write1168699
+Ref: General Query Packets-Footnote-11170786
+Node: Architecture-Specific Protocol Details1171113
+Node: Tracepoint Packets1172626
+Node: Host I/O Packets1189073
+Node: Interrupts1193215
+Node: Notification Packets1195118
+Node: Remote Non-Stop1197389
+Node: Packet Acknowledgment1201648
+Node: Examples1203763
+Node: File-I/O Remote Protocol Extension1204389
+Node: File-I/O Overview1204851
+Node: Protocol Basics1207048
+Node: The F Request Packet1209280
+Node: The F Reply Packet1210181
+Node: The Ctrl-C Message1211099
+Node: Console I/O1212728
+Node: List of Supported Calls1213945
+Node: open1214307
+Node: close1216801
+Node: read1217183
+Node: write1217790
+Node: lseek1218557
+Node: rename1219435
+Node: unlink1220831
+Node: stat/fstat1221770
+Node: gettimeofday1222657
+Node: isatty1223092
+Node: system1223688
+Node: Protocol-specific Representation of Datatypes1225230
+Node: Integral Datatypes1225607
+Node: Pointer Values1226414
+Node: Memory Transfer1227122
+Node: struct stat1227742
+Node: struct timeval1229944
+Node: Constants1230461
+Node: Open Flags1230910
+Node: mode_t Values1231251
+Node: Errno Values1231743
+Node: Lseek Flags1232554
+Node: Limits1232739
+Node: File-I/O Examples1233099
+Node: Library List Format1234215
+Node: Memory Map Format1236979
+Node: Thread List Format1239539
+Node: Traceframe Info Format1240357
+Node: Agent Expressions1241814
+Node: General Bytecode Design1244635
+Node: Bytecode Descriptions1249435
+Node: Using Agent Expressions1261581
+Node: Varying Target Capabilities1263559
+Node: Rationale1264721
+Node: Target Descriptions1272107
+Node: Retrieving Descriptions1274167
+Node: Target Description Format1275252
+Node: Predefined Target Types1284302
+Node: Standard Target Features1285687
+Node: ARM Features1287458
+Node: i386 Features1288950
+Node: MIPS Features1290054
+Node: M68K Features1290999
+Node: PowerPC Features1291662
+Node: Operating System Information1292946
+Node: Process list1293784
+Node: Trace File Format1294846
+Node: Copying1296827
+Node: GNU Free Documentation License1334414
+Node: Index1359572
+
+End Tag Table