|  | @c Copyright (C) 2008--2025 Free Software Foundation, Inc. | 
|  | @c Permission is granted to copy, distribute and/or modify this document | 
|  | @c under the terms of the GNU Free Documentation License, Version 1.3 or | 
|  | @c any later version published by the Free Software Foundation; with the | 
|  | @c Invariant Sections being ``Free Software'' and ``Free Software Needs | 
|  | @c Free Documentation'', with the Front-Cover Texts being ``A GNU Manual,'' | 
|  | @c and with the Back-Cover Texts as in (a) below. | 
|  | @c | 
|  | @c (a) The FSF's Back-Cover Text is: ``You are free to copy and modify | 
|  | @c this GNU Manual.  Buying copies from GNU Press supports the FSF in | 
|  | @c developing GNU and promoting software freedom.'' | 
|  |  | 
|  | @node Guile | 
|  | @section Extending @value{GDBN} using Guile | 
|  | @cindex guile scripting | 
|  | @cindex scripting with guile | 
|  |  | 
|  | You can extend @value{GDBN} using the @uref{http://www.gnu.org/software/guile/, | 
|  | Guile implementation of the Scheme programming language}. | 
|  | This feature is available only if @value{GDBN} was configured using | 
|  | @option{--with-guile}. | 
|  |  | 
|  | @menu | 
|  | * Guile Introduction::     Introduction to Guile scripting in @value{GDBN} | 
|  | * Guile Commands::         Accessing Guile from @value{GDBN} | 
|  | * Guile API::              Accessing @value{GDBN} from Guile | 
|  | * Guile Auto-loading::     Automatically loading Guile code | 
|  | * Guile Modules::          Guile modules provided by @value{GDBN} | 
|  | @end menu | 
|  |  | 
|  | @node Guile Introduction | 
|  | @subsection Guile Introduction | 
|  |  | 
|  | Guile is an implementation of the Scheme programming language | 
|  | and is the GNU project's official extension language. | 
|  |  | 
|  | Guile support in @value{GDBN} follows the Python support in @value{GDBN} | 
|  | reasonably closely, so concepts there should carry over. | 
|  | However, some things are done differently where it makes sense. | 
|  |  | 
|  | @value{GDBN} requires Guile version 3.0, 2.2, or 2.0. | 
|  |  | 
|  | @cindex guile scripts directory | 
|  | Guile scripts used by @value{GDBN} should be installed in | 
|  | @file{@var{data-directory}/guile}, where @var{data-directory} is | 
|  | the data directory as determined at @value{GDBN} startup (@pxref{Data Files}). | 
|  | This directory, known as the @dfn{guile directory}, | 
|  | is automatically added to the Guile Search Path in order to allow | 
|  | the Guile interpreter to locate all scripts installed at this location. | 
|  |  | 
|  | @node Guile Commands | 
|  | @subsection Guile Commands | 
|  | @cindex guile commands | 
|  | @cindex commands to access guile | 
|  |  | 
|  | @value{GDBN} provides two commands for accessing the Guile interpreter: | 
|  |  | 
|  | @table @code | 
|  | @kindex guile-repl | 
|  | @kindex gr | 
|  | @item guile-repl | 
|  | @itemx gr | 
|  | The @code{guile-repl} command can be used to start an interactive | 
|  | Guile prompt or @dfn{repl}.  To return to @value{GDBN}, | 
|  | type @kbd{,q} or the @code{EOF} character (e.g., @kbd{Ctrl-D} on | 
|  | an empty prompt).  These commands do not take any arguments. | 
|  |  | 
|  | @kindex guile | 
|  | @kindex gu | 
|  | @item guile @r{[}@var{scheme-expression}@r{]} | 
|  | @itemx gu @r{[}@var{scheme-expression}@r{]} | 
|  | The @code{guile} command can be used to evaluate a Scheme expression. | 
|  |  | 
|  | If given an argument, @value{GDBN} will pass the argument to the Guile | 
|  | interpreter for evaluation. | 
|  |  | 
|  | @smallexample | 
|  | (@value{GDBP}) guile (display (+ 20 3)) (newline) | 
|  | 23 | 
|  | @end smallexample | 
|  |  | 
|  | The result of the Scheme expression is displayed using normal Guile rules. | 
|  |  | 
|  | @smallexample | 
|  | (@value{GDBP}) guile (+ 20 3) | 
|  | 23 | 
|  | @end smallexample | 
|  |  | 
|  | If you do not provide an argument to @code{guile}, it will act as a | 
|  | multi-line command, like @code{define}.  In this case, the Guile | 
|  | script is made up of subsequent command lines, given after the | 
|  | @code{guile} command.  This command list is terminated using a line | 
|  | containing @code{end}.  For example: | 
|  |  | 
|  | @smallexample | 
|  | (@value{GDBP}) guile | 
|  | >(display 23) | 
|  | >(newline) | 
|  | >end | 
|  | 23 | 
|  | @end smallexample | 
|  | @end table | 
|  |  | 
|  | It is also possible to execute a Guile script from the @value{GDBN} | 
|  | interpreter: | 
|  |  | 
|  | @table @code | 
|  | @item source @file{script-name} | 
|  | The script name must end with @samp{.scm} and @value{GDBN} must be configured | 
|  | to recognize the script language based on filename extension using | 
|  | the @code{script-extension} setting.  @xref{Extending GDB, ,Extending GDB}. | 
|  |  | 
|  | @item guile (load "script-name") | 
|  | This method uses the @code{load} Guile function. | 
|  | It takes a string argument that is the name of the script to load. | 
|  | See the Guile documentation for a description of this function. | 
|  | (@pxref{Loading,,, guile, GNU Guile Reference Manual}). | 
|  | @end table | 
|  |  | 
|  | @node Guile API | 
|  | @subsection Guile API | 
|  | @cindex guile api | 
|  | @cindex programming in guile | 
|  |  | 
|  | You can get quick online help for @value{GDBN}'s Guile API by issuing | 
|  | the command @w{@kbd{help guile}}, or by issuing the command @kbd{,help} | 
|  | from an interactive Guile session.  Furthermore, most Guile procedures | 
|  | provided by @value{GDBN} have doc strings which can be obtained with | 
|  | @kbd{,describe @var{procedure-name}} or @kbd{,d @var{procedure-name}} | 
|  | from the Guile interactive prompt. | 
|  |  | 
|  | @menu | 
|  | * Basic Guile::              Basic Guile Functions | 
|  | * Guile Configuration::      Guile configuration variables | 
|  | * GDB Scheme Data Types::    Scheme representations of GDB objects | 
|  | * Guile Exception Handling:: How Guile exceptions are translated | 
|  | * Values From Inferior In Guile:: Guile representation of values | 
|  | * Arithmetic In Guile::      Arithmetic in Guile | 
|  | * Types In Guile::           Guile representation of types | 
|  | * Guile Pretty Printing API:: Pretty-printing values with Guile | 
|  | * Selecting Guile Pretty-Printers:: How GDB chooses a pretty-printer | 
|  | * Writing a Guile Pretty-Printer:: Writing a pretty-printer | 
|  | * Commands In Guile::        Implementing new commands in Guile | 
|  | * Parameters In Guile::      Adding new @value{GDBN} parameters | 
|  | * Progspaces In Guile::      Program spaces | 
|  | * Objfiles In Guile::        Object files in Guile | 
|  | * Frames In Guile::          Accessing inferior stack frames from Guile | 
|  | * Blocks In Guile::          Accessing blocks from Guile | 
|  | * Symbols In Guile::         Guile representation of symbols | 
|  | * Symbol Tables In Guile::   Guile representation of symbol tables | 
|  | * Breakpoints In Guile::     Manipulating breakpoints using Guile | 
|  | * Lazy Strings In Guile::    Guile representation of lazy strings | 
|  | * Architectures In Guile::   Guile representation of architectures | 
|  | * Disassembly In Guile::     Disassembling instructions from Guile | 
|  | * I/O Ports in Guile::       GDB I/O ports | 
|  | * Memory Ports in Guile::    Accessing memory through ports and bytevectors | 
|  | * Iterators In Guile::       Basic iterator support | 
|  | * Colors In Guile::          Colorize output with Guile | 
|  | @end menu | 
|  |  | 
|  | @node Basic Guile | 
|  | @subsubsection Basic Guile | 
|  |  | 
|  | @cindex guile stdout | 
|  | @cindex guile pagination | 
|  | At startup, @value{GDBN} overrides Guile's @code{current-output-port} and | 
|  | @code{current-error-port} to print using @value{GDBN}'s output-paging streams. | 
|  | A Guile program which outputs to one of these streams may have its | 
|  | output interrupted by the user (@pxref{Screen Size}).  In this | 
|  | situation, a Guile @code{signal} exception is thrown with value @code{SIGINT}. | 
|  |  | 
|  | Guile's history mechanism uses the same naming as @value{GDBN}'s, | 
|  | namely the user of dollar-variables (e.g., $1, $2, etc.). | 
|  | The results of evaluations in Guile and in GDB are counted separately, | 
|  | @code{$1} in Guile is not the same value as @code{$1} in @value{GDBN}. | 
|  |  | 
|  | @value{GDBN} is not thread-safe.  If your Guile program uses multiple | 
|  | threads, you must be careful to only call @value{GDBN}-specific | 
|  | functions in the @value{GDBN} thread. | 
|  |  | 
|  | Some care must be taken when writing Guile code to run in | 
|  | @value{GDBN}.  Two things are worth noting in particular: | 
|  |  | 
|  | @itemize @bullet | 
|  | @item | 
|  | @value{GDBN} installs handlers for @code{SIGCHLD} and @code{SIGINT}. | 
|  | Guile code must not override these, or even change the options using | 
|  | @code{sigaction}.  If your program changes the handling of these | 
|  | signals, @value{GDBN} will most likely stop working correctly.  Note | 
|  | that it is unfortunately common for GUI toolkits to install a | 
|  | @code{SIGCHLD} handler. | 
|  |  | 
|  | @item | 
|  | @value{GDBN} takes care to mark its internal file descriptors as | 
|  | close-on-exec.  However, this cannot be done in a thread-safe way on | 
|  | all platforms.  Your Guile programs should be aware of this and | 
|  | should both create new file descriptors with the close-on-exec flag | 
|  | set and arrange to close unneeded file descriptors before starting a | 
|  | child process. | 
|  | @end itemize | 
|  |  | 
|  | @cindex guile gdb module | 
|  | @value{GDBN} introduces a new Guile module, named @code{gdb}.  All | 
|  | methods and classes added by @value{GDBN} are placed in this module. | 
|  | @value{GDBN} does not automatically @code{import} the @code{gdb} module, | 
|  | scripts must do this themselves.  There are various options for how to | 
|  | import a module, so @value{GDBN} leaves the choice of how the @code{gdb} | 
|  | module is imported to the user. | 
|  | To simplify interactive use, it is recommended to add one of the following | 
|  | to your ~/.gdbinit. | 
|  |  | 
|  | @smallexample | 
|  | guile (use-modules (gdb)) | 
|  | @end smallexample | 
|  |  | 
|  | @smallexample | 
|  | guile (use-modules ((gdb) #:renamer (symbol-prefix-proc 'gdb:))) | 
|  | @end smallexample | 
|  |  | 
|  | Which one to choose depends on your preference. | 
|  | The second one adds @code{gdb:} as a prefix to all module functions | 
|  | and variables. | 
|  |  | 
|  | The rest of this manual assumes the @code{gdb} module has been imported | 
|  | without any prefix.  See the Guile documentation for @code{use-modules} | 
|  | for more information | 
|  | (@pxref{Using Guile Modules,,, guile, GNU Guile Reference Manual}). | 
|  |  | 
|  | Example: | 
|  |  | 
|  | @smallexample | 
|  | (gdb) guile (value-type (make-value 1)) | 
|  | ERROR: Unbound variable: value-type | 
|  | Error while executing Scheme code. | 
|  | (gdb) guile (use-modules (gdb)) | 
|  | (gdb) guile (value-type (make-value 1)) | 
|  | int | 
|  | (gdb) | 
|  | @end smallexample | 
|  |  | 
|  | The @code{(gdb)} module provides these basic Guile functions. | 
|  |  | 
|  | @deffn {Scheme Procedure} execute command @w{@r{[}#:from-tty boolean@r{]}} @ | 
|  | @w{@r{[}#:to-string boolean@r{]}} | 
|  | Evaluate @var{command}, a string, as a @value{GDBN} CLI command. | 
|  | If a @value{GDBN} exception happens while @var{command} runs, it is | 
|  | translated as described in | 
|  | @ref{Guile Exception Handling,,Guile Exception Handling}. | 
|  |  | 
|  | @var{from-tty} specifies whether @value{GDBN} ought to consider this | 
|  | command as having originated from the user invoking it interactively. | 
|  | It must be a boolean value.  If omitted, it defaults to @code{#f}. | 
|  |  | 
|  | By default, any output produced by @var{command} is sent to | 
|  | @value{GDBN}'s standard output (and to the log output if logging is | 
|  | turned on).  If the @var{to-string} parameter is | 
|  | @code{#t}, then output will be collected by @code{execute} and | 
|  | returned as a string.  The default is @code{#f}, in which case the | 
|  | return value is unspecified.  If @var{to-string} is @code{#t}, the | 
|  | @value{GDBN} virtual terminal will be temporarily set to unlimited width | 
|  | and height, and its pagination will be disabled; @pxref{Screen Size}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} history-ref number | 
|  | Return a value from @value{GDBN}'s value history (@pxref{Value | 
|  | History}).  The @var{number} argument indicates which history element to return. | 
|  | If @var{number} is negative, then @value{GDBN} will take its absolute value | 
|  | and count backward from the last element (i.e., the most recent element) to | 
|  | find the value to return.  If @var{number} is zero, then @value{GDBN} will | 
|  | return the most recent element.  If the element specified by @var{number} | 
|  | doesn't exist in the value history, a @code{gdb:error} exception will be | 
|  | raised. | 
|  |  | 
|  | If no exception is raised, the return value is always an instance of | 
|  | @code{<gdb:value>} (@pxref{Values From Inferior In Guile}). | 
|  |  | 
|  | @emph{Note:} @value{GDBN}'s value history is independent of Guile's. | 
|  | @code{$1} in @value{GDBN}'s value history contains the result of evaluating | 
|  | an expression from @value{GDBN}'s command line and @code{$1} from Guile's | 
|  | history contains the result of evaluating an expression from Guile's | 
|  | command line. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} history-append! value | 
|  | Append @var{value}, an instance of @code{<gdb:value>}, to @value{GDBN}'s | 
|  | value history.  Return its index in the history. | 
|  |  | 
|  | Putting into history values returned by Guile extensions will allow | 
|  | the user convenient access to those values via CLI history | 
|  | facilities. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} parse-and-eval expression | 
|  | Parse @var{expression} as an expression in the current language, | 
|  | evaluate it, and return the result as a @code{<gdb:value>}. | 
|  | The @var{expression} must be a string. | 
|  |  | 
|  | This function can be useful when implementing a new command | 
|  | (@pxref{Commands In Guile}), as it provides a way to parse the | 
|  | command's arguments as an expression. | 
|  | It is also is useful when computing values. | 
|  | For example, it is the only way to get the value of a | 
|  | convenience variable (@pxref{Convenience Vars}) as a @code{<gdb:value>}. | 
|  | @end deffn | 
|  |  | 
|  | @node Guile Configuration | 
|  | @subsubsection Guile Configuration | 
|  | @cindex guile configuration | 
|  |  | 
|  | @value{GDBN} provides these Scheme functions to access various configuration | 
|  | parameters. | 
|  |  | 
|  | @deffn {Scheme Procedure} data-directory | 
|  | Return a string containing @value{GDBN}'s data directory. | 
|  | This directory contains @value{GDBN}'s ancillary files. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} guile-data-directory | 
|  | Return a string containing @value{GDBN}'s Guile data directory. | 
|  | This directory contains the Guile modules provided by @value{GDBN}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} gdb-version | 
|  | Return a string containing the @value{GDBN} version. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} host-config | 
|  | Return a string containing the host configuration. | 
|  | This is the string passed to @code{--host} when @value{GDBN} was configured. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} target-config | 
|  | Return a string containing the target configuration. | 
|  | This is the string passed to @code{--target} when @value{GDBN} was configured. | 
|  | @end deffn | 
|  |  | 
|  | @node GDB Scheme Data Types | 
|  | @subsubsection GDB Scheme Data Types | 
|  | @cindex gdb objects | 
|  |  | 
|  | The values exposed by @value{GDBN} to Guile are known as | 
|  | @dfn{@value{GDBN} objects}.  There are several kinds of @value{GDBN} | 
|  | object, and each is disjoint from all other types known to Guile. | 
|  |  | 
|  | @deffn {Scheme Procedure} gdb-object-kind object | 
|  | Return the kind of the @value{GDBN} object, e.g., @code{<gdb:breakpoint>}, | 
|  | as a symbol. | 
|  | @end deffn | 
|  |  | 
|  | @value{GDBN} defines the following object types: | 
|  |  | 
|  | @table @code | 
|  | @item <gdb:arch> | 
|  | @xref{Architectures In Guile}. | 
|  |  | 
|  | @item <gdb:block> | 
|  | @xref{Blocks In Guile}. | 
|  |  | 
|  | @item <gdb:block-symbols-iterator> | 
|  | @xref{Blocks In Guile}. | 
|  |  | 
|  | @item <gdb:breakpoint> | 
|  | @xref{Breakpoints In Guile}. | 
|  |  | 
|  | @item <gdb:command> | 
|  | @xref{Commands In Guile}. | 
|  |  | 
|  | @item <gdb:exception> | 
|  | @xref{Guile Exception Handling}. | 
|  |  | 
|  | @item <gdb:frame> | 
|  | @xref{Frames In Guile}. | 
|  |  | 
|  | @item <gdb:iterator> | 
|  | @xref{Iterators In Guile}. | 
|  |  | 
|  | @item <gdb:lazy-string> | 
|  | @xref{Lazy Strings In Guile}. | 
|  |  | 
|  | @item <gdb:objfile> | 
|  | @xref{Objfiles In Guile}. | 
|  |  | 
|  | @item <gdb:parameter> | 
|  | @xref{Parameters In Guile}. | 
|  |  | 
|  | @item <gdb:pretty-printer> | 
|  | @xref{Guile Pretty Printing API}. | 
|  |  | 
|  | @item <gdb:pretty-printer-worker> | 
|  | @xref{Guile Pretty Printing API}. | 
|  |  | 
|  | @item <gdb:progspace> | 
|  | @xref{Progspaces In Guile}. | 
|  |  | 
|  | @item <gdb:symbol> | 
|  | @xref{Symbols In Guile}. | 
|  |  | 
|  | @item <gdb:symtab> | 
|  | @xref{Symbol Tables In Guile}. | 
|  |  | 
|  | @item <gdb:sal> | 
|  | @xref{Symbol Tables In Guile}. | 
|  |  | 
|  | @item <gdb:type> | 
|  | @xref{Types In Guile}. | 
|  |  | 
|  | @item <gdb:field> | 
|  | @xref{Types In Guile}. | 
|  |  | 
|  | @item <gdb:value> | 
|  | @xref{Values From Inferior In Guile}. | 
|  |  | 
|  | @item <gdb:color> | 
|  | @xref{Colors In Guile}. | 
|  | @end table | 
|  |  | 
|  | The following @value{GDBN} objects are managed internally so that the | 
|  | Scheme function @code{eq?} may be applied to them. | 
|  |  | 
|  | @table @code | 
|  | @item <gdb:arch> | 
|  | @item <gdb:block> | 
|  | @item <gdb:breakpoint> | 
|  | @item <gdb:frame> | 
|  | @item <gdb:objfile> | 
|  | @item <gdb:progspace> | 
|  | @item <gdb:symbol> | 
|  | @item <gdb:symtab> | 
|  | @item <gdb:type> | 
|  | @end table | 
|  |  | 
|  | @node Guile Exception Handling | 
|  | @subsubsection Guile Exception Handling | 
|  | @cindex guile exceptions | 
|  | @cindex exceptions, guile | 
|  | @kindex set guile print-stack | 
|  |  | 
|  | When executing the @code{guile} command, Guile exceptions | 
|  | uncaught within the Guile code are translated to calls to the | 
|  | @value{GDBN} error-reporting mechanism.  If the command that called | 
|  | @code{guile} does not handle the error, @value{GDBN} will | 
|  | terminate it and report the error according to the setting of | 
|  | the @code{guile print-stack} parameter. | 
|  |  | 
|  | The @code{guile print-stack} parameter has three settings: | 
|  |  | 
|  | @table @code | 
|  | @item none | 
|  | Nothing is printed. | 
|  |  | 
|  | @item message | 
|  | An error message is printed containing the Guile exception name, | 
|  | the associated value, and the Guile call stack backtrace at the | 
|  | point where the exception was raised.  Example: | 
|  |  | 
|  | @smallexample | 
|  | (@value{GDBP}) guile (display foo) | 
|  | ERROR: In procedure memoize-variable-access!: | 
|  | ERROR: Unbound variable: foo | 
|  | Error while executing Scheme code. | 
|  | @end smallexample | 
|  |  | 
|  | @item full | 
|  | In addition to an error message a full backtrace is printed. | 
|  |  | 
|  | @smallexample | 
|  | (@value{GDBP}) set guile print-stack full | 
|  | (@value{GDBP}) guile (display foo) | 
|  | Guile Backtrace: | 
|  | In ice-9/boot-9.scm: | 
|  | 157: 10 [catch #t #<catch-closure 2c76e20> ...] | 
|  | In unknown file: | 
|  | ?: 9 [apply-smob/1 #<catch-closure 2c76e20>] | 
|  | In ice-9/boot-9.scm: | 
|  | 157: 8 [catch #t #<catch-closure 2c76d20> ...] | 
|  | In unknown file: | 
|  | ?: 7 [apply-smob/1 #<catch-closure 2c76d20>] | 
|  | ?: 6 [call-with-input-string "(display foo)" ...] | 
|  | In ice-9/boot-9.scm: | 
|  | 2320: 5 [save-module-excursion #<procedure 2c2dc30 ... ()>] | 
|  | In ice-9/eval-string.scm: | 
|  | 44: 4 [read-and-eval #<input: string 27cb410> #:lang ...] | 
|  | 37: 3 [lp (display foo)] | 
|  | In ice-9/eval.scm: | 
|  | 387: 2 [eval # ()] | 
|  | 393: 1 [eval #<memoized foo> ()] | 
|  | In unknown file: | 
|  | ?: 0 [memoize-variable-access! #<memoized foo> ...] | 
|  |  | 
|  | ERROR: In procedure memoize-variable-access!: | 
|  | ERROR: Unbound variable: foo | 
|  | Error while executing Scheme code. | 
|  | @end smallexample | 
|  | @end table | 
|  |  | 
|  | @value{GDBN} errors that happen in @value{GDBN} commands invoked by | 
|  | Guile code are converted to Guile exceptions.  The type of the | 
|  | Guile exception depends on the error. | 
|  |  | 
|  | Guile procedures provided by @value{GDBN} can throw the standard | 
|  | Guile exceptions like @code{wrong-type-arg} and @code{out-of-range}. | 
|  |  | 
|  | User interrupt (via @kbd{C-c} or by typing @kbd{q} at a pagination | 
|  | prompt) is translated to a Guile @code{signal} exception with value | 
|  | @code{SIGINT}. | 
|  |  | 
|  | @value{GDBN} Guile procedures can also throw these exceptions: | 
|  |  | 
|  | @vtable @code | 
|  | @item gdb:error | 
|  | This exception is a catch-all for errors generated from within @value{GDBN}. | 
|  |  | 
|  | @item gdb:invalid-object | 
|  | This exception is thrown when accessing Guile objects that wrap underlying | 
|  | @value{GDBN} objects have become invalid.  For example, a | 
|  | @code{<gdb:breakpoint>} object becomes invalid if the user deletes it | 
|  | from the command line.  The object still exists in Guile, but the | 
|  | object it represents is gone.  Further operations on this breakpoint | 
|  | will throw this exception. | 
|  |  | 
|  | @item gdb:memory-error | 
|  | This exception is thrown when an operation tried to access invalid | 
|  | memory in the inferior. | 
|  |  | 
|  | @item gdb:pp-type-error | 
|  | This exception is thrown when a Guile pretty-printer passes a bad object | 
|  | to @value{GDBN}. | 
|  | @end vtable | 
|  |  | 
|  | The following exception-related procedures are provided by the | 
|  | @code{(gdb)} module. | 
|  |  | 
|  | @deffn {Scheme Procedure} make-exception key args | 
|  | Return a @code{<gdb:exception>} object given by its @var{key} and | 
|  | @var{args}, which are the standard Guile parameters of an exception. | 
|  | See the Guile documentation for more information (@pxref{Exceptions,,, | 
|  | guile, GNU Guile Reference Manual}). | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} exception? object | 
|  | Return @code{#t} if @var{object} is a @code{<gdb:exception>} object. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} exception-key exception | 
|  | Return the @var{args} field of a @code{<gdb:exception>} object. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} exception-args exception | 
|  | Return the @var{args} field of a @code{<gdb:exception>} object. | 
|  | @end deffn | 
|  |  | 
|  | @node Values From Inferior In Guile | 
|  | @subsubsection Values From Inferior In Guile | 
|  | @cindex values from inferior, in guile | 
|  | @cindex guile, working with values from inferior | 
|  |  | 
|  | @tindex @code{<gdb:value>} | 
|  | @value{GDBN} provides values it obtains from the inferior program in | 
|  | an object of type @code{<gdb:value>}.  @value{GDBN} uses this object | 
|  | for its internal bookkeeping of the inferior's values, and for | 
|  | fetching values when necessary. | 
|  |  | 
|  | @value{GDBN} does not memoize @code{<gdb:value>} objects. | 
|  | @code{make-value} always returns a fresh object. | 
|  |  | 
|  | @smallexample | 
|  | (gdb) guile (eq? (make-value 1) (make-value 1)) | 
|  | $1 = #f | 
|  | (gdb) guile (equal? (make-value 1) (make-value 1)) | 
|  | $1 = #t | 
|  | @end smallexample | 
|  |  | 
|  | A @code{<gdb:value>} that represents a function can be executed via | 
|  | inferior function call with @code{value-call}. | 
|  | Any arguments provided to the call must match the function's prototype, | 
|  | and must be provided in the order specified by that prototype. | 
|  |  | 
|  | For example, @code{some-val} is a @code{<gdb:value>} instance | 
|  | representing a function that takes two integers as arguments.  To | 
|  | execute this function, call it like so: | 
|  |  | 
|  | @smallexample | 
|  | (define result (value-call some-val 10 20)) | 
|  | @end smallexample | 
|  |  | 
|  | Any values returned from a function call are @code{<gdb:value>} objects. | 
|  |  | 
|  | Note: Unlike Python scripting in @value{GDBN}, | 
|  | inferior values that are simple scalars cannot be used directly in | 
|  | Scheme expressions that are valid for the value's data type. | 
|  | For example, @code{(+ (parse-and-eval "int_variable") 2)} does not work. | 
|  | And inferior values that are structures or instances of some class cannot | 
|  | be accessed using any special syntax, instead @code{value-field} must be used. | 
|  |  | 
|  | The following value-related procedures are provided by the | 
|  | @code{(gdb)} module. | 
|  |  | 
|  | @deffn {Scheme Procedure} value? object | 
|  | Return @code{#t} if @var{object} is a @code{<gdb:value>} object. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} make-value value @r{[}#:type type@r{]} | 
|  | Many Scheme values can be converted directly to a @code{<gdb:value>} | 
|  | with this procedure.  If @var{type} is specified, the result is a value | 
|  | of this type, and if @var{value} can't be represented with this type | 
|  | an exception is thrown.  Otherwise the type of the result is determined from | 
|  | @var{value} as described below. | 
|  |  | 
|  | @xref{Architectures In Guile}, for a list of the builtin | 
|  | types for an architecture. | 
|  |  | 
|  | Here's how Scheme values are converted when @var{type} argument to | 
|  | @code{make-value} is not specified: | 
|  |  | 
|  | @table @asis | 
|  | @item Scheme boolean | 
|  | A Scheme boolean is converted the boolean type for the current language. | 
|  |  | 
|  | @item Scheme integer | 
|  | A Scheme integer is converted to the first of a C @code{int}, | 
|  | @code{unsigned int}, @code{long}, @code{unsigned long}, | 
|  | @code{long long} or @code{unsigned long long} type | 
|  | for the current architecture that can represent the value. | 
|  |  | 
|  | If the Scheme integer cannot be represented as a target integer | 
|  | an @code{out-of-range} exception is thrown. | 
|  |  | 
|  | @item Scheme real | 
|  | A Scheme real is converted to the C @code{double} type for the | 
|  | current architecture. | 
|  |  | 
|  | @item Scheme string | 
|  | A Scheme string is converted to a string in the current target | 
|  | language using the current target encoding. | 
|  | Characters that cannot be represented in the current target encoding | 
|  | are replaced with the corresponding escape sequence.  This is Guile's | 
|  | @code{SCM_FAILED_CONVERSION_ESCAPE_SEQUENCE} conversion strategy | 
|  | (@pxref{Strings,,, guile, GNU Guile Reference Manual}). | 
|  |  | 
|  | Passing @var{type} is not supported in this case, | 
|  | if it is provided a @code{wrong-type-arg} exception is thrown. | 
|  |  | 
|  | @item @code{<gdb:lazy-string>} | 
|  | If @var{value} is a @code{<gdb:lazy-string>} object (@pxref{Lazy Strings In | 
|  | Guile}), then the @code{lazy-string->value} procedure is called, and | 
|  | its result is used. | 
|  |  | 
|  | Passing @var{type} is not supported in this case, | 
|  | if it is provided a @code{wrong-type-arg} exception is thrown. | 
|  |  | 
|  | @item Scheme bytevector | 
|  | If @var{value} is a Scheme bytevector and @var{type} is provided, | 
|  | @var{value} must be the same size, in bytes, of values of type @var{type}, | 
|  | and the result is essentially created by using @code{memcpy}. | 
|  |  | 
|  | If @var{value} is a Scheme bytevector and @var{type} is not provided, | 
|  | the result is an array of type @code{uint8} of the same length. | 
|  | @end table | 
|  | @end deffn | 
|  |  | 
|  | @cindex optimized out value in guile | 
|  | @deffn {Scheme Procedure} value-optimized-out? value | 
|  | Return @code{#t} if the compiler optimized out @var{value}, | 
|  | thus it is not available for fetching from the inferior. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-address value | 
|  | If @var{value} is addressable, returns a | 
|  | @code{<gdb:value>} object representing the address. | 
|  | Otherwise, @code{#f} is returned. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-type value | 
|  | Return the type of @var{value} as a @code{<gdb:type>} object | 
|  | (@pxref{Types In Guile}). | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-dynamic-type value | 
|  | Return the dynamic type of @var{value}.  This uses C@t{++} run-time | 
|  | type information (@acronym{RTTI}) to determine the dynamic type of the | 
|  | value.  If the value is of class type, it will return the class in | 
|  | which the value is embedded, if any.  If the value is of pointer or | 
|  | reference to a class type, it will compute the dynamic type of the | 
|  | referenced object, and return a pointer or reference to that type, | 
|  | respectively.  In all other cases, it will return the value's static | 
|  | type. | 
|  |  | 
|  | Note that this feature will only work when debugging a C@t{++} program | 
|  | that includes @acronym{RTTI} for the object in question.  Otherwise, | 
|  | it will just return the static type of the value as in @kbd{ptype foo}. | 
|  | @xref{Symbols, ptype}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-cast value type | 
|  | Return a new instance of @code{<gdb:value>} that is the result of | 
|  | casting @var{value} to the type described by @var{type}, which must | 
|  | be a @code{<gdb:type>} object.  If the cast cannot be performed for some | 
|  | reason, this method throws an exception. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-dynamic-cast value type | 
|  | Like @code{value-cast}, but works as if the C@t{++} @code{dynamic_cast} | 
|  | operator were used.  Consult a C@t{++} reference for details. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-reinterpret-cast value type | 
|  | Like @code{value-cast}, but works as if the C@t{++} @code{reinterpret_cast} | 
|  | operator were used.  Consult a C@t{++} reference for details. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-dereference value | 
|  | For pointer data types, this method returns a new @code{<gdb:value>} object | 
|  | whose contents is the object pointed to by @var{value}.  For example, if | 
|  | @code{foo} is a C pointer to an @code{int}, declared in your C program as | 
|  |  | 
|  | @smallexample | 
|  | int *foo; | 
|  | @end smallexample | 
|  |  | 
|  | @noindent | 
|  | then you can use the corresponding @code{<gdb:value>} to access what | 
|  | @code{foo} points to like this: | 
|  |  | 
|  | @smallexample | 
|  | (define bar (value-dereference foo)) | 
|  | @end smallexample | 
|  |  | 
|  | The result @code{bar} will be a @code{<gdb:value>} object holding the | 
|  | value pointed to by @code{foo}. | 
|  |  | 
|  | A similar function @code{value-referenced-value} exists which also | 
|  | returns @code{<gdb:value>} objects corresponding to the values pointed to | 
|  | by pointer values (and additionally, values referenced by reference | 
|  | values).  However, the behavior of @code{value-dereference} | 
|  | differs from @code{value-referenced-value} by the fact that the | 
|  | behavior of @code{value-dereference} is identical to applying the C | 
|  | unary operator @code{*} on a given value.  For example, consider a | 
|  | reference to a pointer @code{ptrref}, declared in your C@t{++} program | 
|  | as | 
|  |  | 
|  | @smallexample | 
|  | typedef int *intptr; | 
|  | ... | 
|  | int val = 10; | 
|  | intptr ptr = &val; | 
|  | intptr &ptrref = ptr; | 
|  | @end smallexample | 
|  |  | 
|  | Though @code{ptrref} is a reference value, one can apply the method | 
|  | @code{value-dereference} to the @code{<gdb:value>} object corresponding | 
|  | to it and obtain a @code{<gdb:value>} which is identical to that | 
|  | corresponding to @code{val}.  However, if you apply the method | 
|  | @code{value-referenced-value}, the result would be a @code{<gdb:value>} | 
|  | object identical to that corresponding to @code{ptr}. | 
|  |  | 
|  | @smallexample | 
|  | (define scm-ptrref (parse-and-eval "ptrref")) | 
|  | (define scm-val (value-dereference scm-ptrref)) | 
|  | (define scm-ptr (value-referenced-value scm-ptrref)) | 
|  | @end smallexample | 
|  |  | 
|  | The @code{<gdb:value>} object @code{scm-val} is identical to that | 
|  | corresponding to @code{val}, and @code{scm-ptr} is identical to that | 
|  | corresponding to @code{ptr}.  In general, @code{value-dereference} can | 
|  | be applied whenever the C unary operator @code{*} can be applied | 
|  | to the corresponding C value.  For those cases where applying both | 
|  | @code{value-dereference} and @code{value-referenced-value} is allowed, | 
|  | the results obtained need not be identical (as we have seen in the above | 
|  | example).  The results are however identical when applied on | 
|  | @code{<gdb:value>} objects corresponding to pointers (@code{<gdb:value>} | 
|  | objects with type code @code{TYPE_CODE_PTR}) in a C/C@t{++} program. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-referenced-value value | 
|  | For pointer or reference data types, this method returns a new | 
|  | @code{<gdb:value>} object corresponding to the value referenced by the | 
|  | pointer/reference value.  For pointer data types, | 
|  | @code{value-dereference} and @code{value-referenced-value} produce | 
|  | identical results.  The difference between these methods is that | 
|  | @code{value-dereference} cannot get the values referenced by reference | 
|  | values.  For example, consider a reference to an @code{int}, declared | 
|  | in your C@t{++} program as | 
|  |  | 
|  | @smallexample | 
|  | int val = 10; | 
|  | int &ref = val; | 
|  | @end smallexample | 
|  |  | 
|  | @noindent | 
|  | then applying @code{value-dereference} to the @code{<gdb:value>} object | 
|  | corresponding to @code{ref} will result in an error, while applying | 
|  | @code{value-referenced-value} will result in a @code{<gdb:value>} object | 
|  | identical to that corresponding to @code{val}. | 
|  |  | 
|  | @smallexample | 
|  | (define scm-ref (parse-and-eval "ref")) | 
|  | (define err-ref (value-dereference scm-ref))      ;; error | 
|  | (define scm-val (value-referenced-value scm-ref)) ;; ok | 
|  | @end smallexample | 
|  |  | 
|  | The @code{<gdb:value>} object @code{scm-val} is identical to that | 
|  | corresponding to @code{val}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-reference-value value | 
|  | Return a new @code{<gdb:value>} object which is a reference to the value | 
|  | encapsulated by @code{<gdb:value>} object @var{value}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-rvalue-reference-value value | 
|  | Return a new @code{<gdb:value>} object which is an rvalue reference to | 
|  | the value encapsulated by @code{<gdb:value>} object @var{value}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-const-value value | 
|  | Return a new @code{<gdb:value>} object which is a @samp{const} version | 
|  | of @code{<gdb:value>} object @var{value}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-field value field-name | 
|  | Return field @var{field-name} from @code{<gdb:value>} object @var{value}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-subscript value index | 
|  | Return the value of array @var{value} at index @var{index}. | 
|  | The @var{value} argument must be a subscriptable @code{<gdb:value>} object. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-call value arg-list | 
|  | Perform an inferior function call, taking @var{value} as a pointer | 
|  | to the function to call. | 
|  | Each element of list @var{arg-list} must be a <gdb:value> object or an object | 
|  | that can be converted to a value. | 
|  | The result is the value returned by the function. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value->bool value | 
|  | Return the Scheme boolean representing @code{<gdb:value>} @var{value}. | 
|  | The value must be ``integer like''.  Pointers are ok. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value->integer | 
|  | Return the Scheme integer representing @code{<gdb:value>} @var{value}. | 
|  | The value must be ``integer like''.  Pointers are ok. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value->real | 
|  | Return the Scheme real number representing @code{<gdb:value>} @var{value}. | 
|  | The value must be a number. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value->bytevector | 
|  | Return a Scheme bytevector with the raw contents of @code{<gdb:value>} | 
|  | @var{value}.  No transformation, endian or otherwise, is performed. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value->string value @ | 
|  | @w{@r{[}#:encoding encoding@r{]}} @w{@r{[}#:errors errors@r{]}} @ | 
|  | @w{@r{[}#:length length@r{]}} | 
|  | If @var{value>} represents a string, then this method | 
|  | converts the contents to a Guile string.  Otherwise, this method will | 
|  | throw an exception. | 
|  |  | 
|  | Values are interpreted as strings according to the rules of the | 
|  | current language.  If the optional length argument is given, the | 
|  | string will be converted to that length, and will include any embedded | 
|  | zeroes that the string may contain.  Otherwise, for languages | 
|  | where the string is zero-terminated, the entire string will be | 
|  | converted. | 
|  |  | 
|  | For example, in C-like languages, a value is a string if it is a pointer | 
|  | to or an array of characters or ints of type @code{wchar_t}, @code{char16_t}, | 
|  | or @code{char32_t}. | 
|  |  | 
|  | If the optional @var{encoding} argument is given, it must be a string | 
|  | naming the encoding of the string in the @code{<gdb:value>}, such as | 
|  | @code{"ascii"}, @code{"iso-8859-6"} or @code{"utf-8"}.  It accepts | 
|  | the same encodings as the corresponding argument to Guile's | 
|  | @code{scm_from_stringn} function, and the Guile codec machinery will be used | 
|  | to convert the string.  If @var{encoding} is not given, or if | 
|  | @var{encoding} is the empty string, then either the @code{target-charset} | 
|  | (@pxref{Character Sets}) will be used, or a language-specific encoding | 
|  | will be used, if the current language is able to supply one. | 
|  |  | 
|  | The optional @var{errors} argument is one of @code{#f}, @code{error} or | 
|  | @code{substitute}.  @code{error} and @code{substitute} must be symbols. | 
|  | If @var{errors} is not specified, or if its value is @code{#f}, then the | 
|  | default conversion strategy is used, which is set with the Scheme function | 
|  | @code{set-port-conversion-strategy!}. | 
|  | If the value is @code{'error} then an exception is thrown if there is any | 
|  | conversion error.  If the value is @code{'substitute} then any conversion | 
|  | error is replaced with question marks. | 
|  | @xref{Strings,,, guile, GNU Guile Reference Manual}. | 
|  |  | 
|  | If the optional @var{length} argument is given, the string will be | 
|  | fetched and converted to the given length. | 
|  | The length must be a Scheme integer and not a @code{<gdb:value>} integer. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value->lazy-string value @ | 
|  | @w{@r{[}#:encoding encoding@r{]}} @w{@r{[}#:length length@r{]}} | 
|  | If this @code{<gdb:value>} represents a string, then this method | 
|  | converts @var{value} to a @code{<gdb:lazy-string} (@pxref{Lazy Strings | 
|  | In Guile}).  Otherwise, this method will throw an exception. | 
|  |  | 
|  | If the optional @var{encoding} argument is given, it must be a string | 
|  | naming the encoding of the @code{<gdb:lazy-string}.  Some examples are: | 
|  | @code{"ascii"}, @code{"iso-8859-6"} or @code{"utf-8"}.  If the | 
|  | @var{encoding} argument is an encoding that @value{GDBN} does not | 
|  | recognize, @value{GDBN} will raise an error. | 
|  |  | 
|  | When a lazy string is printed, the @value{GDBN} encoding machinery is | 
|  | used to convert the string during printing.  If the optional | 
|  | @var{encoding} argument is not provided, or is an empty string, | 
|  | @value{GDBN} will automatically select the encoding most suitable for | 
|  | the string type.  For further information on encoding in @value{GDBN} | 
|  | please see @ref{Character Sets}. | 
|  |  | 
|  | If the optional @var{length} argument is given, the string will be | 
|  | fetched and encoded to the length of characters specified.  If | 
|  | the @var{length} argument is not provided, the string will be fetched | 
|  | and encoded until a null of appropriate width is found. | 
|  | The length must be a Scheme integer and not a @code{<gdb:value>} integer. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-lazy? value | 
|  | Return @code{#t} if @var{value} has not yet been fetched | 
|  | from the inferior. | 
|  | Otherwise return @code{#f}. | 
|  | @value{GDBN} does not fetch values until necessary, for efficiency. | 
|  | For example: | 
|  |  | 
|  | @smallexample | 
|  | (define myval (parse-and-eval "somevar")) | 
|  | @end smallexample | 
|  |  | 
|  | The value of @code{somevar} is not fetched at this time.  It will be | 
|  | fetched when the value is needed, or when the @code{fetch-lazy} | 
|  | procedure is invoked. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} make-lazy-value type address | 
|  | Return a @code{<gdb:value>} that will be lazily fetched from the | 
|  | target.  The object of type @code{<gdb:type>} whose value to fetch is | 
|  | specified by its @var{type} and its target memory @var{address}, which | 
|  | is a Scheme integer. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-fetch-lazy! value | 
|  | If @var{value} is a lazy value (@code{(value-lazy? value)} is @code{#t}), | 
|  | then the value is fetched from the inferior. | 
|  | Any errors that occur in the process will produce a Guile exception. | 
|  |  | 
|  | If @var{value} is not a lazy value, this method has no effect. | 
|  |  | 
|  | The result of this function is unspecified. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-print value | 
|  | Return the string representation (print form) of @code{<gdb:value>} | 
|  | @var{value}. | 
|  | @end deffn | 
|  |  | 
|  | @node Arithmetic In Guile | 
|  | @subsubsection Arithmetic In Guile | 
|  |  | 
|  | The @code{(gdb)} module provides several functions for performing | 
|  | arithmetic on @code{<gdb:value>} objects. | 
|  | The arithmetic is performed as if it were done by the target, | 
|  | and therefore has target semantics which are not necessarily | 
|  | those of Scheme.  For example operations work with a fixed precision, | 
|  | not the arbitrary precision of Scheme. | 
|  |  | 
|  | Wherever a function takes an integer or pointer as an operand, | 
|  | @value{GDBN} will convert appropriate Scheme values to perform | 
|  | the operation. | 
|  |  | 
|  | @deffn {Scheme Procedure} value-add a b | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-sub a b | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-mul a b | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-div a b | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-rem a b | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-mod a b | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-pow a b | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-not a | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-neg a | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-pos a | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-abs a | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-lsh a b | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-rsh a b | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-min a b | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-max a b | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-lognot a | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-logand a b | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-logior a b | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value-logxor a b | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value=? a b | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value<? a b | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value<=? a b | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value>? a b | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} value>=? a b | 
|  | @end deffn | 
|  |  | 
|  | Scheme does not provide a @code{not-equal} function, | 
|  | and thus Guile support in @value{GDBN} does not either. | 
|  |  | 
|  | @node Types In Guile | 
|  | @subsubsection Types In Guile | 
|  | @cindex types in guile | 
|  | @cindex guile, working with types | 
|  |  | 
|  | @tindex <gdb:type> | 
|  | @value{GDBN} represents types from the inferior in objects of type | 
|  | @code{<gdb:type>}. | 
|  |  | 
|  | The following type-related procedures are provided by the | 
|  | @code{(gdb)} module. | 
|  |  | 
|  | @deffn {Scheme Procedure} type? object | 
|  | Return @code{#t} if @var{object} is an object of type @code{<gdb:type>}. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} lookup-type name @r{[}#:block block@r{]} | 
|  | This function looks up a type by its @var{name}, which must be a string. | 
|  |  | 
|  | If @var{block} is given, it is an object of type @code{<gdb:block>}, | 
|  | and @var{name} is looked up in that scope. | 
|  | Otherwise, it is searched for globally. | 
|  |  | 
|  | Ordinarily, this function will return an instance of @code{<gdb:type>}. | 
|  | If the named type cannot be found, it will throw an exception. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} type-code type | 
|  | Return the type code of @var{type}.  The type code will be one of the | 
|  | @code{TYPE_CODE_} constants defined below. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} type-tag type | 
|  | Return the tag name of @var{type}.  The tag name is the name after | 
|  | @code{struct}, @code{union}, or @code{enum} in C and C@t{++}; not all | 
|  | languages have this concept.  If this type has no tag name, then | 
|  | @code{#f} is returned. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} type-name type | 
|  | Return the name of @var{type}. | 
|  | If this type has no name, then @code{#f} is returned. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} type-print-name type | 
|  | Return the print name of @var{type}. | 
|  | This returns something even for anonymous types. | 
|  | For example, for an anonymous C struct @code{"struct @{...@}"} is returned. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} type-sizeof type | 
|  | Return the size of this type, in target @code{char} units.  Usually, a | 
|  | target's @code{char} type will be an 8-bit byte.  However, on some | 
|  | unusual platforms, this type may have a different size. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} type-strip-typedefs type | 
|  | Return a new @code{<gdb:type>} that represents the real type of @var{type}, | 
|  | after removing all layers of typedefs. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} type-array type n1 @r{[}n2@r{]} | 
|  | Return a new @code{<gdb:type>} object which represents an array of this | 
|  | type.  If one argument is given, it is the inclusive upper bound of | 
|  | the array; in this case the lower bound is zero.  If two arguments are | 
|  | given, the first argument is the lower bound of the array, and the | 
|  | second argument is the upper bound of the array.  An array's length | 
|  | must not be negative, but the bounds can be. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} type-vector type n1 @r{[}n2@r{]} | 
|  | Return a new @code{<gdb:type>} object which represents a vector of this | 
|  | type.  If one argument is given, it is the inclusive upper bound of | 
|  | the vector; in this case the lower bound is zero.  If two arguments are | 
|  | given, the first argument is the lower bound of the vector, and the | 
|  | second argument is the upper bound of the vector.  A vector's length | 
|  | must not be negative, but the bounds can be. | 
|  |  | 
|  | The difference between an @code{array} and a @code{vector} is that | 
|  | arrays behave like in C: when used in expressions they decay to a pointer | 
|  | to the first element whereas vectors are treated as first class values. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} type-pointer type | 
|  | Return a new @code{<gdb:type>} object which represents a pointer to | 
|  | @var{type}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} type-range type | 
|  | Return a list of two elements: the low bound and high bound of @var{type}. | 
|  | If @var{type} does not have a range, an exception is thrown. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} type-reference type | 
|  | Return a new @code{<gdb:type>} object which represents a reference to | 
|  | @var{type}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} type-target type | 
|  | Return a new @code{<gdb:type>} object which represents the target type | 
|  | of @var{type}. | 
|  |  | 
|  | For a pointer type, the target type is the type of the pointed-to | 
|  | object.  For an array type (meaning C-like arrays), the target type is | 
|  | the type of the elements of the array.  For a function or method type, | 
|  | the target type is the type of the return value.  For a complex type, | 
|  | the target type is the type of the elements.  For a typedef, the | 
|  | target type is the aliased type. | 
|  |  | 
|  | If the type does not have a target, this method will throw an | 
|  | exception. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} type-const type | 
|  | Return a new @code{<gdb:type>} object which represents a | 
|  | @code{const}-qualified variant of @var{type}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} type-volatile type | 
|  | Return a new @code{<gdb:type>} object which represents a | 
|  | @code{volatile}-qualified variant of @var{type}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} type-unqualified type | 
|  | Return a new @code{<gdb:type>} object which represents an unqualified | 
|  | variant of @var{type}.  That is, the result is neither @code{const} nor | 
|  | @code{volatile}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} type-num-fields | 
|  | Return the number of fields of @code{<gdb:type>} @var{type}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} type-fields type | 
|  | Return the fields of @var{type} as a list. | 
|  | For structure and union types, @code{fields} has the usual meaning. | 
|  | Range types have two fields, the minimum and maximum values.  Enum types | 
|  | have one field per enum constant.  Function and method types have one | 
|  | field per parameter.  The base types of C@t{++} classes are also | 
|  | represented as fields.  If the type has no fields, or does not fit | 
|  | into one of these categories, an empty list will be returned. | 
|  | @xref{Fields of a type in Guile}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} make-field-iterator type | 
|  | Return the fields of @var{type} as a <gdb:iterator> object. | 
|  | @xref{Iterators In Guile}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} type-field type field-name | 
|  | Return field named @var{field-name} in @var{type}. | 
|  | The result is an object of type @code{<gdb:field>}. | 
|  | @xref{Fields of a type in Guile}. | 
|  | If the type does not have fields, or @var{field-name} is not a field | 
|  | of @var{type}, an exception is thrown. | 
|  |  | 
|  | For example, if @code{some-type} is a @code{<gdb:type>} instance holding | 
|  | a structure type, you can access its @code{foo} field with: | 
|  |  | 
|  | @smallexample | 
|  | (define bar (type-field some-type "foo")) | 
|  | @end smallexample | 
|  |  | 
|  | @code{bar} will be a @code{<gdb:field>} object. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} type-has-field? type name | 
|  | Return @code{#t} if @code{<gdb:type>} @var{type} has field named @var{name}. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | Each type has a code, which indicates what category this type falls | 
|  | into.  The available type categories are represented by constants | 
|  | defined in the @code{(gdb)} module: | 
|  |  | 
|  | @vtable @code | 
|  | @item TYPE_CODE_PTR | 
|  | The type is a pointer. | 
|  |  | 
|  | @item TYPE_CODE_ARRAY | 
|  | The type is an array. | 
|  |  | 
|  | @item TYPE_CODE_STRUCT | 
|  | The type is a structure. | 
|  |  | 
|  | @item TYPE_CODE_UNION | 
|  | The type is a union. | 
|  |  | 
|  | @item TYPE_CODE_ENUM | 
|  | The type is an enum. | 
|  |  | 
|  | @item TYPE_CODE_FLAGS | 
|  | A bit flags type, used for things such as status registers. | 
|  |  | 
|  | @item TYPE_CODE_FUNC | 
|  | The type is a function. | 
|  |  | 
|  | @item TYPE_CODE_INT | 
|  | The type is an integer type. | 
|  |  | 
|  | @item TYPE_CODE_FLT | 
|  | A floating point type. | 
|  |  | 
|  | @item TYPE_CODE_VOID | 
|  | The special type @code{void}. | 
|  |  | 
|  | @item TYPE_CODE_SET | 
|  | A Pascal set type. | 
|  |  | 
|  | @item TYPE_CODE_RANGE | 
|  | A range type, that is, an integer type with bounds. | 
|  |  | 
|  | @item TYPE_CODE_STRING | 
|  | A string type.  Note that this is only used for certain languages with | 
|  | language-defined string types; C strings are not represented this way. | 
|  |  | 
|  | @item TYPE_CODE_BITSTRING | 
|  | A string of bits.  It is deprecated. | 
|  |  | 
|  | @item TYPE_CODE_ERROR | 
|  | An unknown or erroneous type. | 
|  |  | 
|  | @item TYPE_CODE_METHOD | 
|  | A method type, as found in C@t{++}. | 
|  |  | 
|  | @item TYPE_CODE_METHODPTR | 
|  | A pointer-to-member-function. | 
|  |  | 
|  | @item TYPE_CODE_MEMBERPTR | 
|  | A pointer-to-member. | 
|  |  | 
|  | @item TYPE_CODE_REF | 
|  | A reference type. | 
|  |  | 
|  | @item TYPE_CODE_RVALUE_REF | 
|  | A C@t{++}11 rvalue reference type. | 
|  |  | 
|  | @item TYPE_CODE_CHAR | 
|  | A character type. | 
|  |  | 
|  | @item TYPE_CODE_BOOL | 
|  | A boolean type. | 
|  |  | 
|  | @item TYPE_CODE_COMPLEX | 
|  | A complex float type. | 
|  |  | 
|  | @item TYPE_CODE_TYPEDEF | 
|  | A typedef to some other type. | 
|  |  | 
|  | @item TYPE_CODE_NAMESPACE | 
|  | A C@t{++} namespace. | 
|  |  | 
|  | @item TYPE_CODE_DECFLOAT | 
|  | A decimal floating point type. | 
|  |  | 
|  | @item TYPE_CODE_INTERNAL_FUNCTION | 
|  | A function internal to @value{GDBN}.  This is the type used to represent | 
|  | convenience functions (@pxref{Convenience Funs}). | 
|  |  | 
|  | @vindex TYPE_CODE_XMETHOD | 
|  | @item gdb.TYPE_CODE_XMETHOD | 
|  | A method internal to @value{GDBN}.  This is the type used to represent | 
|  | xmethods (@pxref{Writing an Xmethod}). | 
|  |  | 
|  | @vindex TYPE_CODE_FIXED_POINT | 
|  | @item gdb.TYPE_CODE_FIXED_POINT | 
|  | A fixed-point number. | 
|  |  | 
|  | @vindex TYPE_CODE_NAMESPACE | 
|  | @item gdb.TYPE_CODE_NAMESPACE | 
|  | A Fortran namelist. | 
|  | @end vtable | 
|  |  | 
|  | Further support for types is provided in the @code{(gdb types)} | 
|  | Guile module (@pxref{Guile Types Module}). | 
|  |  | 
|  | @anchor{Fields of a type in Guile} | 
|  | Each field is represented as an object of type @code{<gdb:field>}. | 
|  |  | 
|  | The following field-related procedures are provided by the | 
|  | @code{(gdb)} module: | 
|  |  | 
|  | @deffn {Scheme Procedure} field? object | 
|  | Return @code{#t} if @var{object} is an object of type @code{<gdb:field>}. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} field-name field | 
|  | Return the name of the field, or @code{#f} for anonymous fields. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} field-type field | 
|  | Return the type of the field.  This is usually an instance of | 
|  | @code{<gdb:type>}, but it can be @code{#f} in some situations. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} field-enumval field | 
|  | Return the enum value represented by @code{<gdb:field>} @var{field}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} field-bitpos field | 
|  | Return the bit position of @code{<gdb:field>} @var{field}. | 
|  | This attribute is not available for @code{static} fields (as in | 
|  | C@t{++}). | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} field-bitsize field | 
|  | If the field is packed, or is a bitfield, return the size of | 
|  | @code{<gdb:field>} @var{field} in bits.  Otherwise, zero is returned; | 
|  | in which case the field's size is given by its type. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} field-artificial? field | 
|  | Return @code{#t} if the field is artificial, usually meaning that | 
|  | it was provided by the compiler and not the user. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} field-base-class? field | 
|  | Return @code{#t} if the field represents a base class of a C@t{++} | 
|  | structure. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @node Guile Pretty Printing API | 
|  | @subsubsection Guile Pretty Printing API | 
|  | @cindex guile pretty printing api | 
|  |  | 
|  | An example output is provided (@pxref{Pretty Printing}). | 
|  |  | 
|  | A pretty-printer is represented by an object of type <gdb:pretty-printer>. | 
|  | Pretty-printer objects are created with @code{make-pretty-printer}. | 
|  |  | 
|  | The following pretty-printer-related procedures are provided by the | 
|  | @code{(gdb)} module: | 
|  |  | 
|  | @deffn {Scheme Procedure} make-pretty-printer name lookup-function | 
|  | Return a @code{<gdb:pretty-printer>} object named @var{name}. | 
|  |  | 
|  | @var{lookup-function} is a function of one parameter: the value to | 
|  | be printed.  If the value is handled by this pretty-printer, then | 
|  | @var{lookup-function} returns an object of type | 
|  | <gdb:pretty-printer-worker> to perform the actual pretty-printing. | 
|  | Otherwise @var{lookup-function} returns @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} pretty-printer? object | 
|  | Return @code{#t} if @var{object} is a @code{<gdb:pretty-printer>} object. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} pretty-printer-enabled? pretty-printer | 
|  | Return @code{#t} if @var{pretty-printer} is enabled. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} set-pretty-printer-enabled! pretty-printer flag | 
|  | Set the enabled flag of @var{pretty-printer} to @var{flag}. | 
|  | The value returned is unspecified. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} pretty-printers | 
|  | Return the list of global pretty-printers. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} set-pretty-printers! pretty-printers | 
|  | Set the list of global pretty-printers to @var{pretty-printers}. | 
|  | The value returned is unspecified. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} make-pretty-printer-worker display-hint to-string children | 
|  | Return an object of type @code{<gdb:pretty-printer-worker>}. | 
|  |  | 
|  | This function takes three parameters: | 
|  |  | 
|  | @table @samp | 
|  | @item display-hint | 
|  | @var{display-hint} provides a hint to @value{GDBN} or @value{GDBN} | 
|  | front end via MI to change the formatting of the value being printed. | 
|  | The value must be a string or @code{#f} (meaning there is no hint). | 
|  | Several values for @var{display-hint} | 
|  | are predefined by @value{GDBN}: | 
|  |  | 
|  | @table @samp | 
|  | @item array | 
|  | Indicate that the object being printed is ``array-like''.  The CLI | 
|  | uses this to respect parameters such as @code{set print elements} and | 
|  | @code{set print array}. | 
|  |  | 
|  | @item map | 
|  | Indicate that the object being printed is ``map-like'', and that the | 
|  | children of this value can be assumed to alternate between keys and | 
|  | values. | 
|  |  | 
|  | @item string | 
|  | Indicate that the object being printed is ``string-like''.  If the | 
|  | printer's @code{to-string} function returns a Guile string of some | 
|  | kind, then @value{GDBN} will call its internal language-specific | 
|  | string-printing function to format the string.  For the CLI this means | 
|  | adding quotation marks, possibly escaping some characters, respecting | 
|  | @code{set print elements}, and the like. | 
|  | @end table | 
|  |  | 
|  | @item to-string | 
|  | @var{to-string} is either a function of one parameter, the | 
|  | @code{<gdb:pretty-printer-worker>} object, or @code{#f}. | 
|  |  | 
|  | When printing from the CLI, if the @code{to-string} method exists, | 
|  | then @value{GDBN} will prepend its result to the values returned by | 
|  | @code{children}.  Exactly how this formatting is done is dependent on | 
|  | the display hint, and may change as more hints are added.  Also, | 
|  | depending on the print settings (@pxref{Print Settings}), the CLI may | 
|  | print just the result of @code{to-string} in a stack trace, omitting | 
|  | the result of @code{children}. | 
|  |  | 
|  | If this method returns a string, it is printed verbatim. | 
|  |  | 
|  | Otherwise, if this method returns an instance of @code{<gdb:value>}, | 
|  | then @value{GDBN} prints this value.  This may result in a call to | 
|  | another pretty-printer. | 
|  |  | 
|  | If instead the method returns a Guile value which is convertible to a | 
|  | @code{<gdb:value>}, then @value{GDBN} performs the conversion and prints | 
|  | the resulting value.  Again, this may result in a call to another | 
|  | pretty-printer.  Guile scalars (integers, floats, and booleans) and | 
|  | strings are convertible to @code{<gdb:value>}; other types are not. | 
|  |  | 
|  | Finally, if this method returns @code{#f} then no further operations | 
|  | are performed in this method and nothing is printed. | 
|  |  | 
|  | If the result is not one of these types, an exception is raised. | 
|  |  | 
|  | @var{to-string} may also be @code{#f} in which case it is left to | 
|  | @var{children} to print the value. | 
|  |  | 
|  | @item children | 
|  | @var{children} is either a function of one parameter, the | 
|  | @code{<gdb:pretty-printer-worker>} object, or @code{#f}. | 
|  |  | 
|  | @value{GDBN} will call this function on a pretty-printer to compute the | 
|  | children of the pretty-printer's value. | 
|  |  | 
|  | This function must return a <gdb:iterator> object. | 
|  | Each item returned by the iterator must be a tuple holding | 
|  | two elements.  The first element is the ``name'' of the child; the | 
|  | second element is the child's value.  The value can be any Guile | 
|  | object which is convertible to a @value{GDBN} value. | 
|  |  | 
|  | If @var{children} is @code{#f}, @value{GDBN} will act | 
|  | as though the value has no children. | 
|  |  | 
|  | Children may be hidden from display based on the value of @samp{set | 
|  | print max-depth} (@pxref{Print Settings}). | 
|  | @end table | 
|  | @end deffn | 
|  |  | 
|  | @value{GDBN} provides a function which can be used to look up the | 
|  | default pretty-printer for a @code{<gdb:value>}: | 
|  |  | 
|  | @deffn {Scheme Procedure} default-visualizer value | 
|  | This function takes a @code{<gdb:value>} object as an argument.  If a | 
|  | pretty-printer for this value exists, then it is returned.  If no such | 
|  | printer exists, then this returns @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @node Selecting Guile Pretty-Printers | 
|  | @subsubsection Selecting Guile Pretty-Printers | 
|  | @cindex selecting guile pretty-printers | 
|  |  | 
|  | There are three sets of pretty-printers that @value{GDBN} searches: | 
|  |  | 
|  | @itemize @bullet | 
|  | @item | 
|  | Per-objfile list of pretty-printers (@pxref{Objfiles In Guile}). | 
|  | @item | 
|  | Per-progspace list of pretty-printers (@pxref{Progspaces In Guile}). | 
|  | @item | 
|  | The global list of pretty-printers (@pxref{Guile Pretty Printing API}). | 
|  | These printers are available when debugging any inferior. | 
|  | @end itemize | 
|  |  | 
|  | Pretty-printer lookup is done by passing the value to be printed to the | 
|  | lookup function of each enabled object in turn. | 
|  | Lookup stops when a lookup function returns a non-@code{#f} value | 
|  | or when the list is exhausted. | 
|  | Lookup functions must return either a @code{<gdb:pretty-printer-worker>} | 
|  | object or @code{#f}.  Otherwise an exception is thrown. | 
|  |  | 
|  | @value{GDBN} first checks the result of @code{objfile-pretty-printers} | 
|  | of each @code{<gdb:objfile>} in the current program space and iteratively | 
|  | calls each enabled lookup function in the list for that @code{<gdb:objfile>} | 
|  | until a non-@code{#f} object is returned. | 
|  | If no pretty-printer is found in the objfile lists, @value{GDBN} then | 
|  | searches the result of @code{progspace-pretty-printers} of the current | 
|  | program space, calling each enabled function until a non-@code{#f} object | 
|  | is returned. | 
|  | After these lists have been exhausted, it tries the global pretty-printers | 
|  | list, obtained with @code{pretty-printers}, again calling each enabled | 
|  | function until a non-@code{#f} object is returned. | 
|  |  | 
|  | The order in which the objfiles are searched is not specified.  For a | 
|  | given list, functions are always invoked from the head of the list, | 
|  | and iterated over sequentially until the end of the list, or a | 
|  | @code{<gdb:pretty-printer-worker>} object is returned. | 
|  |  | 
|  | For various reasons a pretty-printer may not work. | 
|  | For example, the underlying data structure may have changed and | 
|  | the pretty-printer is out of date. | 
|  |  | 
|  | The consequences of a broken pretty-printer are severe enough that | 
|  | @value{GDBN} provides support for enabling and disabling individual | 
|  | printers.  For example, if @code{print frame-arguments} is on, | 
|  | a backtrace can become highly illegible if any argument is printed | 
|  | with a broken printer. | 
|  |  | 
|  | Pretty-printers are enabled and disabled from Scheme by calling | 
|  | @code{set-pretty-printer-enabled!}. | 
|  | @xref{Guile Pretty Printing API}. | 
|  |  | 
|  | @node Writing a Guile Pretty-Printer | 
|  | @subsubsection Writing a Guile Pretty-Printer | 
|  | @cindex writing a Guile pretty-printer | 
|  |  | 
|  | A pretty-printer consists of two basic parts: a lookup function to determine | 
|  | if the type is supported, and the printer itself. | 
|  |  | 
|  | Here is an example showing how a @code{std::string} printer might be | 
|  | written.  @xref{Guile Pretty Printing API}, for details. | 
|  |  | 
|  | @smallexample | 
|  | (define (make-my-string-printer value) | 
|  | "Print a my::string string" | 
|  | (make-pretty-printer-worker | 
|  | "string" | 
|  | (lambda (printer) | 
|  | (value-field value "_data")) | 
|  | #f)) | 
|  | @end smallexample | 
|  |  | 
|  | And here is an example showing how a lookup function for the printer | 
|  | example above might be written. | 
|  |  | 
|  | @smallexample | 
|  | (define (str-lookup-function pretty-printer value) | 
|  | (let ((tag (type-tag (value-type value)))) | 
|  | (and tag | 
|  | (string-prefix? "std::string<" tag) | 
|  | (make-my-string-printer value)))) | 
|  | @end smallexample | 
|  |  | 
|  | Then to register this printer in the global printer list: | 
|  |  | 
|  | @smallexample | 
|  | (append-pretty-printer! | 
|  | (make-pretty-printer "my-string" str-lookup-function)) | 
|  | @end smallexample | 
|  |  | 
|  | The example lookup function extracts the value's type, and attempts to | 
|  | match it to a type that it can pretty-print.  If it is a type the | 
|  | printer can pretty-print, it will return a <gdb:pretty-printer-worker> object. | 
|  | If not, it returns @code{#f}. | 
|  |  | 
|  | We recommend that you put your core pretty-printers into a Guile | 
|  | package.  If your pretty-printers are for use with a library, we | 
|  | further recommend embedding a version number into the package name. | 
|  | This practice will enable @value{GDBN} to load multiple versions of | 
|  | your pretty-printers at the same time, because they will have | 
|  | different names. | 
|  |  | 
|  | You should write auto-loaded code (@pxref{Guile Auto-loading}) such that it | 
|  | can be evaluated multiple times without changing its meaning.  An | 
|  | ideal auto-load file will consist solely of @code{import}s of your | 
|  | printer modules, followed by a call to a register pretty-printers with | 
|  | the current objfile. | 
|  |  | 
|  | Taken as a whole, this approach will scale nicely to multiple | 
|  | inferiors, each potentially using a different library version. | 
|  | Embedding a version number in the Guile package name will ensure that | 
|  | @value{GDBN} is able to load both sets of printers simultaneously. | 
|  | Then, because the search for pretty-printers is done by objfile, and | 
|  | because your auto-loaded code took care to register your library's | 
|  | printers with a specific objfile, @value{GDBN} will find the correct | 
|  | printers for the specific version of the library used by each | 
|  | inferior. | 
|  |  | 
|  | To continue the @code{my::string} example, | 
|  | this code might appear in @code{(my-project my-library v1)}: | 
|  |  | 
|  | @smallexample | 
|  | (use-modules (gdb)) | 
|  | (define (register-printers objfile) | 
|  | (append-objfile-pretty-printer! | 
|  | (make-pretty-printer "my-string" str-lookup-function))) | 
|  | @end smallexample | 
|  |  | 
|  | @noindent | 
|  | And then the corresponding contents of the auto-load file would be: | 
|  |  | 
|  | @smallexample | 
|  | (use-modules (gdb) (my-project my-library v1)) | 
|  | (register-printers (current-objfile)) | 
|  | @end smallexample | 
|  |  | 
|  | The previous example illustrates a basic pretty-printer. | 
|  | There are a few things that can be improved on. | 
|  | The printer only handles one type, whereas a library typically has | 
|  | several types.  One could install a lookup function for each desired type | 
|  | in the library, but one could also have a single lookup function recognize | 
|  | several types.  The latter is the conventional way this is handled. | 
|  | If a pretty-printer can handle multiple data types, then its | 
|  | @dfn{subprinters} are the printers for the individual data types. | 
|  |  | 
|  | The @code{(gdb printing)} module provides a formal way of solving this | 
|  | problem (@pxref{Guile Printing Module}). | 
|  | Here is another example that handles multiple types. | 
|  |  | 
|  | These are the types we are going to pretty-print: | 
|  |  | 
|  | @smallexample | 
|  | struct foo @{ int a, b; @}; | 
|  | struct bar @{ struct foo x, y; @}; | 
|  | @end smallexample | 
|  |  | 
|  | Here are the printers: | 
|  |  | 
|  | @smallexample | 
|  | (define (make-foo-printer value) | 
|  | "Print a foo object" | 
|  | (make-pretty-printer-worker | 
|  | "foo" | 
|  | (lambda (printer) | 
|  | (format #f "a=<~a> b=<~a>" | 
|  | (value-field value "a") (value-field value "a"))) | 
|  | #f)) | 
|  |  | 
|  | (define (make-bar-printer value) | 
|  | "Print a bar object" | 
|  | (make-pretty-printer-worker | 
|  | "foo" | 
|  | (lambda (printer) | 
|  | (format #f "x=<~a> y=<~a>" | 
|  | (value-field value "x") (value-field value "y"))) | 
|  | #f)) | 
|  | @end smallexample | 
|  |  | 
|  | This example doesn't need a lookup function, that is handled by the | 
|  | @code{(gdb printing)} module.  Instead a function is provided to build up | 
|  | the object that handles the lookup. | 
|  |  | 
|  | @smallexample | 
|  | (use-modules (gdb printing)) | 
|  |  | 
|  | (define (build-pretty-printer) | 
|  | (let ((pp (make-pretty-printer-collection "my-library"))) | 
|  | (pp-collection-add-tag-printer "foo" make-foo-printer) | 
|  | (pp-collection-add-tag-printer "bar" make-bar-printer) | 
|  | pp)) | 
|  | @end smallexample | 
|  |  | 
|  | And here is the autoload support: | 
|  |  | 
|  | @smallexample | 
|  | (use-modules (gdb) (my-library)) | 
|  | (append-objfile-pretty-printer! (current-objfile) (build-pretty-printer)) | 
|  | @end smallexample | 
|  |  | 
|  | Finally, when this printer is loaded into @value{GDBN}, here is the | 
|  | corresponding output of @samp{info pretty-printer}: | 
|  |  | 
|  | @smallexample | 
|  | (gdb) info pretty-printer | 
|  | my_library.so: | 
|  | my-library | 
|  | foo | 
|  | bar | 
|  | @end smallexample | 
|  |  | 
|  | @node Commands In Guile | 
|  | @subsubsection Commands In Guile | 
|  |  | 
|  | @cindex commands in guile | 
|  | @cindex guile commands | 
|  | You can implement new @value{GDBN} CLI commands in Guile.  A CLI | 
|  | command object is created with the @code{make-command} Guile function, | 
|  | and added to @value{GDBN} with the @code{register-command!} Guile function. | 
|  | This two-step approach is taken to separate out the side-effect of adding | 
|  | the command to @value{GDBN} from @code{make-command}. | 
|  |  | 
|  | There is no support for multi-line commands, that is commands that | 
|  | consist of multiple lines and are terminated with @code{end}. | 
|  |  | 
|  | @deffn {Scheme Procedure} make-command name @w{@r{[}#:invoke invoke@r{]}} @ | 
|  | @w{@r{[}#:command-class command-class@r{]}} @ | 
|  | @w{@r{[}#:completer-class completer@r{]}} @ | 
|  | @w{@r{[}#:prefix? prefix@r{]}} @w{@r{[}#:doc doc-string@r{]}} | 
|  |  | 
|  | The argument @var{name} is the name of the command.  If @var{name} consists of | 
|  | multiple words, then the initial words are looked for as prefix | 
|  | commands.  In this case, if one of the prefix commands does not exist, | 
|  | an exception is raised. | 
|  |  | 
|  | The result is the @code{<gdb:command>} object representing the command. | 
|  | The command is not usable until it has been registered with @value{GDBN} | 
|  | with @code{register-command!}. | 
|  |  | 
|  | The rest of the arguments are optional. | 
|  |  | 
|  | The argument @var{invoke} is a procedure of three arguments: @var{self}, | 
|  | @var{args} and @var{from-tty}.  The argument @var{self} is the | 
|  | @code{<gdb:command>} object representing the command. | 
|  | The argument @var{args} is a string representing the arguments passed to | 
|  | the command, after leading and trailing whitespace has been stripped. | 
|  | The argument @var{from-tty} is a boolean flag and specifies whether the | 
|  | command should consider itself to have been originated from the user | 
|  | invoking it interactively.  If this function throws an exception, | 
|  | it is turned into a @value{GDBN} @code{error} call. | 
|  | Otherwise, the return value is ignored. | 
|  |  | 
|  | The argument @var{command-class} is one of the @samp{COMMAND_} constants | 
|  | defined below.  This argument tells @value{GDBN} how to categorize the | 
|  | new command in the help system.  The default is @code{COMMAND_NONE}. | 
|  |  | 
|  | The argument @var{completer} is either @code{#f}, one of the @samp{COMPLETE_} | 
|  | constants defined below, or a procedure, also defined below. | 
|  | This argument tells @value{GDBN} how to perform completion | 
|  | for this command.  If not provided or if the value is @code{#f}, | 
|  | then no completion is performed on the command. | 
|  |  | 
|  | The argument @var{prefix} is a boolean flag indicating whether the new | 
|  | command is a prefix command; sub-commands of this command may be | 
|  | registered. | 
|  |  | 
|  | The argument @var{doc-string} is help text for the new command. | 
|  | If no documentation string is provided, the default value ``This command is | 
|  | not documented.'' is used. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} register-command! command | 
|  | Add @var{command}, a @code{<gdb:command>} object, to @value{GDBN}'s | 
|  | list of commands. | 
|  | It is an error to register a command more than once. | 
|  | The result is unspecified. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} command? object | 
|  | Return @code{#t} if @var{object} is a @code{<gdb:command>} object. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @cindex don't repeat Guile command | 
|  | @deffn {Scheme Procedure} dont-repeat | 
|  | By default, a @value{GDBN} command is repeated when the user enters a | 
|  | blank line at the command prompt.  A command can suppress this | 
|  | behavior by invoking the @code{dont-repeat} function.  This is similar | 
|  | to the user command @code{dont-repeat}, see @ref{Define, dont-repeat}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} string->argv string | 
|  | Convert a string to a list of strings split up according to | 
|  | @value{GDBN}'s argv parsing rules. | 
|  | It is recommended to use this for consistency. | 
|  | Arguments are separated by spaces and may be quoted. | 
|  | Example: | 
|  |  | 
|  | @smallexample | 
|  | scheme@@(guile-user)> (string->argv "1 2\\ \\\"3 '4 \"5' \"6 '7\"") | 
|  | $1 = ("1" "2 \"3" "4 \"5" "6 '7") | 
|  | @end smallexample | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} throw-user-error message . args | 
|  | Throw a @code{gdb:user-error} exception. | 
|  | The argument @var{message} is the error message as a format string, like the | 
|  | @var{fmt} argument to the @code{format} Scheme function. | 
|  | @xref{Formatted Output,,, guile, GNU Guile Reference Manual}. | 
|  | The argument @var{args} is a list of the optional arguments of @var{message}. | 
|  |  | 
|  | This is used when the command detects a user error of some kind, | 
|  | say a bad command argument. | 
|  |  | 
|  | @smallexample | 
|  | (gdb) guile (use-modules (gdb)) | 
|  | (gdb) guile | 
|  | (register-command! (make-command "test-user-error" | 
|  | #:command-class COMMAND_OBSCURE | 
|  | #:invoke (lambda (self arg from-tty) | 
|  | (throw-user-error "Bad argument ~a" arg)))) | 
|  | end | 
|  | (gdb) test-user-error ugh | 
|  | ERROR: Bad argument ugh | 
|  | @end smallexample | 
|  | @end deffn | 
|  |  | 
|  | @cindex completion of Guile commands | 
|  | @deffn completer self text word | 
|  | If the @var{completer} option to @code{make-command} is a procedure, | 
|  | it takes three arguments: @var{self} which is the @code{<gdb:command>} | 
|  | object, and @var{text} and @var{word} which are both strings. | 
|  | The argument @var{text} holds the complete command line up to the cursor's | 
|  | location.  The argument @var{word} holds the last word of the command line; | 
|  | this is computed using a word-breaking heuristic. | 
|  |  | 
|  | All forms of completion are handled by this function, that is, | 
|  | the @key{TAB} and @key{M-?} key bindings (@pxref{Completion}), | 
|  | and the @code{complete} command (@pxref{Help, complete}). | 
|  |  | 
|  | This procedure can return several kinds of values: | 
|  |  | 
|  | @itemize @bullet | 
|  | @item | 
|  | If the return value is a list, the contents of the list are used as the | 
|  | completions.  It is up to @var{completer} to ensure that the | 
|  | contents actually do complete the word.  An empty list is | 
|  | allowed, it means that there were no completions available.  Only | 
|  | string elements of the list are used; other elements in the | 
|  | list are ignored. | 
|  |  | 
|  | @item | 
|  | If the return value is a @code{<gdb:iterator>} object, it is iterated over to | 
|  | obtain the completions.  It is up to @code{completer-procedure} to ensure | 
|  | that the results actually do complete the word.  Only | 
|  | string elements of the result are used; other elements in the | 
|  | sequence are ignored. | 
|  |  | 
|  | @item | 
|  | All other results are treated as though there were no available | 
|  | completions. | 
|  | @end itemize | 
|  | @end deffn | 
|  |  | 
|  | When a new command is registered, it will have been declared as a member of | 
|  | some general class of commands.  This is used to classify top-level | 
|  | commands in the on-line help system; note that prefix commands are not | 
|  | listed under their own category but rather that of their top-level | 
|  | command.  The available classifications are represented by constants | 
|  | defined in the @code{gdb} module: | 
|  |  | 
|  | @vtable @code | 
|  | @item COMMAND_NONE | 
|  | The command does not belong to any particular class.  A command in | 
|  | this category will not be displayed in any of the help categories. | 
|  | This is the default. | 
|  |  | 
|  | @item COMMAND_RUNNING | 
|  | The command is related to running the inferior.  For example, | 
|  | @code{start}, @code{step}, and @code{continue} are in this category. | 
|  | Type @kbd{help running} at the @value{GDBN} prompt to see a list of | 
|  | commands in this category. | 
|  |  | 
|  | @item COMMAND_DATA | 
|  | The command is related to data or variables.  For example, | 
|  | @code{call}, @code{find}, and @code{print} are in this category.  Type | 
|  | @kbd{help data} at the @value{GDBN} prompt to see a list of commands | 
|  | in this category. | 
|  |  | 
|  | @item COMMAND_STACK | 
|  | The command has to do with manipulation of the stack.  For example, | 
|  | @code{backtrace}, @code{frame}, and @code{return} are in this | 
|  | category.  Type @kbd{help stack} at the @value{GDBN} prompt to see a | 
|  | list of commands in this category. | 
|  |  | 
|  | @item COMMAND_FILES | 
|  | This class is used for file-related commands.  For example, | 
|  | @code{file}, @code{list} and @code{section} are in this category. | 
|  | Type @kbd{help files} at the @value{GDBN} prompt to see a list of | 
|  | commands in this category. | 
|  |  | 
|  | @item COMMAND_SUPPORT | 
|  | This should be used for ``support facilities'', generally meaning | 
|  | things that are useful to the user when interacting with @value{GDBN}, | 
|  | but not related to the state of the inferior.  For example, | 
|  | @code{help}, @code{make}, and @code{shell} are in this category.  Type | 
|  | @kbd{help support} at the @value{GDBN} prompt to see a list of | 
|  | commands in this category. | 
|  |  | 
|  | @item COMMAND_STATUS | 
|  | The command is an @samp{info}-related command, that is, related to the | 
|  | state of @value{GDBN} itself.  For example, @code{info}, @code{macro}, | 
|  | and @code{show} are in this category.  Type @kbd{help status} at the | 
|  | @value{GDBN} prompt to see a list of commands in this category. | 
|  |  | 
|  | @item COMMAND_BREAKPOINTS | 
|  | The command has to do with breakpoints.  For example, @code{break}, | 
|  | @code{clear}, and @code{delete} are in this category.  Type @kbd{help | 
|  | breakpoints} at the @value{GDBN} prompt to see a list of commands in | 
|  | this category. | 
|  |  | 
|  | @item COMMAND_TRACEPOINTS | 
|  | The command has to do with tracepoints.  For example, @code{trace}, | 
|  | @code{actions}, and @code{tfind} are in this category.  Type | 
|  | @kbd{help tracepoints} at the @value{GDBN} prompt to see a list of | 
|  | commands in this category. | 
|  |  | 
|  | @item COMMAND_USER | 
|  | The command is a general purpose command for the user, and typically | 
|  | does not fit in one of the other categories. | 
|  | Type @kbd{help user-defined} at the @value{GDBN} prompt to see | 
|  | a list of commands in this category, as well as the list of gdb macros | 
|  | (@pxref{Sequences}). | 
|  |  | 
|  | @item COMMAND_OBSCURE | 
|  | The command is only used in unusual circumstances, or is not of | 
|  | general interest to users.  For example, @code{checkpoint}, | 
|  | @code{fork}, and @code{stop} are in this category.  Type @kbd{help | 
|  | obscure} at the @value{GDBN} prompt to see a list of commands in this | 
|  | category. | 
|  |  | 
|  | @item COMMAND_MAINTENANCE | 
|  | The command is only useful to @value{GDBN} maintainers.  The | 
|  | @code{maintenance} and @code{flushregs} commands are in this category. | 
|  | Type @kbd{help internals} at the @value{GDBN} prompt to see a list of | 
|  | commands in this category. | 
|  | @end vtable | 
|  |  | 
|  | A new command can use a predefined completion function, either by | 
|  | specifying it via an argument at initialization, or by returning it | 
|  | from the @code{completer} procedure.  These predefined completion | 
|  | constants are all defined in the @code{gdb} module: | 
|  |  | 
|  | @vtable @code | 
|  | @item COMPLETE_NONE | 
|  | This constant means that no completion should be done. | 
|  |  | 
|  | @item COMPLETE_FILENAME | 
|  | This constant means that filename completion should be performed. | 
|  |  | 
|  | @item COMPLETE_LOCATION | 
|  | This constant means that location completion should be done. | 
|  | @xref{Location Specifications}. | 
|  |  | 
|  | @item COMPLETE_COMMAND | 
|  | This constant means that completion should examine @value{GDBN} | 
|  | command names. | 
|  |  | 
|  | @item COMPLETE_SYMBOL | 
|  | This constant means that completion should be done using symbol names | 
|  | as the source. | 
|  |  | 
|  | @item COMPLETE_EXPRESSION | 
|  | This constant means that completion should be done on expressions. | 
|  | Often this means completing on symbol names, but some language | 
|  | parsers also have support for completing on field names. | 
|  | @end vtable | 
|  |  | 
|  | The following code snippet shows how a trivial CLI command can be | 
|  | implemented in Guile: | 
|  |  | 
|  | @smallexample | 
|  | (gdb) guile | 
|  | (register-command! (make-command "hello-world" | 
|  | #:command-class COMMAND_USER | 
|  | #:doc "Greet the whole world." | 
|  | #:invoke (lambda (self args from-tty) (display "Hello, World!\n")))) | 
|  | end | 
|  | (gdb) hello-world | 
|  | Hello, World! | 
|  | @end smallexample | 
|  |  | 
|  | @node Parameters In Guile | 
|  | @subsubsection Parameters In Guile | 
|  |  | 
|  | @cindex parameters in guile | 
|  | @cindex guile parameters | 
|  | @tindex Parameter | 
|  | You can implement new @value{GDBN} @dfn{parameters} using Guile | 
|  | @footnote{Note that @value{GDBN} parameters must not be confused with | 
|  | Guile’s parameter objects (@pxref{Parameters,,, guile, GNU Guile | 
|  | Reference Manual}).}. | 
|  |  | 
|  | There are many parameters that already exist and can be set in | 
|  | @value{GDBN}.  Two examples are: @code{set follow-fork} and | 
|  | @code{set charset}.  Setting these parameters influences certain | 
|  | behavior in @value{GDBN}.  Similarly, you can define parameters that | 
|  | can be used to influence behavior in custom Guile scripts and commands. | 
|  |  | 
|  | A new parameter is defined with the @code{make-parameter} Guile function, | 
|  | and added to @value{GDBN} with the @code{register-parameter!} Guile function. | 
|  | This two-step approach is taken to separate out the side-effect of adding | 
|  | the parameter to @value{GDBN} from @code{make-parameter}. | 
|  |  | 
|  | Parameters are exposed to the user via the @code{set} and | 
|  | @code{show} commands.  @xref{Help}. | 
|  |  | 
|  | @deffn {Scheme Procedure} make-parameter name @ | 
|  | @w{@r{[}#:command-class command-class@r{]}} @ | 
|  | @w{@r{[}#:parameter-type parameter-type@r{]}} @ | 
|  | @w{@r{[}#:enum-list enum-list@r{]}} @w{@r{[}#:set-func set-func@r{]}} @ | 
|  | @w{@r{[}#:show-func show-func@r{]}} @w{@r{[}#:doc doc@r{]}} @ | 
|  | @w{@r{[}#:set-doc set-doc@r{]}} @w{@r{[}#:show-doc show-doc@r{]}} @ | 
|  | @w{@r{[}#:initial-value initial-value@r{]}} | 
|  |  | 
|  | The argument @var{name} is the name of the new parameter.  If @var{name} | 
|  | consists of multiple words, then the initial words are looked for as prefix | 
|  | parameters.  An example of this can be illustrated with the | 
|  | @code{set print} set of parameters.  If @var{name} is | 
|  | @code{print foo}, then @code{print} will be searched as the prefix | 
|  | parameter.  In this case the parameter can subsequently be accessed in | 
|  | @value{GDBN} as @code{set print foo}. | 
|  | If @var{name} consists of multiple words, and no prefix parameter group | 
|  | can be found, an exception is raised. | 
|  |  | 
|  | The result is the @code{<gdb:parameter>} object representing the parameter. | 
|  | The parameter is not usable until it has been registered with @value{GDBN} | 
|  | with @code{register-parameter!}. | 
|  |  | 
|  | The rest of the arguments are optional. | 
|  |  | 
|  | The argument @var{command-class} should be one of the @samp{COMMAND_} constants | 
|  | (@pxref{Commands In Guile}).  This argument tells @value{GDBN} how to | 
|  | categorize the new parameter in the help system. | 
|  | The default is @code{COMMAND_NONE}. | 
|  |  | 
|  | The argument @var{parameter-type} should be one of the @samp{PARAM_} constants | 
|  | defined below.  This argument tells @value{GDBN} the type of the new | 
|  | parameter; this information is used for input validation and | 
|  | completion.  The default is @code{PARAM_BOOLEAN}. | 
|  |  | 
|  | If @var{parameter-type} is @code{PARAM_ENUM}, then | 
|  | @var{enum-list} must be a list of strings.  These strings | 
|  | represent the possible values for the parameter. | 
|  |  | 
|  | If @var{parameter-type} is not @code{PARAM_ENUM}, then the presence | 
|  | of @var{enum-list} will cause an exception to be thrown. | 
|  |  | 
|  | The argument @var{set-func} is a function of one argument: @var{self} which | 
|  | is the @code{<gdb:parameter>} object representing the parameter. | 
|  | @value{GDBN} will call this function when a @var{parameter}'s value has | 
|  | been changed via the @code{set} API (for example, @kbd{set foo off}). | 
|  | The value of the parameter has already been set to the new value. | 
|  | This function must return a string to be displayed to the user. | 
|  | @value{GDBN} will add a trailing newline if the string is non-empty. | 
|  | @value{GDBN} generally doesn't print anything when a parameter is set, | 
|  | thus typically this function should return @samp{""}. | 
|  | A non-empty string result should typically be used for displaying warnings | 
|  | and errors. | 
|  |  | 
|  | The argument @var{show-func} is a function of two arguments: @var{self} which | 
|  | is the @code{<gdb:parameter>} object representing the parameter, and | 
|  | @var{svalue} which is the string representation of the current value. | 
|  | @value{GDBN} will call this function when a @var{parameter}'s | 
|  | @code{show} API has been invoked (for example, @kbd{show foo}). | 
|  | This function must return a string, and will be displayed to the user. | 
|  | @value{GDBN} will add a trailing newline. | 
|  |  | 
|  | The argument @var{doc} is the help text for the new parameter.  If | 
|  | there is no documentation string, a default value is used.  If the | 
|  | documentation string is empty, then @value{GDBN} will print just the | 
|  | @var{set-doc} and @var{show-doc} strings (see below). | 
|  |  | 
|  | The argument @var{set-doc} is the help text for this parameter's | 
|  | @code{set} command. | 
|  |  | 
|  | The argument @var{show-doc} is the help text for this parameter's | 
|  | @code{show} command. | 
|  |  | 
|  | The argument @var{initial-value} specifies the initial value of the parameter. | 
|  | If it is a function, it takes one parameter, the @code{<gdb:parameter>} | 
|  | object and its result is used as the initial value of the parameter. | 
|  | The initial value must be valid for the parameter type, | 
|  | otherwise an exception is thrown. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} register-parameter! parameter | 
|  | Add @var{parameter}, a @code{<gdb:parameter>} object, to @value{GDBN}'s | 
|  | list of parameters. | 
|  | It is an error to register a parameter more than once. | 
|  | The result is unspecified. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} parameter? object | 
|  | Return @code{#t} if @var{object} is a @code{<gdb:parameter>} object. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} parameter-value parameter | 
|  | Return the value of @var{parameter} which may either be | 
|  | a @code{<gdb:parameter>} object or a string naming the parameter. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} set-parameter-value! parameter new-value | 
|  | Assign @var{parameter} the value of @var{new-value}. | 
|  | The argument @var{parameter} must be an object of type @code{<gdb:parameter>}. | 
|  | @value{GDBN} does validation when assignments are made. | 
|  | @end deffn | 
|  |  | 
|  | When a new parameter is defined, its type must be specified.  The | 
|  | available types are represented by constants defined in the @code{gdb} | 
|  | module: | 
|  |  | 
|  | @vtable @code | 
|  | @item PARAM_BOOLEAN | 
|  | The value is a plain boolean.  The Guile boolean values, @code{#t} | 
|  | and @code{#f} are the only valid values. | 
|  |  | 
|  | @item PARAM_AUTO_BOOLEAN | 
|  | The value has three possible states: true, false, and @samp{auto}.  In | 
|  | Guile, true and false are represented using boolean constants, and | 
|  | @samp{auto} is represented using @code{#:auto}. | 
|  |  | 
|  | @item PARAM_UINTEGER | 
|  | The value is an unsigned integer.  The value of @code{#:unlimited} | 
|  | should be interpreted to mean ``unlimited'', and the value of @samp{0} | 
|  | is reserved and should not be used. | 
|  |  | 
|  | @item PARAM_ZINTEGER | 
|  | The value is an integer. | 
|  |  | 
|  | @item PARAM_ZUINTEGER | 
|  | The value is an unsigned integer. | 
|  |  | 
|  | @item PARAM_ZUINTEGER_UNLIMITED | 
|  | The value is an integer in the range @samp{[0, INT_MAX]}.  The value | 
|  | of @code{#:unlimited} means ``unlimited'', the value of @samp{-1} is | 
|  | reserved and should not be used, and other negative numbers are not | 
|  | allowed. | 
|  |  | 
|  | @item PARAM_STRING | 
|  | The value is a string.  When the user modifies the string, any escape | 
|  | sequences, such as @samp{\t}, @samp{\f}, and octal escapes, are | 
|  | translated into corresponding characters and encoded into the current | 
|  | host charset. | 
|  |  | 
|  | @item PARAM_STRING_NOESCAPE | 
|  | The value is a string.  When the user modifies the string, escapes are | 
|  | passed through untranslated. | 
|  |  | 
|  | @item PARAM_OPTIONAL_FILENAME | 
|  | The value is a either a filename (a string), or @code{#f}. | 
|  |  | 
|  | @item PARAM_FILENAME | 
|  | The value is a filename.  This is just like | 
|  | @code{PARAM_STRING_NOESCAPE}, but uses file names for completion. | 
|  |  | 
|  | @item PARAM_ENUM | 
|  | The value is a string, which must be one of a collection of string | 
|  | constants provided when the parameter is created. | 
|  |  | 
|  | @item PARAM_COLOR | 
|  | The value is either a string or an unsigned integer.  Integer from 0 to 255 | 
|  | means index into terminal's color palette.  String can be a hex RGB triplet in | 
|  | @samp{#RRGGBB} format or one of the following color names: | 
|  | @samp{none} (meaning the terminal's default color), @samp{black}, @samp{red}, | 
|  | @samp{green}, @samp{yellow}, @samp{blue}, @samp{magenta}, @samp{cyan}, | 
|  | or @samp{white}. | 
|  | @end vtable | 
|  |  | 
|  | @node Progspaces In Guile | 
|  | @subsubsection Program Spaces In Guile | 
|  |  | 
|  | @cindex progspaces in guile | 
|  | @tindex <gdb:progspace> | 
|  | A program space, or @dfn{progspace}, represents a symbolic view | 
|  | of an address space. | 
|  | It consists of all of the objfiles of the program. | 
|  | @xref{Objfiles In Guile}. | 
|  | @xref{Inferiors Connections and Programs, program spaces}, for more details | 
|  | about program spaces. | 
|  |  | 
|  | Each progspace is represented by an instance of the @code{<gdb:progspace>} | 
|  | smob.  @xref{GDB Scheme Data Types}. | 
|  |  | 
|  | The following progspace-related functions are available in the | 
|  | @code{(gdb)} module: | 
|  |  | 
|  | @deffn {Scheme Procedure} progspace? object | 
|  | Return @code{#t} if @var{object} is a @code{<gdb:progspace>} object. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} progspace-valid? progspace | 
|  | Return @code{#t} if @var{progspace} is valid, @code{#f} if not. | 
|  | A @code{<gdb:progspace>} object can become invalid | 
|  | if the program it refers to is not loaded in @value{GDBN} any longer. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} current-progspace | 
|  | This function returns the program space of the currently selected inferior. | 
|  | There is always a current progspace, this never returns @code{#f}. | 
|  | @xref{Inferiors Connections and Programs}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} progspaces | 
|  | Return a list of all the progspaces currently known to @value{GDBN}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} progspace-filename progspace | 
|  | Return the absolute file name of @var{progspace} as a string. | 
|  | This is the name of the file passed as the argument to the @code{file} | 
|  | or @code{symbol-file} commands. | 
|  | If the program space does not have an associated file name, | 
|  | then @code{#f} is returned.  This occurs, for example, when @value{GDBN} | 
|  | is started without a program to debug. | 
|  |  | 
|  | A @code{gdb:invalid-object-error} exception is thrown if @var{progspace} | 
|  | is invalid. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} progspace-objfiles progspace | 
|  | Return the list of objfiles of @var{progspace}. | 
|  | The order of objfiles in the result is arbitrary. | 
|  | Each element is an object of type @code{<gdb:objfile>}. | 
|  | @xref{Objfiles In Guile}. | 
|  |  | 
|  | A @code{gdb:invalid-object-error} exception is thrown if @var{progspace} | 
|  | is invalid. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} progspace-pretty-printers progspace | 
|  | Return the list of pretty-printers of @var{progspace}. | 
|  | Each element is an object of type @code{<gdb:pretty-printer>}. | 
|  | @xref{Guile Pretty Printing API}, for more information. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} set-progspace-pretty-printers! progspace printer-list | 
|  | Set the list of registered @code{<gdb:pretty-printer>} objects for | 
|  | @var{progspace} to @var{printer-list}. | 
|  | @xref{Guile Pretty Printing API}, for more information. | 
|  | @end deffn | 
|  |  | 
|  | @node Objfiles In Guile | 
|  | @subsubsection Objfiles In Guile | 
|  |  | 
|  | @cindex objfiles in guile | 
|  | @tindex <gdb:objfile> | 
|  | @value{GDBN} loads symbols for an inferior from various | 
|  | symbol-containing files (@pxref{Files}).  These include the primary | 
|  | executable file, any shared libraries used by the inferior, and any | 
|  | separate debug info files (@pxref{Separate Debug Files}). | 
|  | @value{GDBN} calls these symbol-containing files @dfn{objfiles}. | 
|  |  | 
|  | Each objfile is represented as an object of type @code{<gdb:objfile>}. | 
|  |  | 
|  | The following objfile-related procedures are provided by the | 
|  | @code{(gdb)} module: | 
|  |  | 
|  | @deffn {Scheme Procedure} objfile? object | 
|  | Return @code{#t} if @var{object} is a @code{<gdb:objfile>} object. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} objfile-valid? objfile | 
|  | Return @code{#t} if @var{objfile} is valid, @code{#f} if not. | 
|  | A @code{<gdb:objfile>} object can become invalid | 
|  | if the object file it refers to is not loaded in @value{GDBN} any | 
|  | longer.  All other @code{<gdb:objfile>} procedures will throw an exception | 
|  | if it is invalid at the time the procedure is called. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} objfile-filename objfile | 
|  | Return the file name of @var{objfile} as a string, | 
|  | with symbolic links resolved. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} objfile-progspace objfile | 
|  | Return the @code{<gdb:progspace>} that this object file lives in. | 
|  | @xref{Progspaces In Guile}, for more on progspaces. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} objfile-pretty-printers objfile | 
|  | Return the list of registered @code{<gdb:pretty-printer>} objects for | 
|  | @var{objfile}.  @xref{Guile Pretty Printing API}, for more information. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} set-objfile-pretty-printers! objfile printer-list | 
|  | Set the list of registered @code{<gdb:pretty-printer>} objects for | 
|  | @var{objfile} to @var{printer-list}.  The | 
|  | @var{printer-list} must be a list of @code{<gdb:pretty-printer>} objects. | 
|  | @xref{Guile Pretty Printing API}, for more information. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} current-objfile | 
|  | When auto-loading a Guile script (@pxref{Guile Auto-loading}), @value{GDBN} | 
|  | sets the ``current objfile'' to the corresponding objfile.  This | 
|  | function returns the current objfile.  If there is no current objfile, | 
|  | this function returns @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} objfiles | 
|  | Return a list of all the objfiles in the current program space. | 
|  | @end deffn | 
|  |  | 
|  | @node Frames In Guile | 
|  | @subsubsection Accessing inferior stack frames from Guile. | 
|  |  | 
|  | @cindex frames in guile | 
|  | When the debugged program stops, @value{GDBN} is able to analyze its call | 
|  | stack (@pxref{Frames,,Stack frames}).  The @code{<gdb:frame>} class | 
|  | represents a frame in the stack.  A @code{<gdb:frame>} object is only valid | 
|  | while its corresponding frame exists in the inferior's stack.  If you try | 
|  | to use an invalid frame object, @value{GDBN} will throw a | 
|  | @code{gdb:invalid-object} exception (@pxref{Guile Exception Handling}). | 
|  |  | 
|  | Two @code{<gdb:frame>} objects can be compared for equality with the | 
|  | @code{equal?} function, like: | 
|  |  | 
|  | @smallexample | 
|  | (@value{GDBP}) guile (equal? (newest-frame) (selected-frame)) | 
|  | #t | 
|  | @end smallexample | 
|  |  | 
|  | The following frame-related procedures are provided by the | 
|  | @code{(gdb)} module: | 
|  |  | 
|  | @deffn {Scheme Procedure} frame? object | 
|  | Return @code{#t} if @var{object} is a @code{<gdb:frame>} object. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} frame-valid? frame | 
|  | Returns @code{#t} if @var{frame} is valid, @code{#f} if not. | 
|  | A frame object can become invalid if the frame it refers to doesn't | 
|  | exist anymore in the inferior.  All @code{<gdb:frame>} procedures will throw | 
|  | an exception if the frame is invalid at the time the procedure is called. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} frame-name frame | 
|  | Return the function name of @var{frame}, or @code{#f} if it can't be | 
|  | obtained. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} frame-arch frame | 
|  | Return the @code{<gdb:architecture>} object corresponding to @var{frame}'s | 
|  | architecture.  @xref{Architectures In Guile}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} frame-type frame | 
|  | Return the type of @var{frame}.  The value can be one of: | 
|  |  | 
|  | @table @code | 
|  | @item NORMAL_FRAME | 
|  | An ordinary stack frame. | 
|  |  | 
|  | @item DUMMY_FRAME | 
|  | A fake stack frame that was created by @value{GDBN} when performing an | 
|  | inferior function call. | 
|  |  | 
|  | @item INLINE_FRAME | 
|  | A frame representing an inlined function.  The function was inlined | 
|  | into a @code{NORMAL_FRAME} that is older than this one. | 
|  |  | 
|  | @item TAILCALL_FRAME | 
|  | A frame representing a tail call.  @xref{Tail Call Frames}. | 
|  |  | 
|  | @item SIGTRAMP_FRAME | 
|  | A signal trampoline frame.  This is the frame created by the OS when | 
|  | it calls into a signal handler. | 
|  |  | 
|  | @item ARCH_FRAME | 
|  | A fake stack frame representing a cross-architecture call. | 
|  |  | 
|  | @item SENTINEL_FRAME | 
|  | This is like @code{NORMAL_FRAME}, but it is only used for the | 
|  | newest frame. | 
|  | @end table | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} frame-unwind-stop-reason frame | 
|  | Return an integer representing the reason why it's not possible to find | 
|  | more frames toward the outermost frame.  Use | 
|  | @code{unwind-stop-reason-string} to convert the value returned by this | 
|  | function to a string. The value can be one of: | 
|  |  | 
|  | @table @code | 
|  | @item FRAME_UNWIND_NO_REASON | 
|  | No particular reason (older frames should be available). | 
|  |  | 
|  | @item FRAME_UNWIND_NULL_ID | 
|  | The previous frame's analyzer returns an invalid result. | 
|  |  | 
|  | @item FRAME_UNWIND_OUTERMOST | 
|  | This frame is the outermost. | 
|  |  | 
|  | @item FRAME_UNWIND_UNAVAILABLE | 
|  | Cannot unwind further, because that would require knowing the | 
|  | values of registers or memory that have not been collected. | 
|  |  | 
|  | @item FRAME_UNWIND_INNER_ID | 
|  | This frame ID looks like it ought to belong to a NEXT frame, | 
|  | but we got it for a PREV frame.  Normally, this is a sign of | 
|  | unwinder failure.  It could also indicate stack corruption. | 
|  |  | 
|  | @item FRAME_UNWIND_SAME_ID | 
|  | This frame has the same ID as the previous one.  That means | 
|  | that unwinding further would almost certainly give us another | 
|  | frame with exactly the same ID, so break the chain.  Normally, | 
|  | this is a sign of unwinder failure.  It could also indicate | 
|  | stack corruption. | 
|  |  | 
|  | @item FRAME_UNWIND_NO_SAVED_PC | 
|  | The frame unwinder did not find any saved PC, but we needed | 
|  | one to unwind further. | 
|  |  | 
|  | @item FRAME_UNWIND_MEMORY_ERROR | 
|  | The frame unwinder caused an error while trying to access memory. | 
|  |  | 
|  | @item FRAME_UNWIND_FIRST_ERROR | 
|  | Any stop reason greater or equal to this value indicates some kind | 
|  | of error.  This special value facilitates writing code that tests | 
|  | for errors in unwinding in a way that will work correctly even if | 
|  | the list of the other values is modified in future @value{GDBN} | 
|  | versions.  Using it, you could write: | 
|  |  | 
|  | @smallexample | 
|  | (define reason (frame-unwind-stop-readon (selected-frame))) | 
|  | (define reason-str (unwind-stop-reason-string reason)) | 
|  | (if (>= reason FRAME_UNWIND_FIRST_ERROR) | 
|  | (format #t "An error occurred: ~s\n" reason-str)) | 
|  | @end smallexample | 
|  | @end table | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} frame-pc frame | 
|  | Return the frame's resume address. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} frame-block frame | 
|  | Return the frame's code block as a @code{<gdb:block>} object. | 
|  | @xref{Blocks In Guile}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} frame-function frame | 
|  | Return the symbol for the function corresponding to this frame | 
|  | as a @code{<gdb:symbol>} object, or @code{#f} if there isn't one. | 
|  | @xref{Symbols In Guile}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} frame-older frame | 
|  | Return the frame that called @var{frame}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} frame-newer frame | 
|  | Return the frame called by @var{frame}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} frame-sal frame | 
|  | Return the frame's @code{<gdb:sal>} (symtab and line) object. | 
|  | @xref{Symbol Tables In Guile}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} frame-read-register frame register | 
|  | Return the value of @var{register} in @var{frame}.  @var{register} | 
|  | should be a string, like @samp{pc}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} frame-read-var frame variable @r{[}#:block block@r{]} | 
|  | Return the value of @var{variable} in @var{frame}.  If the optional | 
|  | argument @var{block} is provided, search for the variable from that | 
|  | block; otherwise start at the frame's current block (which is | 
|  | determined by the frame's current program counter).  The | 
|  | @var{variable} must be given as a string or a @code{<gdb:symbol>} | 
|  | object, and @var{block} must be a @code{<gdb:block>} object. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} frame-select frame | 
|  | Set @var{frame} to be the selected frame.  @xref{Stack, ,Examining the | 
|  | Stack}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} selected-frame | 
|  | Return the selected frame object.  @xref{Selection,,Selecting a Frame}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} newest-frame | 
|  | Return the newest frame object for the selected thread. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} unwind-stop-reason-string reason | 
|  | Return a string explaining the reason why @value{GDBN} stopped unwinding | 
|  | frames, as expressed by the given @var{reason} code (an integer, see the | 
|  | @code{frame-unwind-stop-reason} procedure above in this section). | 
|  | @end deffn | 
|  |  | 
|  | @node Blocks In Guile | 
|  | @subsubsection Accessing blocks from Guile. | 
|  |  | 
|  | @cindex blocks in guile | 
|  | @tindex <gdb:block> | 
|  |  | 
|  | In @value{GDBN}, symbols are stored in blocks.  A block corresponds | 
|  | roughly to a scope in the source code.  Blocks are organized | 
|  | hierarchically, and are represented individually in Guile as an object | 
|  | of type @code{<gdb:block>}.  Blocks rely on debugging information being | 
|  | available. | 
|  |  | 
|  | A frame has a block.  Please see @ref{Frames In Guile}, for a more | 
|  | in-depth discussion of frames. | 
|  |  | 
|  | The outermost block is known as the @dfn{global block}.  The global | 
|  | block typically holds public global variables and functions. | 
|  |  | 
|  | The block nested just inside the global block is the @dfn{static | 
|  | block}.  The static block typically holds file-scoped variables and | 
|  | functions. | 
|  |  | 
|  | @value{GDBN} provides a method to get a block's superblock, but there | 
|  | is currently no way to examine the sub-blocks of a block, or to | 
|  | iterate over all the blocks in a symbol table (@pxref{Symbol Tables In | 
|  | Guile}). | 
|  |  | 
|  | Here is a short example that should help explain blocks: | 
|  |  | 
|  | @smallexample | 
|  | /* This is in the global block.  */ | 
|  | int global; | 
|  |  | 
|  | /* This is in the static block.  */ | 
|  | static int file_scope; | 
|  |  | 
|  | /* 'function' is in the global block, and 'argument' is | 
|  | in a block nested inside of 'function'.  */ | 
|  | int function (int argument) | 
|  | @{ | 
|  | /* 'local' is in a block inside 'function'.  It may or may | 
|  | not be in the same block as 'argument'.  */ | 
|  | int local; | 
|  |  | 
|  | @{ | 
|  | /* 'inner' is in a block whose superblock is the one holding | 
|  | 'local'.  */ | 
|  | int inner; | 
|  |  | 
|  | /* If this call is expanded by the compiler, you may see | 
|  | a nested block here whose function is 'inline_function' | 
|  | and whose superblock is the one holding 'inner'.  */ | 
|  | inline_function (); | 
|  | @} | 
|  | @} | 
|  | @end smallexample | 
|  |  | 
|  | The following block-related procedures are provided by the | 
|  | @code{(gdb)} module: | 
|  |  | 
|  | @deffn {Scheme Procedure} block? object | 
|  | Return @code{#t} if @var{object} is a @code{<gdb:block>} object. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} block-valid? block | 
|  | Returns @code{#t} if @code{<gdb:block>} @var{block} is valid, | 
|  | @code{#f} if not.  A block object can become invalid if the block it | 
|  | refers to doesn't exist anymore in the inferior.  All other | 
|  | @code{<gdb:block>} methods will throw an exception if it is invalid at | 
|  | the time the procedure is called.  The block's validity is also checked | 
|  | during iteration over symbols of the block. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} block-start block | 
|  | Return the start address of @code{<gdb:block>} @var{block}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} block-end block | 
|  | Return the end address of @code{<gdb:block>} @var{block}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} block-function block | 
|  | Return the name of @code{<gdb:block>} @var{block} represented as a | 
|  | @code{<gdb:symbol>} object. | 
|  | If the block is not named, then @code{#f} is returned. | 
|  |  | 
|  | For ordinary function blocks, the superblock is the static block. | 
|  | However, you should note that it is possible for a function block to | 
|  | have a superblock that is not the static block -- for instance this | 
|  | happens for an inlined function. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} block-superblock block | 
|  | Return the block containing @code{<gdb:block>} @var{block}. | 
|  | If the parent block does not exist, then @code{#f} is returned. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} block-global-block block | 
|  | Return the global block associated with @code{<gdb:block>} @var{block}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} block-static-block block | 
|  | Return the static block associated with @code{<gdb:block>} @var{block}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} block-global? block | 
|  | Return @code{#t} if @code{<gdb:block>} @var{block} is a global block. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} block-static? block | 
|  | Return @code{#t} if @code{<gdb:block>} @var{block} is a static block. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} block-symbols | 
|  | Return a list of all symbols (as <gdb:symbol> objects) in | 
|  | @code{<gdb:block>} @var{block}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} make-block-symbols-iterator block | 
|  | Return an object of type @code{<gdb:iterator>} that will iterate | 
|  | over all symbols of the block. | 
|  | Guile programs should not assume that a specific block object will | 
|  | always contain a given symbol, since changes in @value{GDBN} features and | 
|  | infrastructure may cause symbols move across blocks in a symbol table. | 
|  | @xref{Iterators In Guile}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} block-symbols-progress? | 
|  | Return #t if the object is a <gdb:block-symbols-progress> object. | 
|  | This object would be obtained from the @code{progress} element of the | 
|  | @code{<gdb:iterator>} object returned by @code{make-block-symbols-iterator}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} lookup-block pc | 
|  | Return the innermost @code{<gdb:block>} containing the given @var{pc} | 
|  | value.  If the block cannot be found for the @var{pc} value specified, | 
|  | the function will return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @node Symbols In Guile | 
|  | @subsubsection Guile representation of Symbols. | 
|  |  | 
|  | @cindex symbols in guile | 
|  | @tindex <gdb:symbol> | 
|  |  | 
|  | @value{GDBN} represents every variable, function and type as an | 
|  | entry in a symbol table.  @xref{Symbols, ,Examining the Symbol Table}. | 
|  | Guile represents these symbols in @value{GDBN} with the | 
|  | @code{<gdb:symbol>} object. | 
|  |  | 
|  | The following symbol-related procedures are provided by the | 
|  | @code{(gdb)} module: | 
|  |  | 
|  | @deffn {Scheme Procedure} symbol? object | 
|  | Return @code{#t} if @var{object} is an object of type @code{<gdb:symbol>}. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} symbol-valid? symbol | 
|  | Return @code{#t} if the @code{<gdb:symbol>} object is valid, | 
|  | @code{#f} if not.  A @code{<gdb:symbol>} object can become invalid if | 
|  | the symbol it refers to does not exist in @value{GDBN} any longer. | 
|  | All other @code{<gdb:symbol>} procedures will throw an exception if it is | 
|  | invalid at the time the procedure is called. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} symbol-type symbol | 
|  | Return the type of @var{symbol} or @code{#f} if no type is recorded. | 
|  | The result is an object of type @code{<gdb:type>}. | 
|  | @xref{Types In Guile}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} symbol-symtab symbol | 
|  | Return the symbol table in which @var{symbol} appears. | 
|  | The result is an object of type @code{<gdb:symtab>}. | 
|  | @xref{Symbol Tables In Guile}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} symbol-line symbol | 
|  | Return the line number in the source code at which @var{symbol} was defined. | 
|  | This is an integer. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} symbol-name symbol | 
|  | Return the name of @var{symbol} as a string. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} symbol-linkage-name symbol | 
|  | Return the name of @var{symbol}, as used by the linker (i.e., may be mangled). | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} symbol-print-name symbol | 
|  | Return the name of @var{symbol} in a form suitable for output.  This is either | 
|  | @code{name} or @code{linkage_name}, depending on whether the user | 
|  | asked @value{GDBN} to display demangled or mangled names. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} symbol-addr-class symbol | 
|  | Return the address class of the symbol.  This classifies how to find the value | 
|  | of a symbol.  Each address class is a constant defined in the | 
|  | @code{(gdb)} module and described later in this chapter. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} symbol-needs-frame? symbol | 
|  | Return @code{#t} if evaluating @var{symbol}'s value requires a frame | 
|  | (@pxref{Frames In Guile}) and @code{#f} otherwise.  Typically, | 
|  | local variables will require a frame, but other symbols will not. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} symbol-argument? symbol | 
|  | Return @code{#t} if @var{symbol} is an argument of a function. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} symbol-constant? symbol | 
|  | Return @code{#t} if @var{symbol} is a constant. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} symbol-function? symbol | 
|  | Return @code{#t} if @var{symbol} is a function or a method. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} symbol-variable? symbol | 
|  | Return @code{#t} if @var{symbol} is a variable. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} symbol-value symbol @r{[}#:frame frame@r{]} | 
|  | Compute the value of @var{symbol}, as a @code{<gdb:value>}.  For | 
|  | functions, this computes the address of the function, cast to the | 
|  | appropriate type.  If the symbol requires a frame in order to compute | 
|  | its value, then @var{frame} must be given.  If @var{frame} is not | 
|  | given, or if @var{frame} is invalid, then an exception is thrown. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} lookup-symbol name @w{@r{[}#:block block@r{]}} @ | 
|  | @w{@r{[}#:domain domain@r{]}} | 
|  | This function searches for a symbol by name.  The search scope can be | 
|  | restricted to the parameters defined in the optional domain and block | 
|  | arguments. | 
|  |  | 
|  | @var{name} is the name of the symbol.  It must be a string.  The | 
|  | optional @var{block} argument restricts the search to symbols visible | 
|  | in that @var{block}.  The @var{block} argument must be a | 
|  | @code{<gdb:block>} object.  If omitted, the block for the current frame | 
|  | is used.  The optional @var{domain} argument restricts | 
|  | the search to the domain type.  The @var{domain} argument must be a | 
|  | domain constant defined in the @code{(gdb)} module and described later | 
|  | in this chapter. | 
|  |  | 
|  | The result is a list of two elements. | 
|  | The first element is a @code{<gdb:symbol>} object or @code{#f} if the symbol | 
|  | is not found. | 
|  | If the symbol is found, the second element is @code{#t} if the symbol | 
|  | is a field of a method's object (e.g., @code{this} in C@t{++}), | 
|  | otherwise it is @code{#f}. | 
|  | If the symbol is not found, the second element is @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} lookup-global-symbol name @r{[}#:domain domain@r{]} | 
|  | This function searches for a global symbol by name. | 
|  | The search scope can be restricted by the domain argument. | 
|  |  | 
|  | @var{name} is the name of the symbol.  It must be a string. | 
|  | The optional @var{domain} argument restricts the search to the domain type. | 
|  | The @var{domain} argument must be a domain constant defined in the @code{(gdb)} | 
|  | module and described later in this chapter. | 
|  |  | 
|  | The result is a @code{<gdb:symbol>} object or @code{#f} if the symbol | 
|  | is not found. | 
|  | @end deffn | 
|  |  | 
|  | The available domain categories in @code{<gdb:symbol>} are represented | 
|  | as constants in the @code{(gdb)} module: | 
|  |  | 
|  | @vtable @code | 
|  | @item SYMBOL_UNDEF_DOMAIN | 
|  | This is used when a domain has not been discovered or none of the | 
|  | following domains apply.  This usually indicates an error either | 
|  | in the symbol information or in @value{GDBN}'s handling of symbols. | 
|  |  | 
|  | @item SYMBOL_VAR_DOMAIN | 
|  | This domain contains variables, function names, typedef names and enum | 
|  | type values. | 
|  |  | 
|  | @item SYMBOL_FUNCTION_DOMAIN | 
|  | This domain contains functions. | 
|  |  | 
|  | @item SYMBOL_TYPE_DOMAIN | 
|  | This domain contains types.  In a C-like language, types using a tag | 
|  | (the name appearing after a @code{struct}, @code{union}, or | 
|  | @code{enum} keyword) will not appear here; in other languages, all | 
|  | types are in this domain. | 
|  |  | 
|  | @item SYMBOL_STRUCT_DOMAIN | 
|  | This domain holds struct, union and enum tag names.  This domain is | 
|  | only used for C-like languages.  For example, in this code: | 
|  | @smallexample | 
|  | struct type_one @{ int x; @}; | 
|  | typedef struct type_one type_two; | 
|  | @end smallexample | 
|  | Here @code{type_one} will be in @code{SYMBOL_STRUCT_DOMAIN}, but | 
|  | @code{type_two} will be in @code{SYMBOL_TYPE_DOMAIN}. | 
|  |  | 
|  | @item SYMBOL_LABEL_DOMAIN | 
|  | This domain contains names of labels (for gotos). | 
|  |  | 
|  | @item SYMBOL_VARIABLES_DOMAIN | 
|  | This domain holds a subset of the @code{SYMBOLS_VAR_DOMAIN}; it | 
|  | contains everything minus functions and types. | 
|  |  | 
|  | @item SYMBOL_FUNCTIONS_DOMAIN | 
|  | This domain contains all functions. | 
|  |  | 
|  | @item SYMBOL_TYPES_DOMAIN | 
|  | This domain contains all types. | 
|  | @end vtable | 
|  |  | 
|  | The available address class categories in @code{<gdb:symbol>} are represented | 
|  | as constants in the @code{gdb} module: | 
|  |  | 
|  | When searching for a symbol, the desired domain constant can be passed | 
|  | verbatim to the lookup function. | 
|  |  | 
|  | For more complex searches, there is a corresponding set of constants, | 
|  | each named after one of the preceding constants, but with the | 
|  | @samp{SEARCH} prefix replacing the @samp{SYMBOL} prefix; for example, | 
|  | @code{SEARCH_LABEL_DOMAIN}.  These may be or'd together to form a | 
|  | search constant. | 
|  |  | 
|  | @vtable @code | 
|  | @item SYMBOL_LOC_UNDEF | 
|  | If this is returned by address class, it indicates an error either in | 
|  | the symbol information or in @value{GDBN}'s handling of symbols. | 
|  |  | 
|  | @item SYMBOL_LOC_CONST | 
|  | Value is constant int. | 
|  |  | 
|  | @item SYMBOL_LOC_STATIC | 
|  | Value is at a fixed address. | 
|  |  | 
|  | @item SYMBOL_LOC_REGISTER | 
|  | Value is in a register. | 
|  |  | 
|  | @item SYMBOL_LOC_ARG | 
|  | Value is an argument.  This value is at the offset stored within the | 
|  | symbol inside the frame's argument list. | 
|  |  | 
|  | @item SYMBOL_LOC_REF_ARG | 
|  | Value address is stored in the frame's argument list.  Just like | 
|  | @code{LOC_ARG} except that the value's address is stored at the | 
|  | offset, not the value itself. | 
|  |  | 
|  | @item SYMBOL_LOC_REGPARM_ADDR | 
|  | Value is a specified register.  Just like @code{LOC_REGISTER} except | 
|  | the register holds the address of the argument instead of the argument | 
|  | itself. | 
|  |  | 
|  | @item SYMBOL_LOC_LOCAL | 
|  | Value is a local variable. | 
|  |  | 
|  | @item SYMBOL_LOC_TYPEDEF | 
|  | Value not used.  Symbols in the domain @code{SYMBOL_STRUCT_DOMAIN} all | 
|  | have this class. | 
|  |  | 
|  | @item SYMBOL_LOC_BLOCK | 
|  | Value is a block. | 
|  |  | 
|  | @item SYMBOL_LOC_CONST_BYTES | 
|  | Value is a byte-sequence. | 
|  |  | 
|  | @item SYMBOL_LOC_UNRESOLVED | 
|  | Value is at a fixed address, but the address of the variable has to be | 
|  | determined from the minimal symbol table whenever the variable is | 
|  | referenced. | 
|  |  | 
|  | @item SYMBOL_LOC_OPTIMIZED_OUT | 
|  | The value does not actually exist in the program. | 
|  |  | 
|  | @item SYMBOL_LOC_COMPUTED | 
|  | The value's address is a computed location. | 
|  | @end vtable | 
|  |  | 
|  | @node Symbol Tables In Guile | 
|  | @subsubsection Symbol table representation in Guile. | 
|  |  | 
|  | @cindex symbol tables in guile | 
|  | @tindex <gdb:symtab> | 
|  | @tindex <gdb:sal> | 
|  |  | 
|  | Access to symbol table data maintained by @value{GDBN} on the inferior | 
|  | is exposed to Guile via two objects: @code{<gdb:sal>} (symtab-and-line) and | 
|  | @code{<gdb:symtab>}.  Symbol table and line data for a frame is returned | 
|  | from the @code{frame-find-sal} @code{<gdb:frame>} procedure. | 
|  | @xref{Frames In Guile}. | 
|  |  | 
|  | For more information on @value{GDBN}'s symbol table management, see | 
|  | @ref{Symbols, ,Examining the Symbol Table}. | 
|  |  | 
|  | The following symtab-related procedures are provided by the | 
|  | @code{(gdb)} module: | 
|  |  | 
|  | @deffn {Scheme Procedure} symtab? object | 
|  | Return @code{#t} if @var{object} is an object of type @code{<gdb:symtab>}. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} symtab-valid? symtab | 
|  | Return @code{#t} if the @code{<gdb:symtab>} object is valid, | 
|  | @code{#f} if not.  A @code{<gdb:symtab>} object becomes invalid when | 
|  | the symbol table it refers to no longer exists in @value{GDBN}. | 
|  | All other @code{<gdb:symtab>} procedures will throw an exception | 
|  | if it is invalid at the time the procedure is called. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} symtab-filename symtab | 
|  | Return the symbol table's source filename. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} symtab-fullname symtab | 
|  | Return the symbol table's source absolute file name. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} symtab-objfile symtab | 
|  | Return the symbol table's backing object file.  @xref{Objfiles In Guile}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} symtab-global-block symtab | 
|  | Return the global block of the underlying symbol table. | 
|  | @xref{Blocks In Guile}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} symtab-static-block symtab | 
|  | Return the static block of the underlying symbol table. | 
|  | @xref{Blocks In Guile}. | 
|  | @end deffn | 
|  |  | 
|  | The following symtab-and-line-related procedures are provided by the | 
|  | @code{(gdb)} module: | 
|  |  | 
|  | @deffn {Scheme Procedure} sal? object | 
|  | Return @code{#t} if @var{object} is an object of type @code{<gdb:sal>}. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} sal-valid? sal | 
|  | Return @code{#t} if @var{sal} is valid, @code{#f} if not. | 
|  | A @code{<gdb:sal>} object becomes invalid when the Symbol table object | 
|  | it refers to no longer exists in @value{GDBN}.  All other | 
|  | @code{<gdb:sal>} procedures will throw an exception if it is | 
|  | invalid at the time the procedure is called. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} sal-symtab sal | 
|  | Return the symbol table object (@code{<gdb:symtab>}) for @var{sal}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} sal-line sal | 
|  | Return the line number for @var{sal}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} sal-pc sal | 
|  | Return the start of the address range occupied by code for @var{sal}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} sal-last sal | 
|  | Return the end of the address range occupied by code for @var{sal}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} find-pc-line pc | 
|  | Return the @code{<gdb:sal>} object corresponding to the @var{pc} value. | 
|  | If an invalid value of @var{pc} is passed as an argument, then the | 
|  | @code{symtab} and @code{line} attributes of the returned @code{<gdb:sal>} | 
|  | object will be @code{#f} and 0 respectively. | 
|  | @end deffn | 
|  |  | 
|  | @node Breakpoints In Guile | 
|  | @subsubsection Manipulating breakpoints using Guile | 
|  |  | 
|  | @cindex breakpoints in guile | 
|  | @tindex <gdb:breakpoint> | 
|  |  | 
|  | Breakpoints in Guile are represented by objects of type | 
|  | @code{<gdb:breakpoint>}.  New breakpoints can be created with the | 
|  | @code{make-breakpoint} Guile function, and then added to @value{GDBN} with the | 
|  | @code{register-breakpoint!} Guile function. | 
|  | This two-step approach is taken to separate out the side-effect of adding | 
|  | the breakpoint to @value{GDBN} from @code{make-breakpoint}. | 
|  |  | 
|  | Support is also provided to view and manipulate breakpoints created | 
|  | outside of Guile. | 
|  |  | 
|  | The following breakpoint-related procedures are provided by the | 
|  | @code{(gdb)} module: | 
|  |  | 
|  | @deffn {Scheme Procedure} make-breakpoint location @w{@r{[}#:type type@r{]}} @ | 
|  | @w{@r{[}#:wp-class wp-class@r{]}} @w{@r{[}#:internal internal@r{]}} @ | 
|  | @w{@r{[}#:temporary temporary@r{]}} | 
|  | Create a new breakpoint at @var{location}, a string naming the | 
|  | location of the breakpoint, or an expression that defines a watchpoint. | 
|  | The contents can be any location recognized by the @code{break} command, | 
|  | or in the case of a watchpoint, by the @code{watch} command. | 
|  |  | 
|  | The breakpoint is initially marked as @samp{invalid}. | 
|  | The breakpoint is not usable until it has been registered with @value{GDBN} | 
|  | with @code{register-breakpoint!}, at which point it becomes @samp{valid}. | 
|  | The result is the @code{<gdb:breakpoint>} object representing the breakpoint. | 
|  |  | 
|  | The optional @var{type} denotes the breakpoint to create. | 
|  | This argument can be either @code{BP_BREAKPOINT} or @code{BP_WATCHPOINT}, | 
|  | and defaults to @code{BP_BREAKPOINT}. | 
|  |  | 
|  | The optional @var{wp-class} argument defines the class of watchpoint to | 
|  | create, if @var{type} is @code{BP_WATCHPOINT}.  If a watchpoint class is | 
|  | not provided, it is assumed to be a @code{WP_WRITE} class. | 
|  |  | 
|  | The optional @var{internal} argument allows the breakpoint to become | 
|  | invisible to the user.  The breakpoint will neither be reported when | 
|  | registered, nor will it be listed in the output from @code{info breakpoints} | 
|  | (but will be listed with the @code{maint info breakpoints} command). | 
|  | If an internal flag is not provided, the breakpoint is visible | 
|  | (non-internal). | 
|  |  | 
|  | The optional @var{temporary} argument makes the breakpoint a temporary | 
|  | breakpoint.  Temporary breakpoints are deleted after they have been hit, | 
|  | after which the Guile breakpoint is no longer usable (although it may be | 
|  | re-registered with @code{register-breakpoint!}). | 
|  |  | 
|  | When a watchpoint is created, @value{GDBN} will try to create a | 
|  | hardware assisted watchpoint.  If successful, the type of the watchpoint | 
|  | is changed from @code{BP_WATCHPOINT} to @code{BP_HARDWARE_WATCHPOINT} | 
|  | for @code{WP_WRITE}, @code{BP_READ_WATCHPOINT} for @code{WP_READ}, | 
|  | and @code{BP_ACCESS_WATCHPOINT} for @code{WP_ACCESS}. | 
|  | If not successful, the type of the watchpoint is left as @code{WP_WATCHPOINT}. | 
|  |  | 
|  | The available types are represented by constants defined in the @code{gdb} | 
|  | module: | 
|  |  | 
|  | @vtable @code | 
|  | @item BP_BREAKPOINT | 
|  | Normal code breakpoint. | 
|  |  | 
|  | @item BP_WATCHPOINT | 
|  | Watchpoint breakpoint. | 
|  |  | 
|  | @item BP_HARDWARE_WATCHPOINT | 
|  | Hardware assisted watchpoint. | 
|  | This value cannot be specified when creating the breakpoint. | 
|  |  | 
|  | @item BP_READ_WATCHPOINT | 
|  | Hardware assisted read watchpoint. | 
|  | This value cannot be specified when creating the breakpoint. | 
|  |  | 
|  | @item BP_ACCESS_WATCHPOINT | 
|  | Hardware assisted access watchpoint. | 
|  | This value cannot be specified when creating the breakpoint. | 
|  |  | 
|  | @item BP_CATCHPOINT | 
|  | Catchpoint. | 
|  | This value cannot be specified when creating the breakpoint. | 
|  | @end vtable | 
|  |  | 
|  | The available watchpoint types are represented by constants defined in the | 
|  | @code{(gdb)} module: | 
|  |  | 
|  | @vtable @code | 
|  | @item WP_READ | 
|  | Read only watchpoint. | 
|  |  | 
|  | @item WP_WRITE | 
|  | Write only watchpoint. | 
|  |  | 
|  | @item WP_ACCESS | 
|  | Read/Write watchpoint. | 
|  | @end vtable | 
|  |  | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} register-breakpoint! breakpoint | 
|  | Add @var{breakpoint}, a @code{<gdb:breakpoint>} object, to @value{GDBN}'s | 
|  | list of breakpoints.  The breakpoint must have been created with | 
|  | @code{make-breakpoint}.  One cannot register breakpoints that have been | 
|  | created outside of Guile.  Once a breakpoint is registered it becomes | 
|  | @samp{valid}. | 
|  | It is an error to register an already registered breakpoint. | 
|  | The result is unspecified. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} delete-breakpoint! breakpoint | 
|  | Remove @var{breakpoint} from @value{GDBN}'s list of breakpoints. | 
|  | This also invalidates the Guile @var{breakpoint} object. | 
|  | Any further attempt to access the object will throw an exception. | 
|  |  | 
|  | If @var{breakpoint} was created from Guile with @code{make-breakpoint} | 
|  | it may be re-registered with @value{GDBN}, in which case the breakpoint | 
|  | becomes valid again. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} breakpoints | 
|  | Return a list of all breakpoints. | 
|  | Each element of the list is a @code{<gdb:breakpoint>} object. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} breakpoint? object | 
|  | Return @code{#t} if @var{object} is a @code{<gdb:breakpoint>} object, | 
|  | and @code{#f} otherwise. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} breakpoint-valid? breakpoint | 
|  | Return @code{#t} if @var{breakpoint} is valid, @code{#f} otherwise. | 
|  | Breakpoints created with @code{make-breakpoint} are marked as invalid | 
|  | until they are registered with @value{GDBN} with @code{register-breakpoint!}. | 
|  | A @code{<gdb:breakpoint>} object can become invalid | 
|  | if the user deletes the breakpoint.  In this case, the object still | 
|  | exists, but the underlying breakpoint does not.  In the cases of | 
|  | watchpoint scope, the watchpoint remains valid even if execution of the | 
|  | inferior leaves the scope of that watchpoint. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} breakpoint-number breakpoint | 
|  | Return the breakpoint's number --- the identifier used by | 
|  | the user to manipulate the breakpoint. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} breakpoint-temporary? breakpoint | 
|  | Return @code{#t} if the breakpoint was created as a temporary | 
|  | breakpoint.  Temporary breakpoints are automatically deleted after | 
|  | they've been hit.  Calling this procedure, and all other procedures | 
|  | other than @code{breakpoint-valid?} and @code{register-breakpoint!}, | 
|  | will result in an error after the breakpoint has been hit (since it has | 
|  | been automatically deleted). | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} breakpoint-type breakpoint | 
|  | Return the breakpoint's type --- the identifier used to | 
|  | determine the actual breakpoint type or use-case. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} breakpoint-visible? breakpoint | 
|  | Return @code{#t} if the breakpoint is visible to the user | 
|  | when hit, or when the @samp{info breakpoints} command is run. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} breakpoint-location breakpoint | 
|  | Return the location of the breakpoint, as specified by | 
|  | the user.  It is a string.  If the breakpoint does not have a location | 
|  | (that is, it is a watchpoint) return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} breakpoint-expression breakpoint | 
|  | Return the breakpoint expression, as specified by the user.  It is a string. | 
|  | If the breakpoint does not have an expression (the breakpoint is not a | 
|  | watchpoint) return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} breakpoint-enabled? breakpoint | 
|  | Return @code{#t} if the breakpoint is enabled, and @code{#f} otherwise. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} set-breakpoint-enabled! breakpoint flag | 
|  | Set the enabled state of @var{breakpoint} to @var{flag}. | 
|  | If flag is @code{#f} it is disabled, otherwise it is enabled. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} breakpoint-silent? breakpoint | 
|  | Return @code{#t} if the breakpoint is silent, and @code{#f} otherwise. | 
|  |  | 
|  | Note that a breakpoint can also be silent if it has commands and the | 
|  | first command is @code{silent}.  This is not reported by the | 
|  | @code{silent} attribute. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} set-breakpoint-silent! breakpoint flag | 
|  | Set the silent state of @var{breakpoint} to @var{flag}. | 
|  | If flag is @code{#f} the breakpoint is made silent, | 
|  | otherwise it is made non-silent (or noisy). | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} breakpoint-ignore-count breakpoint | 
|  | Return the ignore count for @var{breakpoint}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} set-breakpoint-ignore-count! breakpoint count | 
|  | Set the ignore count for @var{breakpoint} to @var{count}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} breakpoint-hit-count breakpoint | 
|  | Return hit count of @var{breakpoint}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} set-breakpoint-hit-count! breakpoint count | 
|  | Set the hit count of @var{breakpoint} to @var{count}. | 
|  | At present, @var{count} must be zero. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} breakpoint-thread breakpoint | 
|  | Return the global-thread-id for thread-specific breakpoint | 
|  | @var{breakpoint}.  Return #f if @var{breakpoint} is not | 
|  | thread-specific. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} set-breakpoint-thread! breakpoint global-thread-id|#f | 
|  | Set the thread-id for @var{breakpoint} to @var{global-thread-id} If | 
|  | set to @code{#f}, the breakpoint is no longer thread-specific. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} breakpoint-task breakpoint | 
|  | If the breakpoint is Ada task-specific, return the Ada task id. | 
|  | If the breakpoint is not task-specific (or the underlying | 
|  | language is not Ada), return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} set-breakpoint-task! breakpoint task | 
|  | Set the Ada task of @var{breakpoint} to @var{task}. | 
|  | If set to @code{#f}, the breakpoint is no longer task-specific. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} breakpoint-condition breakpoint | 
|  | Return the condition of @var{breakpoint}, as specified by the user. | 
|  | It is a string.  If there is no condition, return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} set-breakpoint-condition! breakpoint condition | 
|  | Set the condition of @var{breakpoint} to @var{condition}, | 
|  | which must be a string.  If set to @code{#f} then the breakpoint | 
|  | becomes unconditional. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} breakpoint-stop breakpoint | 
|  | Return the stop predicate of @var{breakpoint}. | 
|  | See @code{set-breakpoint-stop!} below in this section. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} set-breakpoint-stop! breakpoint procedure|#f | 
|  | Set the stop predicate of @var{breakpoint}.  The predicate | 
|  | @var{procedure} takes one argument: the <gdb:breakpoint> object. | 
|  | If this predicate is set to a procedure then it is invoked whenever | 
|  | the inferior reaches this breakpoint.  If it returns @code{#t}, | 
|  | or any non-@code{#f} value, then the inferior is stopped, | 
|  | otherwise the inferior will continue. | 
|  |  | 
|  | If there are multiple breakpoints at the same location with a | 
|  | @code{stop} predicate, each one will be called regardless of the | 
|  | return status of the previous.  This ensures that all @code{stop} | 
|  | predicates have a chance to execute at that location.  In this scenario | 
|  | if one of the methods returns @code{#t} but the others return | 
|  | @code{#f}, the inferior will still be stopped. | 
|  |  | 
|  | You should not alter the execution state of the inferior (i.e.@:, step, | 
|  | next, etc.), alter the current frame context (i.e.@:, change the current | 
|  | active frame), or alter, add or delete any breakpoint.  As a general | 
|  | rule, you should not alter any data within @value{GDBN} or the inferior | 
|  | at this time. | 
|  |  | 
|  | Example @code{stop} implementation: | 
|  |  | 
|  | @smallexample | 
|  | (define (my-stop? bkpt) | 
|  | (let ((int-val (parse-and-eval "foo"))) | 
|  | (value=? int-val 3))) | 
|  | (define bkpt (make-breakpoint "main.c:42")) | 
|  | (register-breakpoint! bkpt) | 
|  | (set-breakpoint-stop! bkpt my-stop?) | 
|  | @end smallexample | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} breakpoint-commands breakpoint | 
|  | Return the commands attached to @var{breakpoint} as a string, | 
|  | or @code{#f} if there are none. | 
|  | @end deffn | 
|  |  | 
|  | @node Lazy Strings In Guile | 
|  | @subsubsection Guile representation of lazy strings. | 
|  |  | 
|  | @cindex lazy strings in guile | 
|  | @tindex <gdb:lazy-string> | 
|  |  | 
|  | A @dfn{lazy string} is a string whose contents is not retrieved or | 
|  | encoded until it is needed. | 
|  |  | 
|  | A @code{<gdb:lazy-string>} is represented in @value{GDBN} as an | 
|  | @code{address} that points to a region of memory, an @code{encoding} | 
|  | that will be used to encode that region of memory, and a @code{length} | 
|  | to delimit the region of memory that represents the string.  The | 
|  | difference between a @code{<gdb:lazy-string>} and a string wrapped within | 
|  | a @code{<gdb:value>} is that a @code{<gdb:lazy-string>} will be treated | 
|  | differently by @value{GDBN} when printing.  A @code{<gdb:lazy-string>} is | 
|  | retrieved and encoded during printing, while a @code{<gdb:value>} | 
|  | wrapping a string is immediately retrieved and encoded on creation. | 
|  |  | 
|  | The following lazy-string-related procedures are provided by the | 
|  | @code{(gdb)} module: | 
|  |  | 
|  | @deffn {Scheme Procedure} lazy-string? object | 
|  | Return @code{#t} if @var{object} is an object of type @code{<gdb:lazy-string>}. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} lazy-string-address lazy-sring | 
|  | Return the address of @var{lazy-string}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} lazy-string-length lazy-string | 
|  | Return the length of @var{lazy-string} in characters.  If the | 
|  | length is -1, then the string will be fetched and encoded up to the | 
|  | first null of appropriate width. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} lazy-string-encoding lazy-string | 
|  | Return the encoding that will be applied to @var{lazy-string} | 
|  | when the string is printed by @value{GDBN}.  If the encoding is not | 
|  | set, or contains an empty string,  then @value{GDBN} will select the | 
|  | most appropriate encoding when the string is printed. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} lazy-string-type lazy-string | 
|  | Return the type that is represented by @var{lazy-string}'s type. | 
|  | For a lazy string this is a pointer or array type.  To | 
|  | resolve this to the lazy string's character type, use @code{type-target-type}. | 
|  | @xref{Types In Guile}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} lazy-string->value lazy-string | 
|  | Convert the @code{<gdb:lazy-string>} to a @code{<gdb:value>}.  This value | 
|  | will point to the string in memory, but will lose all the delayed | 
|  | retrieval, encoding and handling that @value{GDBN} applies to a | 
|  | @code{<gdb:lazy-string>}. | 
|  | @end deffn | 
|  |  | 
|  | @node Architectures In Guile | 
|  | @subsubsection Guile representation of architectures | 
|  |  | 
|  | @cindex guile architectures | 
|  | @tindex <gdb:arch> | 
|  |  | 
|  | @value{GDBN} uses architecture specific parameters and artifacts in a | 
|  | number of its various computations.  An architecture is represented | 
|  | by an instance of the @code{<gdb:arch>} class. | 
|  |  | 
|  | The following architecture-related procedures are provided by the | 
|  | @code{(gdb)} module: | 
|  |  | 
|  | @deffn {Scheme Procedure} arch? object | 
|  | Return @code{#t} if @var{object} is an object of type @code{<gdb:arch>}. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} current-arch | 
|  | Return the current architecture as a @code{<gdb:arch>} object. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-name arch | 
|  | Return the name (string value) of @code{<gdb:arch>} @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-charset arch | 
|  | Return name of target character set of @code{<gdb:arch>} @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-wide-charset | 
|  | Return name of target wide character set of @code{<gdb:arch>} @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | Each architecture provides a set of predefined types, obtained by | 
|  | the following functions. | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-void-type arch | 
|  | Return the @code{<gdb:type>} object for a @code{void} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-char-type arch | 
|  | Return the @code{<gdb:type>} object for a @code{char} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-short-type arch | 
|  | Return the @code{<gdb:type>} object for a @code{short} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-int-type arch | 
|  | Return the @code{<gdb:type>} object for an @code{int} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-long-type arch | 
|  | Return the @code{<gdb:type>} object for a @code{long} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-schar-type arch | 
|  | Return the @code{<gdb:type>} object for a @code{signed char} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-uchar-type arch | 
|  | Return the @code{<gdb:type>} object for an @code{unsigned char} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-ushort-type arch | 
|  | Return the @code{<gdb:type>} object for an @code{unsigned short} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-uint-type arch | 
|  | Return the @code{<gdb:type>} object for an @code{unsigned int} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-ulong-type arch | 
|  | Return the @code{<gdb:type>} object for an @code{unsigned long} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-float-type arch | 
|  | Return the @code{<gdb:type>} object for a @code{float} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-double-type arch | 
|  | Return the @code{<gdb:type>} object for a @code{double} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-longdouble-type arch | 
|  | Return the @code{<gdb:type>} object for a @code{long double} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-bool-type arch | 
|  | Return the @code{<gdb:type>} object for a @code{bool} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-longlong-type arch | 
|  | Return the @code{<gdb:type>} object for a @code{long long} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-ulonglong-type arch | 
|  | Return the @code{<gdb:type>} object for an @code{unsigned long long} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-int8-type arch | 
|  | Return the @code{<gdb:type>} object for an @code{int8} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-uint8-type arch | 
|  | Return the @code{<gdb:type>} object for a @code{uint8} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-int16-type arch | 
|  | Return the @code{<gdb:type>} object for an @code{int16} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-uint16-type arch | 
|  | Return the @code{<gdb:type>} object for a @code{uint16} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-int32-type arch | 
|  | Return the @code{<gdb:type>} object for an @code{int32} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-uint32-type arch | 
|  | Return the @code{<gdb:type>} object for a @code{uint32} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-int64-type arch | 
|  | Return the @code{<gdb:type>} object for an @code{int64} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-uint64-type arch | 
|  | Return the @code{<gdb:type>} object for a @code{uint64} type | 
|  | of architecture @var{arch}. | 
|  | @end deffn | 
|  |  | 
|  | Example: | 
|  |  | 
|  | @smallexample | 
|  | (gdb) guile (type-name (arch-uchar-type (current-arch))) | 
|  | "unsigned char" | 
|  | @end smallexample | 
|  |  | 
|  | @node Disassembly In Guile | 
|  | @subsubsection Disassembly In Guile | 
|  |  | 
|  | The disassembler can be invoked from Scheme code. | 
|  | Furthermore, the disassembler can take a Guile port as input, | 
|  | allowing one to disassemble from any source, and not just target memory. | 
|  |  | 
|  | @deffn {Scheme Procedure} arch-disassemble arch start-pc @ | 
|  | @w{@r{[}#:port port@r{]}} @w{@r{[}#:offset offset@r{]}} @ | 
|  | @w{@r{[}#:size size@r{]}} @w{@r{[}#:count count@r{]}} | 
|  | Return a list of disassembled instructions starting from the memory | 
|  | address @var{start-pc}. | 
|  |  | 
|  | The optional argument @var{port} specifies the input port to read bytes from. | 
|  | If @var{port} is @code{#f} then bytes are read from target memory. | 
|  |  | 
|  | The optional argument @var{offset} specifies the address offset of the | 
|  | first byte in @var{port}.  This is useful, for example, when @var{port} | 
|  | specifies a @samp{bytevector} and you want the bytevector to be disassembled | 
|  | as if it came from that address.  The @var{start-pc} passed to the reader | 
|  | for @var{port} is offset by the same amount. | 
|  |  | 
|  | Example: | 
|  | @smallexample | 
|  | (gdb) guile (use-modules (rnrs io ports)) | 
|  | (gdb) guile (define pc (value->integer (parse-and-eval "$pc"))) | 
|  | (gdb) guile (define mem (open-memory #:start pc)) | 
|  | (gdb) guile (define bv (get-bytevector-n mem 10)) | 
|  | (gdb) guile (define bv-port (open-bytevector-input-port bv)) | 
|  | (gdb) guile (define arch (current-arch)) | 
|  | (gdb) guile (arch-disassemble arch pc #:port bv-port #:offset pc) | 
|  | (((address . 4195516) (asm . "mov    $0x4005c8,%edi") (length . 5))) | 
|  | @end smallexample | 
|  |  | 
|  | The optional arguments @var{size} and | 
|  | @var{count} determine the number of instructions in the returned list. | 
|  | If either @var{size} or @var{count} is specified as zero, then | 
|  | no instructions are disassembled and an empty list is returned. | 
|  | If both the optional arguments @var{size} and @var{count} are | 
|  | specified, then a list of at most @var{count} disassembled instructions | 
|  | whose start address falls in the closed memory address interval from | 
|  | @var{start-pc} to (@var{start-pc} + @var{size} - 1) are returned. | 
|  | If @var{size} is not specified, but @var{count} is specified, | 
|  | then @var{count} number of instructions starting from the address | 
|  | @var{start-pc} are returned.  If @var{count} is not specified but | 
|  | @var{size} is specified, then all instructions whose start address | 
|  | falls in the closed memory address interval from @var{start-pc} to | 
|  | (@var{start-pc} + @var{size} - 1) are returned. | 
|  | If neither @var{size} nor @var{count} are specified, then a single | 
|  | instruction at @var{start-pc} is returned. | 
|  |  | 
|  | Each element of the returned list is an alist (associative list) | 
|  | with the following keys: | 
|  |  | 
|  | @table @code | 
|  |  | 
|  | @item address | 
|  | The value corresponding to this key is a Guile integer of | 
|  | the memory address of the instruction. | 
|  |  | 
|  | @item asm | 
|  | The value corresponding to this key is a string value which represents | 
|  | the instruction with assembly language mnemonics.  The assembly | 
|  | language flavor used is the same as that specified by the current CLI | 
|  | variable @code{disassembly-flavor}.  @xref{Machine Code}. | 
|  |  | 
|  | @item length | 
|  | The value corresponding to this key is the length of the instruction in bytes. | 
|  |  | 
|  | @end table | 
|  | @end deffn | 
|  |  | 
|  | @node I/O Ports in Guile | 
|  | @subsubsection I/O Ports in Guile | 
|  |  | 
|  | @deffn {Scheme Procedure} input-port | 
|  | Return @value{GDBN}'s input port as a Guile port object. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} output-port | 
|  | Return @value{GDBN}'s output port as a Guile port object. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} error-port | 
|  | Return @value{GDBN}'s error port as a Guile port object. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} stdio-port? object | 
|  | Return @code{#t} if @var{object} is a @value{GDBN} stdio port. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @node Memory Ports in Guile | 
|  | @subsubsection Memory Ports in Guile | 
|  |  | 
|  | @value{GDBN} provides a @code{port} interface to target memory. | 
|  | This allows Guile code to read/write target memory using Guile's port and | 
|  | bytevector functionality.  The main routine is @code{open-memory} which | 
|  | returns a port object.  One can then read/write memory using that object. | 
|  |  | 
|  | @deffn {Scheme Procedure} open-memory @w{@r{[}#:mode mode@r{]}} @ | 
|  | @w{@r{[}#:start address@r{]}} @w{@r{[}#:size size@r{]}} | 
|  | Return a port object that can be used for reading and writing memory. | 
|  | The port will be open according to @var{mode}, which is the standard | 
|  | mode argument to Guile port open routines, except that the @samp{"a"} | 
|  | and @samp{"l"} modes are not supported. | 
|  | @xref{File Ports,,, guile, GNU Guile Reference Manual}. | 
|  | The @samp{"b"} (binary) character may be present, but is ignored: | 
|  | memory ports are binary only.  If @samp{"0"} is appended then | 
|  | the port is marked as unbuffered. | 
|  | The default is @samp{"r"}, read-only and buffered. | 
|  |  | 
|  | The chunk of memory that can be accessed can be bounded. | 
|  | If both @var{start} and @var{size} are unspecified, all of memory can be | 
|  | accessed.  If only @var{start} is specified, all of memory from that point | 
|  | on can be accessed.  If only @var{size} if specified, all memory in the | 
|  | range [0,@var{size}) can be accessed.  If both are specified, all memory | 
|  | in the rane [@var{start},@var{start}+@var{size}) can be accessed. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} memory-port? | 
|  | Return @code{#t} if @var{object} is an object of type @code{<gdb:memory-port>}. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} memory-port-range memory-port | 
|  | Return the range of @code{<gdb:memory-port>} @var{memory-port} as a list | 
|  | of two elements: @code{(start end)}.  The range is @var{start} to @var{end} | 
|  | inclusive. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} memory-port-read-buffer-size memory-port | 
|  | Return the size of the read buffer of @code{<gdb:memory-port>} | 
|  | @var{memory-port}. | 
|  |  | 
|  | This procedure is deprecated and will be removed in @value{GDBN} 11. | 
|  | It returns 0 when using Guile 2.2 or later. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} set-memory-port-read-buffer-size! memory-port size | 
|  | Set the size of the read buffer of @code{<gdb:memory-port>} | 
|  | @var{memory-port} to @var{size}.  The result is unspecified. | 
|  |  | 
|  | This procedure is deprecated and will be removed in @value{GDBN} 11. | 
|  | When @value{GDBN} is built with Guile 2.2 or later, you can call | 
|  | @code{setvbuf} instead (@pxref{Buffering, @code{setvbuf},, guile, GNU | 
|  | Guile Reference Manual}). | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} memory-port-write-buffer-size memory-port | 
|  | Return the size of the write buffer of @code{<gdb:memory-port>} | 
|  | @var{memory-port}. | 
|  |  | 
|  | This procedure is deprecated and will be removed in @value{GDBN} 11. | 
|  | It returns 0 when @value{GDBN} is built with Guile 2.2 or later. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} set-memory-port-write-buffer-size! memory-port size | 
|  | Set the size of the write buffer of @code{<gdb:memory-port>} | 
|  | @var{memory-port} to @var{size}.  The result is unspecified. | 
|  |  | 
|  | This procedure is deprecated and will be removed in @value{GDBN} 11. | 
|  | When @value{GDBN} is built with Guile 2.2 or later, you can call | 
|  | @code{setvbuf} instead. | 
|  | @end deffn | 
|  |  | 
|  | A memory port is closed like any other port, with @code{close-port}. | 
|  |  | 
|  | Combined with Guile's @code{bytevectors}, memory ports provide a lot | 
|  | of utility.  For example, to fill a buffer of 10 integers in memory, | 
|  | one can do something like the following. | 
|  |  | 
|  | @smallexample | 
|  | ;; In the program: int buffer[10]; | 
|  | (use-modules (rnrs bytevectors)) | 
|  | (use-modules (rnrs io ports)) | 
|  | (define addr (parse-and-eval "buffer")) | 
|  | (define n 10) | 
|  | (define byte-size (* n 4)) | 
|  | (define mem-port (open-memory #:mode "r+" #:start | 
|  | (value->integer addr) #:size byte-size)) | 
|  | (define byte-vec (make-bytevector byte-size)) | 
|  | (do ((i 0 (+ i 1))) | 
|  | ((>= i n)) | 
|  | (bytevector-s32-native-set! byte-vec (* i 4) (* i 42))) | 
|  | (put-bytevector mem-port byte-vec) | 
|  | (close-port mem-port) | 
|  | @end smallexample | 
|  |  | 
|  | @node Iterators In Guile | 
|  | @subsubsection Iterators In Guile | 
|  |  | 
|  | @cindex guile iterators | 
|  | @tindex <gdb:iterator> | 
|  |  | 
|  | A simple iterator facility is provided to allow, for example, | 
|  | iterating over the set of program symbols without having to first | 
|  | construct a list of all of them.  A useful contribution would be | 
|  | to add support for SRFI 41 and SRFI 45. | 
|  |  | 
|  | @deffn {Scheme Procedure} make-iterator object progress next! | 
|  | A @code{<gdb:iterator>} object is constructed with the @code{make-iterator} | 
|  | procedure.  It takes three arguments: the object to be iterated over, | 
|  | an object to record the progress of the iteration, and a procedure to | 
|  | return the next element in the iteration, or an implementation chosen value | 
|  | to denote the end of iteration. | 
|  |  | 
|  | By convention, end of iteration is marked with @code{(end-of-iteration)}, | 
|  | and may be tested with the @code{end-of-iteration?} predicate. | 
|  | The result of @code{(end-of-iteration)} is chosen so that it is not | 
|  | otherwise used by the @code{(gdb)} module.  If you are using | 
|  | @code{<gdb:iterator>} in your own code it is your responsibility to | 
|  | maintain this invariant. | 
|  |  | 
|  | A trivial example for illustration's sake: | 
|  |  | 
|  | @smallexample | 
|  | (use-modules (gdb iterator)) | 
|  | (define my-list (list 1 2 3)) | 
|  | (define iter | 
|  | (make-iterator my-list my-list | 
|  | (lambda (iter) | 
|  | (let ((l (iterator-progress iter))) | 
|  | (if (eq? l '()) | 
|  | (end-of-iteration) | 
|  | (begin | 
|  | (set-iterator-progress! iter (cdr l)) | 
|  | (car l))))))) | 
|  | @end smallexample | 
|  |  | 
|  | Here is a slightly more realistic example, which computes a list of all the | 
|  | functions in @code{my-global-block}. | 
|  |  | 
|  | @smallexample | 
|  | (use-modules (gdb iterator)) | 
|  | (define this-sal (find-pc-line (frame-pc (selected-frame)))) | 
|  | (define this-symtab (sal-symtab this-sal)) | 
|  | (define this-global-block (symtab-global-block this-symtab)) | 
|  | (define syms-iter (make-block-symbols-iterator this-global-block)) | 
|  | (define functions (iterator-filter symbol-function? syms-iter)) | 
|  | @end smallexample | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} iterator? object | 
|  | Return @code{#t} if @var{object} is a @code{<gdb:iterator>} object. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} iterator-object iterator | 
|  | Return the first argument that was passed to @code{make-iterator}. | 
|  | This is the object being iterated over. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} iterator-progress iterator | 
|  | Return the object tracking iteration progress. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} set-iterator-progress! iterator new-value | 
|  | Set the object tracking iteration progress. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} iterator-next! iterator | 
|  | Invoke the procedure that was the third argument to @code{make-iterator}, | 
|  | passing it one argument, the @code{<gdb:iterator>} object. | 
|  | The result is either the next element in the iteration, or an end | 
|  | marker as implemented by the @code{next!} procedure. | 
|  | By convention the end marker is the result of @code{(end-of-iteration)}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} end-of-iteration | 
|  | Return the Scheme object that denotes end of iteration. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} end-of-iteration? object | 
|  | Return @code{#t} if @var{object} is the end of iteration marker. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | These functions are provided by the @code{(gdb iterator)} module to | 
|  | assist in using iterators. | 
|  |  | 
|  | @deffn {Scheme Procedure} make-list-iterator list | 
|  | Return a @code{<gdb:iterator>} object that will iterate over @var{list}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} iterator->list iterator | 
|  | Return the elements pointed to by @var{iterator} as a list. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} iterator-map proc iterator | 
|  | Return the list of objects obtained by applying @var{proc} to the object | 
|  | pointed to by @var{iterator} and to each subsequent object. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} iterator-for-each proc iterator | 
|  | Apply @var{proc} to each element pointed to by @var{iterator}. | 
|  | The result is unspecified. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} iterator-filter pred iterator | 
|  | Return the list of elements pointed to by @var{iterator} that satisfy | 
|  | @var{pred}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} iterator-until pred iterator | 
|  | Run @var{iterator} until the result of @code{(pred element)} is true | 
|  | and return that as the result.  Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @node Colors In Guile | 
|  | @subsubsection Colors In Guile | 
|  |  | 
|  | @cindex guile colors | 
|  | @tindex <gdb:color> | 
|  | You can assign instance of @code{<gdb:color>} to the value of | 
|  | a @code{<gdb:parameter>} object created with @code{PARAM_COLOR}. | 
|  |  | 
|  | @code{<gdb:color>} may refer to an index from color palette or contain | 
|  | components of a color from some colorspace. | 
|  |  | 
|  | @deffn {Scheme Procedure} make-color @w{@r{[}value} @ | 
|  | @w{@r{[}#:color-space color-space@r{]}@r{]}} | 
|  |  | 
|  | @var{value} is an integer index of a color in palette, tuple with color | 
|  | components or a string.  String can be a hex RGB triplet in @samp{#RRGGBB} | 
|  | format or one of the following color names: | 
|  | @samp{none} (meaning the terminal's default color), @samp{black}, @samp{red}, | 
|  | @samp{green}, @samp{yellow}, @samp{blue}, @samp{magenta}, @samp{cyan}, | 
|  | or @samp{white}. | 
|  |  | 
|  | @var{color-space} should be one of the @samp{COLORSPACE_} constants.  This | 
|  | argument tells @value{GDBN} which color space @var{value} belongs. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} color? object | 
|  | Return @code{#t} if @var{object} is a @code{<gdb:color>} object. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} color-none? color | 
|  | Return @code{#t} if @var{color} is terminal's default. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} color-indexed? color | 
|  | Return @code{#t} if @var{color} is indexed, i.e. belongs to some palette. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} color-direct? color | 
|  | Return @code{#t} if @var{color} is direct in the sense of ISO/IEC 8613-6. | 
|  | Otherwise return @code{#f}. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} color-string color | 
|  | Return the textual representation of a @code{<gdb:color>} object. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} color-colorspace color | 
|  | Return the color space of a @code{<gdb:color>} object. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} color-index color | 
|  | Return index of the color of a @code{<gdb:color>} object in a palette. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} color-components color | 
|  | Return components of the direct @code{<gdb:color>} object. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} color-escape-sequence color is_foreground | 
|  | Return string to change terminal's color to this. | 
|  |  | 
|  | If @var{is_foreground} is @code{#t}, then the returned sequence will change | 
|  | foreground color.  Otherwise, the returned sequence will change background | 
|  | color. | 
|  |  | 
|  | If styling is currently disabled (@pxref{Output Styling,,@kbd{set style | 
|  | enabled}}), then this procedure will return an empty string. | 
|  | @end deffn | 
|  |  | 
|  | When color is initialized, its color space must be specified.  The | 
|  | available color spaces are represented by constants defined in the @code{gdb} | 
|  | module: | 
|  |  | 
|  | @vtable @code | 
|  | @item COLORSPACE_MONOCHROME | 
|  | Palette with only terminal's default color. | 
|  |  | 
|  | @item COLORSPACE_ANSI_8COLOR | 
|  | Palette with eight standard colors of ISO/IEC 6429 "black", "red", "green", etc. | 
|  |  | 
|  | @item COLORSPACE_AIXTERM_16COLOR | 
|  | Palette with 16 colors.  First eight are standard colors of ISO/IEC 6429 | 
|  | "black", "red", "green", etc.  Next eight are their bright version. | 
|  |  | 
|  | @item COLORSPACE_XTERM_256COLOR | 
|  | Palette with 256 colors.  First 16 are from COLORSPACE_AIXTERM_16COLOR.  Next | 
|  | 216 colors are 6x6x6 RGB cube.  And last 24 colors form grayscale ramp. | 
|  |  | 
|  | @item COLORSPACE_RGB_24BIT | 
|  | Direct 24-bit RGB colors. | 
|  | @end vtable | 
|  |  | 
|  | @node Guile Auto-loading | 
|  | @subsection Guile Auto-loading | 
|  | @cindex guile auto-loading | 
|  |  | 
|  | When a new object file is read (for example, due to the @code{file} | 
|  | command, or because the inferior has loaded a shared library), | 
|  | @value{GDBN} will look for Guile support scripts in two ways: | 
|  | @file{@var{objfile}-gdb.scm} and the @code{.debug_gdb_scripts} section. | 
|  | @xref{Auto-loading extensions}. | 
|  |  | 
|  | The auto-loading feature is useful for supplying application-specific | 
|  | debugging commands and scripts. | 
|  |  | 
|  | Auto-loading can be enabled or disabled, | 
|  | and the list of auto-loaded scripts can be printed. | 
|  |  | 
|  | @table @code | 
|  | @anchor{set auto-load guile-scripts} | 
|  | @kindex set auto-load guile-scripts | 
|  | @item set auto-load guile-scripts [on|off] | 
|  | Enable or disable the auto-loading of Guile scripts. | 
|  |  | 
|  | @anchor{show auto-load guile-scripts} | 
|  | @kindex show auto-load guile-scripts | 
|  | @item show auto-load guile-scripts | 
|  | Show whether auto-loading of Guile scripts is enabled or disabled. | 
|  |  | 
|  | @anchor{info auto-load guile-scripts} | 
|  | @kindex info auto-load guile-scripts | 
|  | @cindex print list of auto-loaded Guile scripts | 
|  | @item info auto-load guile-scripts [@var{regexp}] | 
|  | Print the list of all Guile scripts that @value{GDBN} auto-loaded. | 
|  |  | 
|  | Also printed is the list of Guile scripts that were mentioned in | 
|  | the @code{.debug_gdb_scripts} section and were not found. | 
|  | This is useful because their names are not printed when @value{GDBN} | 
|  | tries to load them and fails.  There may be many of them, and printing | 
|  | an error message for each one is problematic. | 
|  |  | 
|  | If @var{regexp} is supplied only Guile scripts with matching names are printed. | 
|  |  | 
|  | Example: | 
|  |  | 
|  | @smallexample | 
|  | (gdb) info auto-load guile-scripts | 
|  | Loaded Script | 
|  | Yes    scm-section-script.scm | 
|  | full name: /tmp/scm-section-script.scm | 
|  | No     my-foo-pretty-printers.scm | 
|  | @end smallexample | 
|  | @end table | 
|  |  | 
|  | When reading an auto-loaded file, @value{GDBN} sets the | 
|  | @dfn{current objfile}.  This is available via the @code{current-objfile} | 
|  | procedure (@pxref{Objfiles In Guile}).  This can be useful for | 
|  | registering objfile-specific pretty-printers. | 
|  |  | 
|  | @node Guile Modules | 
|  | @subsection Guile Modules | 
|  | @cindex guile modules | 
|  |  | 
|  | @value{GDBN} comes with several modules to assist writing Guile code. | 
|  |  | 
|  | @menu | 
|  | * Guile Printing Module::  Building and registering pretty-printers | 
|  | * Guile Types Module::     Utilities for working with types | 
|  | @end menu | 
|  |  | 
|  | @node Guile Printing Module | 
|  | @subsubsection Guile Printing Module | 
|  |  | 
|  | This module provides a collection of utilities for working with | 
|  | pretty-printers. | 
|  |  | 
|  | Usage: | 
|  |  | 
|  | @smallexample | 
|  | (use-modules (gdb printing)) | 
|  | @end smallexample | 
|  |  | 
|  | @deffn {Scheme Procedure} prepend-pretty-printer! object printer | 
|  | Add @var{printer} to the front of the list of pretty-printers for | 
|  | @var{object}.  The @var{object} must either be a @code{<gdb:objfile>} object, | 
|  | or @code{#f} in which case @var{printer} is added to the global list of | 
|  | printers. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} append-pretty-printer! object printer | 
|  | Add @var{printer} to the end of the list of pretty-printers for | 
|  | @var{object}.  The @var{object} must either be a @code{<gdb:objfile>} object, | 
|  | or @code{#f} in which case @var{printer} is added to the global list of | 
|  | printers. | 
|  | @end deffn | 
|  |  | 
|  | @node Guile Types Module | 
|  | @subsubsection Guile Types Module | 
|  |  | 
|  | This module provides a collection of utilities for working with | 
|  | @code{<gdb:type>} objects. | 
|  |  | 
|  | Usage: | 
|  |  | 
|  | @smallexample | 
|  | (use-modules (gdb types)) | 
|  | @end smallexample | 
|  |  | 
|  | @deffn {Scheme Procedure} get-basic-type type | 
|  | Return @var{type} with const and volatile qualifiers stripped, | 
|  | and with typedefs and C@t{++} references converted to the underlying type. | 
|  |  | 
|  | C@t{++} example: | 
|  |  | 
|  | @smallexample | 
|  | typedef const int const_int; | 
|  | const_int foo (3); | 
|  | const_int& foo_ref (foo); | 
|  | int main () @{ return 0; @} | 
|  | @end smallexample | 
|  |  | 
|  | Then in gdb: | 
|  |  | 
|  | @smallexample | 
|  | (gdb) start | 
|  | (gdb) guile (use-modules (gdb) (gdb types)) | 
|  | (gdb) guile (define foo-ref (parse-and-eval "foo_ref")) | 
|  | (gdb) guile (get-basic-type (value-type foo-ref)) | 
|  | #<gdb:type int> | 
|  | @end smallexample | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} type-has-field-deep? type field | 
|  | Return @code{#t} if @var{type}, assumed to be a type with fields | 
|  | (e.g., a structure or union), has field @var{field}. | 
|  | Otherwise return @code{#f}. | 
|  | This searches baseclasses, whereas @code{type-has-field?} does not. | 
|  | @end deffn | 
|  |  | 
|  | @deffn {Scheme Procedure} make-enum-hashtable enum-type | 
|  | Return a Guile hash table produced from @var{enum-type}. | 
|  | Elements in the hash table are referenced with @code{hashq-ref}. | 
|  | @end deffn |