Index: gdb/doc/gdb.info-4 |
diff --git a/gdb/doc/gdb.info-4 b/gdb/doc/gdb.info-4 |
index ed5c1bc7af2e18ecc5bc77e5273bdb57d9426190..e53a5c0ab4768fe00dd587898ac97d12d3735cea 100644 |
--- a/gdb/doc/gdb.info-4 |
+++ b/gdb/doc/gdb.info-4 |
@@ -7,7 +7,7 @@ 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. |
+2010 2011, 2012 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 |
@@ -23,11 +23,11 @@ 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.4.1. |
+Source-Level Debugger' for GDB (GDB) Version 7.5.1. |
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. |
+2010 2011, 2012 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 |
@@ -41,6 +41,1275 @@ this GNU Manual. Buying copies from GNU Press supports the FSF in |
developing GNU and promoting software freedom." |
+File: gdb.info, Node: objfile-gdb.py file, Next: dotdebug_gdb_scripts section, Up: Python 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' (we call it SCRIPT-NAME below), 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, then GDB will look for SCRIPT-NAME file |
+in all of the directories as specified below. |
+ |
+ Note that loading of this script file also requires accordingly |
+configured `auto-load safe-path' (*note Auto-loading safe path::). |
+ |
+ For object files using `.exe' suffix GDB tries to load first the |
+scripts normally according to its `.exe' filename. But if no scripts |
+are found GDB also tries script filenames matching the object file |
+without its `.exe' suffix. This `.exe' stripping is case insensitive |
+and it is attempted on any platform. This makes the script filenames |
+compatible between Unix and MS-Windows hosts. |
+ |
+`set auto-load scripts-directory [DIRECTORIES]' |
+ Control GDB auto-loaded scripts location. Multiple directory |
+ entries may be delimited by the host platform path separator in use |
+ (`:' on Unix, `;' on MS-Windows and MS-DOS). |
+ |
+ Each entry here needs to be covered also by the security setting |
+ `set auto-load safe-path' (*note set auto-load safe-path::). |
+ |
+ This variable defaults to `$debugdir:$datadir/auto-load'. The |
+ default `set auto-load safe-path' value can be also overriden by |
+ GDB configuration option `--with-auto-load-dir'. |
+ |
+ Any reference to `$debugdir' will get replaced by |
+ DEBUG-FILE-DIRECTORY value (*note Separate Debug Files::) and any |
+ reference to `$datadir' will get replaced by DATA-DIRECTORY which |
+ is determined at GDB startup (*note Data Files::). `$debugdir' and |
+ `$datadir' must be placed as a directory component -- either alone |
+ or delimited by `/' or `\' directory separators, depending on the |
+ host platform. |
+ |
+ The list of directories uses path separator (`:' on GNU and Unix |
+ systems, `;' on MS-Windows and MS-DOS) to separate directories, |
+ similarly to the `PATH' environment variable. |
+ |
+`show auto-load scripts-directory' |
+ Show GDB auto-loaded scripts location. |
+ |
+ 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: dotdebug_gdb_scripts section, Next: Which flavor to choose?, Prev: objfile-gdb.py file, Up: Python 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. |
+ |
+ Note that loading of this script file also requires accordingly |
+configured `auto-load safe-path' (*note Auto-loading safe path::). |
+ |
+ 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: dotdebug_gdb_scripts section, Up: Python 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: Python Auto-loading, Up: Python |
+ |
+23.2.4 Python modules |
+--------------------- |
+ |
+GDB comes with several modules to assist writing Python code. |
+ |
+* Menu: |
+ |
+* gdb.printing:: Building and registering pretty-printers. |
+* gdb.types:: Utilities for working with types. |
+* gdb.prompt:: Utilities for prompt value substitution. |
+ |
+ |
+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. |
+ |
+`FlagEnumerationPrinter (NAME)' |
+ A pretty-printer which handles printing of `enum' values. Unlike |
+ GDB's built-in `enum' printing, this printer attempts to work |
+ properly when there is some overlap between the enumeration |
+ constants. NAME is the name of the printer and also the name of |
+ the `enum' type to look up. |
+ |
+`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, Next: gdb.prompt, 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. |
+ |
+`deep_items (TYPE)' |
+ Returns a Python iterator similar to the standard |
+ `gdb.Type.iteritems' method, except that the iterator returned by |
+ `deep_items' will recursively traverse anonymous struct or union |
+ fields. For example: |
+ |
+ struct A |
+ { |
+ int a; |
+ union { |
+ int b0; |
+ int b1; |
+ }; |
+ }; |
+ |
+ Then in GDB: |
+ (gdb) python import gdb.types |
+ (gdb) python struct_a = gdb.lookup_type("struct A") |
+ (gdb) python print struct_a.keys () |
+ {['a', '']} |
+ (gdb) python print [k for k,v in gdb.types.deep_items(struct_a)] |
+ {['a', 'b0', 'b1']} |
+ |
+ |
+ |
+File: gdb.info, Node: gdb.prompt, Prev: gdb.types, Up: Python modules |
+ |
+23.2.4.3 gdb.prompt |
+................... |
+ |
+This module provides a method for prompt value-substitution. |
+ |
+`substitute_prompt (STRING)' |
+ Return STRING with escape sequences substituted by values. Some |
+ escape sequences take arguments. You can specify arguments inside |
+ "{}" immediately following the escape sequence. |
+ |
+ The escape sequences you can pass to this function are: |
+ |
+ `\\' |
+ Substitute a backslash. |
+ |
+ `\e' |
+ Substitute an ESC character. |
+ |
+ `\f' |
+ Substitute the selected frame; an argument names a frame |
+ parameter. |
+ |
+ `\n' |
+ Substitute a newline. |
+ |
+ `\p' |
+ Substitute a parameter's value; the argument names the |
+ parameter. |
+ |
+ `\r' |
+ Substitute a carriage return. |
+ |
+ `\t' |
+ Substitute the selected thread; an argument names a thread |
+ parameter. |
+ |
+ `\v' |
+ Substitute the version of GDB. |
+ |
+ `\w' |
+ Substitute the current working directory. |
+ |
+ `\[' |
+ Begin a sequence of non-printing characters. These sequences |
+ are typically used with the ESC character, and are not |
+ counted in the string length. Example: |
+ "\[\e[0;34m\](gdb)\[\e[0m\]" will return a blue-colored |
+ "(gdb)" prompt where the length is five. |
+ |
+ `\]' |
+ End a sequence of non-printing characters. |
+ |
+ For example: |
+ |
+ substitute_prompt (``frame: \f, |
+ print arguments: \p{print frame-arguments}'') |
+ |
+will return the string: |
+ |
+ |
+ "frame: main, print arguments: scalars" |
+ |
+ |
+File: gdb.info, Node: Aliases, Prev: Python, Up: Extending GDB |
+ |
+23.3 Creating new spellings of existing commands |
+================================================ |
+ |
+It is often useful to define alternate spellings of existing commands. |
+For example, if a new GDB command defined in Python has a long name to |
+type, it is handy to have an abbreviated version of it that involves |
+less typing. |
+ |
+ GDB itself uses aliases. For example `s' is an alias of the `step' |
+command even though it is otherwise an ambiguous abbreviation of other |
+commands like `set' and `show'. |
+ |
+ Aliases are also used to provide shortened or more common versions |
+of multi-word commands. For example, GDB provides the `tty' alias of |
+the `set inferior-tty' command. |
+ |
+ You can define a new alias with the `alias' command. |
+ |
+`alias [-a] [--] ALIAS = COMMAND' |
+ |
+ ALIAS specifies the name of the new alias. Each word of ALIAS must |
+consist of letters, numbers, dashes and underscores. |
+ |
+ COMMAND specifies the name of an existing command that is being |
+aliased. |
+ |
+ The `-a' option specifies that the new alias is an abbreviation of |
+the command. Abbreviations are not shown in command lists displayed by |
+the `help' command. |
+ |
+ The `--' option specifies the end of options, and is useful when |
+ALIAS begins with a dash. |
+ |
+ Here is a simple example showing how to make an abbreviation of a |
+command so that there is less to type. Suppose you were tired of |
+typing `disas', the current shortest unambiguous abbreviation of the |
+`disassemble' command and you wanted an even shorter version named `di'. |
+The following will accomplish this. |
+ |
+ (gdb) alias -a di = disas |
+ |
+ Note that aliases are different from user-defined commands. With a |
+user-defined command, you also need to write documentation for it with |
+the `document' command. An alias automatically picks up the |
+documentation of the existing command. |
+ |
+ Here is an example where we make `elms' an abbreviation of |
+`elements' in the `set print elements' command. This is to show that |
+you can make an abbreviation of any part of a command. |
+ |
+ (gdb) alias -a set print elms = set print elements |
+ (gdb) alias -a show print elms = show print elements |
+ (gdb) set p elms 20 |
+ (gdb) show p elms |
+ Limit on string chars or array elements to print is 200. |
+ |
+ Note that if you are defining an alias of a `set' command, and you |
+want to have an alias for the corresponding `show' command, then you |
+need to define the latter separately. |
+ |
+ Unambiguously abbreviated commands are allowed in COMMAND and ALIAS, |
+just as they are normally. |
+ |
+ (gdb) alias -a set pr elms = set p ele |
+ |
+ Finally, here is an example showing the creation of a one word alias |
+for a more complex command. This creates alias `spe' of the command |
+`set print elements'. |
+ |
+ (gdb) alias spe = set print elements |
+ (gdb) spe 20 |
+ |
+ |
+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 `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 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 Ada Tasking 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 |
@@ -363,8 +1632,9 @@ activity (e.g., target stopped). |
`solib-event' |
The inferior has stopped due to a library being loaded or |
- unloaded. This can only happen when `stop-on-solib-events' |
- (*note Files::) is set. |
+ unloaded. This can happen when `stop-on-solib-events' (*note |
+ Files::) is set or when a `catch load' or `catch unload' |
+ catchpoint is in use (*note Set Catchpoints::). |
`fork' |
The inferior has forked. This is reported when `catch fork' |
@@ -921,7 +2191,7 @@ Synopsis |
-break-insert [ -t ] [ -h ] [ -f ] [ -d ] [ -a ] |
[ -c CONDITION ] [ -i IGNORE-COUNT ] |
- [ -p THREAD ] [ LOCATION ] |
+ [ -p THREAD-ID ] [ LOCATION ] |
If specified, LOCATION, can be one of: |
@@ -941,12 +2211,6 @@ If specified, LOCATION, can be one of: |
`-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 |
@@ -960,6 +2224,15 @@ If specified, LOCATION, can be one of: |
Create a tracepoint. *Note Tracepoints::. When this parameter is |
used together with `-h', a fast tracepoint is created. |
+`-c CONDITION' |
+ Make the breakpoint conditional on CONDITION. |
+ |
+`-i IGNORE-COUNT' |
+ Initialize the IGNORE-COUNT. |
+ |
+`-p THREAD-ID' |
+ Restrict the breakpoint to the specified THREAD-ID. |
+ |
Result |
...... |
@@ -982,8 +2255,8 @@ greater for -break-info or -break-list which use the same output). |
GDB Command |
........... |
-The corresponding GDB commands are `break', `tbreak', `hbreak', |
-`thbreak', and `rbreak'. |
+The corresponding GDB commands are `break', `tbreak', `hbreak', and |
+`thbreak'. |
Example |
....... |
@@ -1012,11 +2285,6 @@ Example |
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 |
------------------------- |
@@ -2643,7 +3911,10 @@ are: |
`type' |
The varobj's type. This is a string representation of the type, as |
- would be printed by the GDB CLI. |
+ would be printed by the GDB CLI. If `print object' (*note set |
+ print object: Print Settings.) is set to `on', the _actual_ |
+ (derived) type of the object is shown rather than the _declared_ |
+ one. |
`thread-id' |
If a variable object is bound to a specific thread, then this is |
@@ -2791,7 +4062,9 @@ NUMCHILD |
will be 0. |
TYPE |
- The type of the child. |
+ The type of the child. If `print object' (*note set print object: |
+ Print Settings.) is set to `on', the _actual_ (derived) type of |
+ the object is shown rather than the _declared_ one. |
VALUE |
If values were requested, this is the value. |
@@ -3013,6 +4286,12 @@ only the selected range of children will be reported. |
changed, then this will be the string `true'; otherwise it will be |
`false'. |
+ When a varobj's type changes, its children are also likely to have |
+ become incorrect. Therefore, the varobj's children are |
+ automatically deleted when this attribute is `true'. Also, the |
+ varobj's update range, when set using the `-var-set-update-range' |
+ command, is unset. |
+ |
`new_type' |
If the varobj's type changed, then this field will be present and |
will hold the new type. |
@@ -4751,6 +6030,78 @@ Example |
threads=[{id="1",target-id="Thread 0xb7e14b90",cores=[1]}, |
{id="2",target-id="Thread 0xb7e14b90",cores=[2]}]},...] |
+The `-info-os' Command |
+---------------------- |
+ |
+Synopsis |
+........ |
+ |
+ -info-os [ TYPE ] |
+ |
+ If no argument is supplied, the command returns a table of available |
+operating-system-specific information types. If one of these types is |
+supplied as an argument TYPE, then the command returns a table of data |
+of that type. |
+ |
+ The types of information available depend on the target operating |
+system. |
+ |
+GDB Command |
+........... |
+ |
+The corresponding GDB command is `info os'. |
+ |
+Example |
+....... |
+ |
+When run on a GNU/Linux system, the output will look something like |
+this: |
+ |
+ gdb |
+ -info-os |
+ ^done,OSDataTable={nr_rows="9",nr_cols="3", |
+ hdr=[{width="10",alignment="-1",col_name="col0",colhdr="Type"}, |
+ {width="10",alignment="-1",col_name="col1",colhdr="Description"}, |
+ {width="10",alignment="-1",col_name="col2",colhdr="Title"}], |
+ body=[item={col0="processes",col1="Listing of all processes", |
+ col2="Processes"}, |
+ item={col0="procgroups",col1="Listing of all process groups", |
+ col2="Process groups"}, |
+ item={col0="threads",col1="Listing of all threads", |
+ col2="Threads"}, |
+ item={col0="files",col1="Listing of all file descriptors", |
+ col2="File descriptors"}, |
+ item={col0="sockets",col1="Listing of all internet-domain sockets", |
+ col2="Sockets"}, |
+ item={col0="shm",col1="Listing of all shared-memory regions", |
+ col2="Shared-memory regions"}, |
+ item={col0="semaphores",col1="Listing of all semaphores", |
+ col2="Semaphores"}, |
+ item={col0="msg",col1="Listing of all message queues", |
+ col2="Message queues"}, |
+ item={col0="modules",col1="Listing of all loaded kernel modules", |
+ col2="Kernel modules"}]} |
+ gdb |
+ -info-os processes |
+ ^done,OSDataTable={nr_rows="190",nr_cols="4", |
+ hdr=[{width="10",alignment="-1",col_name="col0",colhdr="pid"}, |
+ {width="10",alignment="-1",col_name="col1",colhdr="user"}, |
+ {width="10",alignment="-1",col_name="col2",colhdr="command"}, |
+ {width="10",alignment="-1",col_name="col3",colhdr="cores"}], |
+ body=[item={col0="1",col1="root",col2="/sbin/init",col3="0"}, |
+ item={col0="2",col1="root",col2="[kthreadd]",col3="1"}, |
+ item={col0="3",col1="root",col2="[ksoftirqd/0]",col3="0"}, |
+ ... |
+ item={col0="26446",col1="stan",col2="bash",col3="0"}, |
+ item={col0="28152",col1="stan",col2="bash",col3="1"}]} |
+ (gdb) |
+ |
+ (Note that the MI output here includes a `"Title"' column that does |
+not appear in command-line `info os'; this column is useful for MI |
+clients that want to enumerate the types of data, such as in a popup |
+menu, but is needless clutter on the command line, and `info os' omits |
+it.) |
+ |
The `-add-inferior' Command |
--------------------------- |
@@ -5166,7 +6517,7 @@ 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 |
+File: gdb.info, Node: JIT Interface, Next: In-Process Agent, Prev: Annotations, Up: Top |
29 JIT Compilation Interface |
**************************** |
@@ -5402,9 +6753,228 @@ the previous frame. Both have a callback (`target_read') to read bytes |
off the target's address space. |
-File: gdb.info, Node: GDB Bugs, Next: Command Line Editing, Prev: JIT Interface, Up: Top |
+File: gdb.info, Node: In-Process Agent, Next: GDB Bugs, Prev: JIT Interface, Up: Top |
+ |
+30 In-Process Agent |
+******************* |
+ |
+The traditional debugging model is conceptually low-speed, but works |
+fine, because most bugs can be reproduced in debugging-mode execution. |
+However, as multi-core or many-core processors are becoming mainstream, |
+and multi-threaded programs become more and more popular, there should |
+be more and more bugs that only manifest themselves at normal-mode |
+execution, for example, thread races, because debugger's interference |
+with the program's timing may conceal the bugs. On the other hand, 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. |
+ |
+ Therefore, traditional debugging model is too intrusive to reproduce |
+some bugs. In order to reduce the interference with the program, we can |
+reduce the number of operations performed by debugger. The "In-Process |
+Agent", a shared library, is running within the same process with |
+inferior, and is able to perform some debugging operations itself. As |
+a result, debugger is only involved when necessary, and performance of |
+debugging can be improved accordingly. Note that interference with |
+program can be reduced but can't be removed completely, because the |
+in-process agent will still stop or slow down the program. |
+ |
+ The in-process agent can interpret and execute Agent Expressions |
+(*note Agent Expressions::) during performing debugging operations. The |
+agent expressions can be used for different purposes, such as collecting |
+data in tracepoints, and condition evaluation in breakpoints. |
+ |
+ You can control whether the in-process agent is used as an aid for |
+debugging with the following commands: |
+ |
+`set agent on' |
+ Causes the in-process agent to perform some operations on behalf |
+ of the debugger. Just which operations requested by the user will |
+ be done by the in-process agent depends on the its capabilities. |
+ For example, if you request to evaluate breakpoint conditions in |
+ the in-process agent, and the in-process agent has such capability |
+ as well, then breakpoint conditions will be evaluated in the |
+ in-process agent. |
+ |
+`set agent off' |
+ Disables execution of debugging operations by the in-process |
+ agent. All of the operations will be performed by GDB. |
+ |
+`show agent' |
+ Display the current setting of execution of debugging operations by |
+ the in-process agent. |
+ |
+* Menu: |
+ |
+* In-Process Agent Protocol:: |
+ |
+ |
+File: gdb.info, Node: In-Process Agent Protocol, Up: In-Process Agent |
+ |
+30.1 In-Process Agent Protocol |
+============================== |
+ |
+The in-process agent is able to communicate with both GDB and GDBserver |
+(*note In-Process Agent::). This section documents the protocol used |
+for communications between GDB or GDBserver and the IPA. In general, |
+GDB or GDBserver sends commands (*note IPA Protocol Commands::) and |
+data to in-process agent, and then in-process agent replies back with |
+the return result of the command, or some other information. The data |
+sent to in-process agent is composed of primitive data types, such as |
+4-byte or 8-byte type, and composite types, which are called objects |
+(*note IPA Protocol Objects::). |
+ |
+* Menu: |
+ |
+* IPA Protocol Objects:: |
+* IPA Protocol Commands:: |
+ |
+ |
+File: gdb.info, Node: IPA Protocol Objects, Next: IPA Protocol Commands, Up: In-Process Agent Protocol |
+ |
+30.1.1 IPA Protocol Objects |
+--------------------------- |
+ |
+The commands sent to and results received from agent may contain some |
+complex data types called "objects". |
+ |
+ The in-process agent is running on the same machine with GDB or |
+GDBserver, so it doesn't have to handle as much differences between two |
+ends as remote protocol (*note Remote Protocol::) tries to handle. |
+However, there are still some differences of two ends in two processes: |
+ |
+ 1. word size. On some 64-bit machines, GDB or GDBserver can be |
+ compiled as a 64-bit executable, while in-process agent is a |
+ 32-bit one. |
+ |
+ 2. ABI. Some machines may have multiple types of ABI, GDB or |
+ GDBserver is compiled with one, and in-process agent is compiled |
+ with the other one. |
+ |
+ Here are the IPA Protocol Objects: |
+ |
+ 1. agent expression object. It represents an agent expression (*note |
+ Agent Expressions::). |
+ |
+ 2. tracepoint action object. It represents a tracepoint action |
+ (*note Tracepoint Action Lists: Tracepoint Actions.) to collect |
+ registers, memory, static trace data and to evaluate expression. |
+ |
+ 3. tracepoint object. It represents a tracepoint (*note |
+ Tracepoints::). |
+ |
+ |
+ The following table describes important attributes of each IPA |
+protocol object: |
+ |
+Name Size Description |
+--------------------------------------------------------------------------- |
+_agent expression |
+object_ |
+length 4 length of bytes code |
+byte code LENGTH contents of byte code |
+_tracepoint action |
+for collecting |
+memory_ |
+'M' 1 type of tracepoint action |
+addr 8 if BASEREG is `-1', ADDR is the |
+ address of the lowest byte to |
+ collect, otherwise ADDR is the |
+ offset of BASEREG for memory |
+ collecting. |
+len 8 length of memory for collecting |
+basereg 4 the register number containing the |
+ starting memory address for |
+ collecting. |
+_tracepoint action |
+for collecting |
+registers_ |
+'R' 1 type of tracepoint action |
+_tracepoint action |
+for collecting static |
+trace data_ |
+'L' 1 type of tracepoint action |
+_tracepoint action |
+for expression |
+evaluation_ |
+'X' 1 type of tracepoint action |
+agent expression length of *Note agent expression object:: |
+_tracepoint object_ |
+number 4 number of tracepoint |
+address 8 address of tracepoint inserted on |
+type 4 type of tracepoint |
+enabled 1 enable or disable of tracepoint |
+step_count 8 step |
+pass_count 8 pass |
+numactions 4 number of tracepoint actions |
+hit count 8 hit count |
+trace frame usage 8 trace frame usage |
+compiled_cond 8 compiled condition |
+orig_size 8 orig size |
+condition 4 if zero if condition is NULL, |
+ condition is otherwise is *Note agent expression |
+ NULL object:: |
+ otherwise |
+ length of |
+ *Note agent |
+ expression |
+ object:: |
+actions variable numactions number of *Note |
+ tracepoint action object:: |
+ |
+ |
+File: gdb.info, Node: IPA Protocol Commands, Prev: IPA Protocol Objects, Up: In-Process Agent Protocol |
+ |
+30.1.2 IPA Protocol Commands |
+---------------------------- |
+ |
+The spaces in each command are delimiters to ease reading this commands |
+specification. They don't exist in real commands. |
+ |
+`FastTrace:TRACEPOINT_OBJECT GDB_JUMP_PAD_HEAD' |
+ Installs a new fast tracepoint described by TRACEPOINT_OBJECT |
+ (*note tracepoint object::). GDB_JUMP_PAD_HEAD, 8-byte long, is |
+ the head of "jumppad", which is used to jump to data collection |
+ routine in IPA finally. |
+ |
+ Replies: |
+ `OK TARGET_ADDRESS GDB_JUMP_PAD_HEAD FJUMP_SIZE FJUMP' |
+ TARGET_ADDRESS is address of tracepoint in the inferior. |
+ GDB_JUMP_PAD_HEAD is updated head of jumppad. Both of |
+ TARGET_ADDRESS and GDB_JUMP_PAD_HEAD are 8-byte long. FJUMP |
+ contains a sequence of instructions jump to jumppad entry. |
+ FJUMP_SIZE, 4-byte long, is the size of FJUMP. |
+ |
+ `E NN' |
+ for an error |
+ |
+ |
+`qTfSTM' |
+ *Note qTfSTM::. |
+ |
+`qTsSTM' |
+ *Note qTsSTM::. |
+ |
+`qTSTMat' |
+ *Note qTSTMat::. |
+ |
+`probe_marker_at:ADDRESS' |
+ Asks in-process agent to probe the marker at ADDRESS. |
+ |
+ Replies: |
+ `E NN' |
+ for an error |
+ |
+`unprobe_marker_at:ADDRESS' |
+ Asks in-process agent to unprobe the marker at ADDRESS. |
+ |
+ |
+File: gdb.info, Node: GDB Bugs, Next: Command Line Editing, Prev: In-Process Agent, Up: Top |
-30 Reporting Bugs in GDB |
+31 Reporting Bugs in GDB |
************************ |
Your bug reports play an essential role in making GDB reliable. |
@@ -5425,7 +6995,7 @@ information that enables us to fix the bug. |
File: gdb.info, Node: Bug Criteria, Next: Bug Reporting, Up: GDB Bugs |
-30.1 Have You Found a Bug? |
+31.1 Have You Found a Bug? |
========================== |
If you are not sure whether you have found a bug, here are some |
@@ -5449,7 +7019,7 @@ guidelines: |
File: gdb.info, Node: Bug Reporting, Prev: Bug Criteria, Up: GDB Bugs |
-30.2 How to Report Bugs |
+31.2 How to Report Bugs |
======================= |
A number of companies and individuals offer support for GNU products. |
@@ -5615,7 +7185,7 @@ to respond to them_ except to chide the sender to report bugs properly. |
File: gdb.info, Node: Command Line Editing, Next: Using History Interactively, Prev: GDB Bugs, Up: Top |
-31 Command Line Editing |
+32 Command Line Editing |
*********************** |
This chapter describes the basic features of the GNU command line |
@@ -5634,7 +7204,7 @@ editing interface. |
File: gdb.info, Node: Introduction and Notation, Next: Readline Interaction, Up: Command Line Editing |
-31.1 Introduction to Line Editing |
+32.1 Introduction to Line Editing |
================================= |
The following paragraphs describe the notation used to represent |
@@ -5670,7 +7240,7 @@ some keyboards. |
File: gdb.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing |
-31.2 Readline Interaction |
+32.2 Readline Interaction |
========================= |
Often during an interactive session you type in a long line of text, |
@@ -5695,7 +7265,7 @@ location of the cursor within the line. |
File: gdb.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction |
-31.2.1 Readline Bare Essentials |
+32.2.1 Readline Bare Essentials |
------------------------------- |
In order to enter characters into the line, simply type them. The typed |
@@ -5743,7 +7313,7 @@ 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 |
+32.2.2 Readline Movement Commands |
--------------------------------- |
The above table describes the most basic keystrokes that you need in |
@@ -5774,7 +7344,7 @@ 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 |
+32.2.3 Readline Killing Commands |
-------------------------------- |
"Killing" text means to delete the text from the line, but to save it |
@@ -5827,7 +7397,7 @@ copy the most-recently-killed text from the kill buffer. |
File: gdb.info, Node: Readline Arguments, Next: Searching, Prev: Readline Killing Commands, Up: Readline Interaction |
-31.2.4 Readline Arguments |
+32.2.4 Readline Arguments |
------------------------- |
You can pass numeric arguments to Readline commands. Sometimes the |
@@ -5848,7 +7418,7 @@ 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 |
+32.2.5 Searching for Commands in the History |
-------------------------------------------- |
Readline provides commands for searching through the command history |
@@ -5889,7 +7459,7 @@ 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 |
+32.3 Readline Init File |
======================= |
Although the Readline library comes with a set of Emacs-like |
@@ -5918,7 +7488,7 @@ incorporating any changes that you might have made to it. |
File: gdb.info, Node: Readline Init File Syntax, Next: Conditional Init Constructs, Up: Readline Init File |
-31.3.1 Readline Init File Syntax |
+32.3.1 Readline Init File Syntax |
-------------------------------- |
There are only a few basic constructs allowed in the Readline init |
@@ -6281,7 +7851,7 @@ Key Bindings |
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 |
+32.3.2 Conditional Init Constructs |
---------------------------------- |
Readline implements a facility similar in spirit to the conditional |
@@ -6341,7 +7911,7 @@ are four parser directives used. |
File: gdb.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File |
-31.3.3 Sample Init File |
+32.3.3 Sample Init File |
----------------------- |
Here is an example of an INPUTRC file. This illustrates key binding, |
@@ -6451,7 +8021,7 @@ variable assignment, and conditional syntax. |
File: gdb.info, Node: Bindable Readline Commands, Next: Readline vi Mode, Prev: Readline Init File, Up: Command Line Editing |
-31.4 Bindable Readline Commands |
+32.4 Bindable Readline Commands |
=============================== |
* Menu: |
@@ -6477,7 +8047,7 @@ as the "region". |
File: gdb.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands |
-31.4.1 Commands For Moving |
+32.4.1 Commands For Moving |
-------------------------- |
`beginning-of-line (C-a)' |
@@ -6511,7 +8081,7 @@ File: gdb.info, Node: Commands For Moving, Next: Commands For History, Up: Bi |
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 |
+32.4.2 Commands For Manipulating The History |
-------------------------------------------- |
`accept-line (Newline or Return)' |
@@ -6589,7 +8159,7 @@ File: gdb.info, Node: Commands For History, Next: Commands For Text, Prev: Co |
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 |
+32.4.3 Commands For Changing Text |
--------------------------------- |
`delete-char (C-d)' |
@@ -6657,7 +8227,7 @@ File: gdb.info, Node: Commands For Text, Next: Commands For Killing, Prev: Co |
File: gdb.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands |
-31.4.4 Killing And Yanking |
+32.4.4 Killing And Yanking |
-------------------------- |
`kill-line (C-k)' |
@@ -6723,7 +8293,7 @@ File: gdb.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Co |
File: gdb.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands |
-31.4.5 Specifying Numeric Arguments |
+32.4.5 Specifying Numeric Arguments |
----------------------------------- |
`digit-argument (M-0, M-1, ... M--)' |
@@ -6746,7 +8316,7 @@ File: gdb.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: |
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 |
+32.4.6 Letting Readline Type For You |
------------------------------------ |
`complete (<TAB>)' |
@@ -6792,7 +8362,7 @@ File: gdb.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: N |
File: gdb.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: Commands For Completion, Up: Bindable Readline Commands |
-31.4.7 Keyboard Macros |
+32.4.7 Keyboard Macros |
---------------------- |
`start-kbd-macro (C-x ()' |
@@ -6810,7 +8380,7 @@ File: gdb.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: Co |
File: gdb.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bindable Readline Commands |
-31.4.8 Some Miscellaneous Commands |
+32.4.8 Some Miscellaneous Commands |
---------------------------------- |
`re-read-init-file (C-x C-r)' |
@@ -6907,7 +8477,7 @@ File: gdb.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bind |
File: gdb.info, Node: Readline vi Mode, Prev: Bindable Readline Commands, Up: Command Line Editing |
-31.5 Readline vi Mode |
+32.5 Readline vi Mode |
===================== |
While the Readline library does not have a full set of `vi' editing |
@@ -6928,7 +8498,7 @@ the standard `vi' movement keys, move to previous history lines with |
File: gdb.info, Node: Using History Interactively, Next: In Memoriam, Prev: Command Line Editing, Up: Top |
-32 Using History Interactively |
+33 Using History Interactively |
****************************** |
This chapter describes how to use the GNU History Library interactively, |
@@ -6944,7 +8514,7 @@ History. |
File: gdb.info, Node: History Interaction, Up: Using History Interactively |
-32.1 History Expansion |
+33.1 History Expansion |
====================== |
The History library provides a history expansion feature that is similar |
@@ -6976,7 +8546,7 @@ appearance of the history expansion character, which is `!' by default. |
File: gdb.info, Node: Event Designators, Next: Word Designators, Up: History Interaction |
-32.1.1 Event Designators |
+33.1.1 Event Designators |
------------------------ |
An event designator is a reference to a command line entry in the |
@@ -7016,7 +8586,7 @@ the current position in the history list. |
File: gdb.info, Node: Word Designators, Next: Modifiers, Prev: Event Designators, Up: History Interaction |
-32.1.2 Word Designators |
+33.1.2 Word Designators |
----------------------- |
Word designators are used to select desired words from the event. A |
@@ -7078,7 +8648,7 @@ previous command is used as the event. |
File: gdb.info, Node: Modifiers, Prev: Word Designators, Up: History Interaction |
-32.1.3 Modifiers |
+33.1.3 Modifiers |
---------------- |
After the optional word designator, you can add a sequence of one or |
@@ -7174,7 +8744,7 @@ 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.4.1/gdb/gdb.info', and it refers to subordinate files matching |
+`gdb-7.5.1/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' |
@@ -7184,7 +8754,7 @@ program, available as part of the GNU Texinfo distribution. |
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.4.1', in the case of version 7.4.1), you can |
+source directory (`gdb-7.5.1', in the case of version 7.5.1), you can |
make the Info file by typing: |
cd gdb |
@@ -7210,7 +8780,7 @@ format. On its own, TeX cannot either read or typeset a Texinfo file. |
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.4.1/gdb') and type: |
+main source directory (for example, to `gdb-7.5.1/gdb') and type: |
make gdb.dvi |
@@ -7218,7 +8788,7 @@ main source directory (for example, to `gdb-7.4.1/gdb') and type: |
---------- Footnotes ---------- |
- (1) In `gdb-7.4.1/gdb/refcard.ps' of the version 7.4.1 release. |
+ (1) In `gdb-7.5.1/gdb/refcard.ps' of the version 7.5.1 release. |
File: gdb.info, Node: Installing GDB, Next: Maintenance Commands, Prev: Formatting Documentation, Up: Top |
@@ -7311,1551 +8881,3 @@ iconv |
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.4.1 distribution is in the |
-`gdb-7.4.1' directory. That directory contains: |
- |
-`gdb-7.4.1/configure (and supporting files)' |
- script for configuring GDB and all its supporting libraries |
- |
-`gdb-7.4.1/gdb' |
- the source specific to GDB itself |
- |
-`gdb-7.4.1/bfd' |
- source for the Binary File Descriptor library |
- |
-`gdb-7.4.1/include' |
- GNU include files |
- |
-`gdb-7.4.1/libiberty' |
- source for the `-liberty' free software library |
- |
-`gdb-7.4.1/opcodes' |
- source for the library of opcode tables and disassemblers |
- |
-`gdb-7.4.1/readline' |
- source for the GNU command-line interface |
- |
-`gdb-7.4.1/glob' |
- source for the GNU filename pattern-matching subroutine |
- |
-`gdb-7.4.1/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.4.1' 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.4.1 |
- ./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.4.1' |
-source directory for version 7.4.1, `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.4.1, you can build GDB in a separate |
-directory for a Sun 4 like this: |
- |
- cd gdb-7.4.1 |
- mkdir ../gdb-sun4 |
- cd ../gdb-sun4 |
- ../gdb-7.4.1/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.4.1/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.4.1' (or in a separate configured directory configured with |
-`--srcdir=DIRNAME/gdb-7.4.1'), 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.4.1', for version 7.4.1). |
- |
- |
-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]' |
-`maint print remote-registers [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; the |
- command `maint print register-groups' includes the groups that |
- each register is a member of; and the command `maint print |
- remote-registers' includes the remote target's register numbers |
- and offsets in the `G' packets. *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 of GDB 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. Both CPU time and wallclock time are printed. Printing |
- both is useful when trying to determine whether the cost is CPU |
- or, e.g., disk/network, latency. Note that the CPU time printed |
- is for GDB only, it does not include the execution time of the |
- inferior because there's no mechanism currently to compute how |
- much time was spent by GDB and how much time was spent by the |
- program been debugged. 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:: |
-* Library List Format for SVR4 Targets:: |
-* 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. |
- |
- At a minimum, a stub is required to support the `g' and `G' commands |
-for register access, and the `m' and `M' commands for memory access. |
-Stubs that only control single-threaded targets can implement run |
-control with the `c' (continue), and `s' (step) commands. Stubs that |
-support multi-threading targets should support the `vCont' command. |
-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. |
- |
- This packet is deprecated for multi-threading support. *Note |
- vCont packet::. |
- |
- 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. |
- |
- This packet is deprecated for multi-threading support. *Note |
- vCont packet::. |
- |
- 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 OP THREAD-ID' |
- Set thread for subsequent operations (`m', `M', `g', `G', et.al.). |
- OP depends on the operation to be performed: it should be `c' for |
- step and continue operations (note that this is deprecated, |
- supporting the `vCont' command is a better option), `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. |
- |
- This packet is deprecated for multi-threading support. *Note |
- vCont packet::. |
- |
- 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. |
- |
- This packet is deprecated for multi-threading support. *Note |
- vCont packet::. |
- |
- 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. |
- |
- |