diff options
Diffstat (limited to 'share/info/gdb.info')
-rw-r--r-- | share/info/gdb.info | 39097 |
1 files changed, 0 insertions, 39097 deletions
diff --git a/share/info/gdb.info b/share/info/gdb.info deleted file mode 100644 index 5838703..0000000 --- a/share/info/gdb.info +++ /dev/null @@ -1,39097 +0,0 @@ -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 |