1 @c Copyright (C) 2008-2019 Free Software Foundation, Inc.
2 @c Permission is granted to copy, distribute and/or modify this document
3 @c under the terms of the GNU Free Documentation License, Version 1.3 or
4 @c any later version published by the Free Software Foundation; with the
5 @c Invariant Sections being ``Free Software'' and ``Free Software Needs
6 @c Free Documentation'', with the Front-Cover Texts being ``A GNU Manual,''
7 @c and with the Back-Cover Texts as in (a) below.
9 @c (a) The FSF's Back-Cover Text is: ``You are free to copy and modify
10 @c this GNU Manual. Buying copies from GNU Press supports the FSF in
11 @c developing GNU and promoting software freedom.''
14 @section Extending @value{GDBN} using Guile
15 @cindex guile scripting
16 @cindex scripting with guile
18 You can extend @value{GDBN} using the @uref{http://www.gnu.org/software/guile/,
19 Guile implementation of the Scheme programming language}.
20 This feature is available only if @value{GDBN} was configured using
21 @option{--with-guile}.
24 * Guile Introduction:: Introduction to Guile scripting in @value{GDBN}
25 * Guile Commands:: Accessing Guile from @value{GDBN}
26 * Guile API:: Accessing @value{GDBN} from Guile
27 * Guile Auto-loading:: Automatically loading Guile code
28 * Guile Modules:: Guile modules provided by @value{GDBN}
31 @node Guile Introduction
32 @subsection Guile Introduction
34 Guile is an implementation of the Scheme programming language
35 and is the GNU project's official extension language.
37 Guile support in @value{GDBN} follows the Python support in @value{GDBN}
38 reasonably closely, so concepts there should carry over.
39 However, some things are done differently where it makes sense.
41 @value{GDBN} requires Guile version 2.0 or greater.
42 Older versions are not supported.
44 @cindex guile scripts directory
45 Guile scripts used by @value{GDBN} should be installed in
46 @file{@var{data-directory}/guile}, where @var{data-directory} is
47 the data directory as determined at @value{GDBN} startup (@pxref{Data Files}).
48 This directory, known as the @dfn{guile directory},
49 is automatically added to the Guile Search Path in order to allow
50 the Guile interpreter to locate all scripts installed at this location.
53 @subsection Guile Commands
54 @cindex guile commands
55 @cindex commands to access guile
57 @value{GDBN} provides two commands for accessing the Guile interpreter:
64 The @code{guile-repl} command can be used to start an interactive
65 Guile prompt or @dfn{repl}. To return to @value{GDBN},
66 type @kbd{,q} or the @code{EOF} character (e.g., @kbd{Ctrl-D} on
67 an empty prompt). These commands do not take any arguments.
71 @item guile @r{[}@var{scheme-expression}@r{]}
72 @itemx gu @r{[}@var{scheme-expression}@r{]}
73 The @code{guile} command can be used to evaluate a Scheme expression.
75 If given an argument, @value{GDBN} will pass the argument to the Guile
76 interpreter for evaluation.
79 (@value{GDBP}) guile (display (+ 20 3)) (newline)
83 The result of the Scheme expression is displayed using normal Guile rules.
86 (@value{GDBP}) guile (+ 20 3)
90 If you do not provide an argument to @code{guile}, it will act as a
91 multi-line command, like @code{define}. In this case, the Guile
92 script is made up of subsequent command lines, given after the
93 @code{guile} command. This command list is terminated using a line
94 containing @code{end}. For example:
105 It is also possible to execute a Guile script from the @value{GDBN}
109 @item source @file{script-name}
110 The script name must end with @samp{.scm} and @value{GDBN} must be configured
111 to recognize the script language based on filename extension using
112 the @code{script-extension} setting. @xref{Extending GDB, ,Extending GDB}.
114 @item guile (load "script-name")
115 This method uses the @code{load} Guile function.
116 It takes a string argument that is the name of the script to load.
117 See the Guile documentation for a description of this function.
118 (@pxref{Loading,,, guile, GNU Guile Reference Manual}).
122 @subsection Guile API
124 @cindex programming in guile
126 You can get quick online help for @value{GDBN}'s Guile API by issuing
127 the command @w{@kbd{help guile}}, or by issuing the command @kbd{,help}
128 from an interactive Guile session. Furthermore, most Guile procedures
129 provided by @value{GDBN} have doc strings which can be obtained with
130 @kbd{,describe @var{procedure-name}} or @kbd{,d @var{procedure-name}}
131 from the Guile interactive prompt.
134 * Basic Guile:: Basic Guile Functions
135 * Guile Configuration:: Guile configuration variables
136 * GDB Scheme Data Types:: Scheme representations of GDB objects
137 * Guile Exception Handling:: How Guile exceptions are translated
138 * Values From Inferior In Guile:: Guile representation of values
139 * Arithmetic In Guile:: Arithmetic in Guile
140 * Types In Guile:: Guile representation of types
141 * Guile Pretty Printing API:: Pretty-printing values with Guile
142 * Selecting Guile Pretty-Printers:: How GDB chooses a pretty-printer
143 * Writing a Guile Pretty-Printer:: Writing a pretty-printer
144 * Commands In Guile:: Implementing new commands in Guile
145 * Parameters In Guile:: Adding new @value{GDBN} parameters
146 * Progspaces In Guile:: Program spaces
147 * Objfiles In Guile:: Object files in Guile
148 * Frames In Guile:: Accessing inferior stack frames from Guile
149 * Blocks In Guile:: Accessing blocks from Guile
150 * Symbols In Guile:: Guile representation of symbols
151 * Symbol Tables In Guile:: Guile representation of symbol tables
152 * Breakpoints In Guile:: Manipulating breakpoints using Guile
153 * Lazy Strings In Guile:: Guile representation of lazy strings
154 * Architectures In Guile:: Guile representation of architectures
155 * Disassembly In Guile:: Disassembling instructions from Guile
156 * I/O Ports in Guile:: GDB I/O ports
157 * Memory Ports in Guile:: Accessing memory through ports and bytevectors
158 * Iterators In Guile:: Basic iterator support
162 @subsubsection Basic Guile
165 @cindex guile pagination
166 At startup, @value{GDBN} overrides Guile's @code{current-output-port} and
167 @code{current-error-port} to print using @value{GDBN}'s output-paging streams.
168 A Guile program which outputs to one of these streams may have its
169 output interrupted by the user (@pxref{Screen Size}). In this
170 situation, a Guile @code{signal} exception is thrown with value @code{SIGINT}.
172 Guile's history mechanism uses the same naming as @value{GDBN}'s,
173 namely the user of dollar-variables (e.g., $1, $2, etc.).
174 The results of evaluations in Guile and in GDB are counted separately,
175 @code{$1} in Guile is not the same value as @code{$1} in @value{GDBN}.
177 @value{GDBN} is not thread-safe. If your Guile program uses multiple
178 threads, you must be careful to only call @value{GDBN}-specific
179 functions in the @value{GDBN} thread.
181 Some care must be taken when writing Guile code to run in
182 @value{GDBN}. Two things are worth noting in particular:
186 @value{GDBN} installs handlers for @code{SIGCHLD} and @code{SIGINT}.
187 Guile code must not override these, or even change the options using
188 @code{sigaction}. If your program changes the handling of these
189 signals, @value{GDBN} will most likely stop working correctly. Note
190 that it is unfortunately common for GUI toolkits to install a
191 @code{SIGCHLD} handler.
194 @value{GDBN} takes care to mark its internal file descriptors as
195 close-on-exec. However, this cannot be done in a thread-safe way on
196 all platforms. Your Guile programs should be aware of this and
197 should both create new file descriptors with the close-on-exec flag
198 set and arrange to close unneeded file descriptors before starting a
202 @cindex guile gdb module
203 @value{GDBN} introduces a new Guile module, named @code{gdb}. All
204 methods and classes added by @value{GDBN} are placed in this module.
205 @value{GDBN} does not automatically @code{import} the @code{gdb} module,
206 scripts must do this themselves. There are various options for how to
207 import a module, so @value{GDBN} leaves the choice of how the @code{gdb}
208 module is imported to the user.
209 To simplify interactive use, it is recommended to add one of the following
213 guile (use-modules (gdb))
217 guile (use-modules ((gdb) #:renamer (symbol-prefix-proc 'gdb:)))
220 Which one to choose depends on your preference.
221 The second one adds @code{gdb:} as a prefix to all module functions
224 The rest of this manual assumes the @code{gdb} module has been imported
225 without any prefix. See the Guile documentation for @code{use-modules}
227 (@pxref{Using Guile Modules,,, guile, GNU Guile Reference Manual}).
232 (gdb) guile (value-type (make-value 1))
233 ERROR: Unbound variable: value-type
234 Error while executing Scheme code.
235 (gdb) guile (use-modules (gdb))
236 (gdb) guile (value-type (make-value 1))
241 The @code{(gdb)} module provides these basic Guile functions.
244 @deffn {Scheme Procedure} execute command @r{[}#:from-tty boolean@r{]} @r{[}#:to-string boolean@r{]}
245 Evaluate @var{command}, a string, as a @value{GDBN} CLI command.
246 If a @value{GDBN} exception happens while @var{command} runs, it is
247 translated as described in
248 @ref{Guile Exception Handling,,Guile Exception Handling}.
250 @var{from-tty} specifies whether @value{GDBN} ought to consider this
251 command as having originated from the user invoking it interactively.
252 It must be a boolean value. If omitted, it defaults to @code{#f}.
254 By default, any output produced by @var{command} is sent to
255 @value{GDBN}'s standard output (and to the log output if logging is
256 turned on). If the @var{to-string} parameter is
257 @code{#t}, then output will be collected by @code{execute} and
258 returned as a string. The default is @code{#f}, in which case the
259 return value is unspecified. If @var{to-string} is @code{#t}, the
260 @value{GDBN} virtual terminal will be temporarily set to unlimited width
261 and height, and its pagination will be disabled; @pxref{Screen Size}.
264 @deffn {Scheme Procedure} history-ref number
265 Return a value from @value{GDBN}'s value history (@pxref{Value
266 History}). The @var{number} argument indicates which history element to return.
267 If @var{number} is negative, then @value{GDBN} will take its absolute value
268 and count backward from the last element (i.e., the most recent element) to
269 find the value to return. If @var{number} is zero, then @value{GDBN} will
270 return the most recent element. If the element specified by @var{number}
271 doesn't exist in the value history, a @code{gdb:error} exception will be
274 If no exception is raised, the return value is always an instance of
275 @code{<gdb:value>} (@pxref{Values From Inferior In Guile}).
277 @emph{Note:} @value{GDBN}'s value history is independent of Guile's.
278 @code{$1} in @value{GDBN}'s value history contains the result of evaluating
279 an expression from @value{GDBN}'s command line and @code{$1} from Guile's
280 history contains the result of evaluating an expression from Guile's
284 @deffn {Scheme Procedure} history-append! value
285 Append @var{value}, an instance of @code{<gdb:value>}, to @value{GDBN}'s
286 value history. Return its index in the history.
288 Putting into history values returned by Guile extensions will allow
289 the user convenient access to those values via CLI history
293 @deffn {Scheme Procedure} parse-and-eval expression
294 Parse @var{expression} as an expression in the current language,
295 evaluate it, and return the result as a @code{<gdb:value>}.
296 The @var{expression} must be a string.
298 This function can be useful when implementing a new command
299 (@pxref{Commands In Guile}), as it provides a way to parse the
300 command's arguments as an expression.
301 It is also is useful when computing values.
302 For example, it is the only way to get the value of a
303 convenience variable (@pxref{Convenience Vars}) as a @code{<gdb:value>}.
306 @node Guile Configuration
307 @subsubsection Guile Configuration
308 @cindex guile configuration
310 @value{GDBN} provides these Scheme functions to access various configuration
313 @deffn {Scheme Procedure} data-directory
314 Return a string containing @value{GDBN}'s data directory.
315 This directory contains @value{GDBN}'s ancillary files.
318 @deffn {Scheme Procedure} guile-data-directory
319 Return a string containing @value{GDBN}'s Guile data directory.
320 This directory contains the Guile modules provided by @value{GDBN}.
323 @deffn {Scheme Procedure} gdb-version
324 Return a string containing the @value{GDBN} version.
327 @deffn {Scheme Procedure} host-config
328 Return a string containing the host configuration.
329 This is the string passed to @code{--host} when @value{GDBN} was configured.
332 @deffn {Scheme Procedure} target-config
333 Return a string containing the target configuration.
334 This is the string passed to @code{--target} when @value{GDBN} was configured.
337 @node GDB Scheme Data Types
338 @subsubsection GDB Scheme Data Types
341 The values exposed by @value{GDBN} to Guile are known as
342 @dfn{@value{GDBN} objects}. There are several kinds of @value{GDBN}
343 object, and each is disjoint from all other types known to Guile.
345 @deffn {Scheme Procedure} gdb-object-kind object
346 Return the kind of the @value{GDBN} object, e.g., @code{<gdb:breakpoint>},
350 @value{GDBN} defines the following object types:
354 @xref{Architectures In Guile}.
357 @xref{Blocks In Guile}.
359 @item <gdb:block-symbols-iterator>
360 @xref{Blocks In Guile}.
362 @item <gdb:breakpoint>
363 @xref{Breakpoints In Guile}.
366 @xref{Commands In Guile}.
368 @item <gdb:exception>
369 @xref{Guile Exception Handling}.
372 @xref{Frames In Guile}.
375 @xref{Iterators In Guile}.
377 @item <gdb:lazy-string>
378 @xref{Lazy Strings In Guile}.
381 @xref{Objfiles In Guile}.
383 @item <gdb:parameter>
384 @xref{Parameters In Guile}.
386 @item <gdb:pretty-printer>
387 @xref{Guile Pretty Printing API}.
389 @item <gdb:pretty-printer-worker>
390 @xref{Guile Pretty Printing API}.
392 @item <gdb:progspace>
393 @xref{Progspaces In Guile}.
396 @xref{Symbols In Guile}.
399 @xref{Symbol Tables In Guile}.
402 @xref{Symbol Tables In Guile}.
405 @xref{Types In Guile}.
408 @xref{Types In Guile}.
411 @xref{Values From Inferior In Guile}.
414 The following @value{GDBN} objects are managed internally so that the
415 Scheme function @code{eq?} may be applied to them.
420 @item <gdb:breakpoint>
423 @item <gdb:progspace>
429 @node Guile Exception Handling
430 @subsubsection Guile Exception Handling
431 @cindex guile exceptions
432 @cindex exceptions, guile
433 @kindex set guile print-stack
435 When executing the @code{guile} command, Guile exceptions
436 uncaught within the Guile code are translated to calls to the
437 @value{GDBN} error-reporting mechanism. If the command that called
438 @code{guile} does not handle the error, @value{GDBN} will
439 terminate it and report the error according to the setting of
440 the @code{guile print-stack} parameter.
442 The @code{guile print-stack} parameter has three settings:
449 An error message is printed containing the Guile exception name,
450 the associated value, and the Guile call stack backtrace at the
451 point where the exception was raised. Example:
454 (@value{GDBP}) guile (display foo)
455 ERROR: In procedure memoize-variable-access!:
456 ERROR: Unbound variable: foo
457 Error while executing Scheme code.
461 In addition to an error message a full backtrace is printed.
464 (@value{GDBP}) set guile print-stack full
465 (@value{GDBP}) guile (display foo)
468 157: 10 [catch #t #<catch-closure 2c76e20> ...]
470 ?: 9 [apply-smob/1 #<catch-closure 2c76e20>]
472 157: 8 [catch #t #<catch-closure 2c76d20> ...]
474 ?: 7 [apply-smob/1 #<catch-closure 2c76d20>]
475 ?: 6 [call-with-input-string "(display foo)" ...]
477 2320: 5 [save-module-excursion #<procedure 2c2dc30 ... ()>]
478 In ice-9/eval-string.scm:
479 44: 4 [read-and-eval #<input: string 27cb410> #:lang ...]
480 37: 3 [lp (display foo)]
483 393: 1 [eval #<memoized foo> ()]
485 ?: 0 [memoize-variable-access! #<memoized foo> ...]
487 ERROR: In procedure memoize-variable-access!:
488 ERROR: Unbound variable: foo
489 Error while executing Scheme code.
493 @value{GDBN} errors that happen in @value{GDBN} commands invoked by
494 Guile code are converted to Guile exceptions. The type of the
495 Guile exception depends on the error.
497 Guile procedures provided by @value{GDBN} can throw the standard
498 Guile exceptions like @code{wrong-type-arg} and @code{out-of-range}.
500 User interrupt (via @kbd{C-c} or by typing @kbd{q} at a pagination
501 prompt) is translated to a Guile @code{signal} exception with value
504 @value{GDBN} Guile procedures can also throw these exceptions:
508 This exception is a catch-all for errors generated from within @value{GDBN}.
510 @item gdb:invalid-object
511 This exception is thrown when accessing Guile objects that wrap underlying
512 @value{GDBN} objects have become invalid. For example, a
513 @code{<gdb:breakpoint>} object becomes invalid if the user deletes it
514 from the command line. The object still exists in Guile, but the
515 object it represents is gone. Further operations on this breakpoint
516 will throw this exception.
518 @item gdb:memory-error
519 This exception is thrown when an operation tried to access invalid
520 memory in the inferior.
522 @item gdb:pp-type-error
523 This exception is thrown when a Guile pretty-printer passes a bad object
527 The following exception-related procedures are provided by the
530 @deffn {Scheme Procedure} make-exception key args
531 Return a @code{<gdb:exception>} object given by its @var{key} and
532 @var{args}, which are the standard Guile parameters of an exception.
533 See the Guile documentation for more information (@pxref{Exceptions,,,
534 guile, GNU Guile Reference Manual}).
537 @deffn {Scheme Procedure} exception? object
538 Return @code{#t} if @var{object} is a @code{<gdb:exception>} object.
539 Otherwise return @code{#f}.
542 @deffn {Scheme Procedure} exception-key exception
543 Return the @var{args} field of a @code{<gdb:exception>} object.
546 @deffn {Scheme Procedure} exception-args exception
547 Return the @var{args} field of a @code{<gdb:exception>} object.
550 @node Values From Inferior In Guile
551 @subsubsection Values From Inferior In Guile
552 @cindex values from inferior, in guile
553 @cindex guile, working with values from inferior
555 @tindex @code{<gdb:value>}
556 @value{GDBN} provides values it obtains from the inferior program in
557 an object of type @code{<gdb:value>}. @value{GDBN} uses this object
558 for its internal bookkeeping of the inferior's values, and for
559 fetching values when necessary.
561 @value{GDBN} does not memoize @code{<gdb:value>} objects.
562 @code{make-value} always returns a fresh object.
565 (gdb) guile (eq? (make-value 1) (make-value 1))
567 (gdb) guile (equal? (make-value 1) (make-value 1))
571 A @code{<gdb:value>} that represents a function can be executed via
572 inferior function call with @code{value-call}.
573 Any arguments provided to the call must match the function's prototype,
574 and must be provided in the order specified by that prototype.
576 For example, @code{some-val} is a @code{<gdb:value>} instance
577 representing a function that takes two integers as arguments. To
578 execute this function, call it like so:
581 (define result (value-call some-val 10 20))
584 Any values returned from a function call are @code{<gdb:value>} objects.
586 Note: Unlike Python scripting in @value{GDBN},
587 inferior values that are simple scalars cannot be used directly in
588 Scheme expressions that are valid for the value's data type.
589 For example, @code{(+ (parse-and-eval "int_variable") 2)} does not work.
590 And inferior values that are structures or instances of some class cannot
591 be accessed using any special syntax, instead @code{value-field} must be used.
593 The following value-related procedures are provided by the
596 @deffn {Scheme Procedure} value? object
597 Return @code{#t} if @var{object} is a @code{<gdb:value>} object.
598 Otherwise return @code{#f}.
601 @deffn {Scheme Procedure} make-value value @r{[}#:type type@r{]}
602 Many Scheme values can be converted directly to a @code{<gdb:value>}
603 with this procedure. If @var{type} is specified, the result is a value
604 of this type, and if @var{value} can't be represented with this type
605 an exception is thrown. Otherwise the type of the result is determined from
606 @var{value} as described below.
608 @xref{Architectures In Guile}, for a list of the builtin
609 types for an architecture.
611 Here's how Scheme values are converted when @var{type} argument to
612 @code{make-value} is not specified:
616 A Scheme boolean is converted the boolean type for the current language.
619 A Scheme integer is converted to the first of a C @code{int},
620 @code{unsigned int}, @code{long}, @code{unsigned long},
621 @code{long long} or @code{unsigned long long} type
622 for the current architecture that can represent the value.
624 If the Scheme integer cannot be represented as a target integer
625 an @code{out-of-range} exception is thrown.
628 A Scheme real is converted to the C @code{double} type for the
629 current architecture.
632 A Scheme string is converted to a string in the current target
633 language using the current target encoding.
634 Characters that cannot be represented in the current target encoding
635 are replaced with the corresponding escape sequence. This is Guile's
636 @code{SCM_FAILED_CONVERSION_ESCAPE_SEQUENCE} conversion strategy
637 (@pxref{Strings,,, guile, GNU Guile Reference Manual}).
639 Passing @var{type} is not supported in this case,
640 if it is provided a @code{wrong-type-arg} exception is thrown.
642 @item @code{<gdb:lazy-string>}
643 If @var{value} is a @code{<gdb:lazy-string>} object (@pxref{Lazy Strings In
644 Guile}), then the @code{lazy-string->value} procedure is called, and
647 Passing @var{type} is not supported in this case,
648 if it is provided a @code{wrong-type-arg} exception is thrown.
650 @item Scheme bytevector
651 If @var{value} is a Scheme bytevector and @var{type} is provided,
652 @var{value} must be the same size, in bytes, of values of type @var{type},
653 and the result is essentially created by using @code{memcpy}.
655 If @var{value} is a Scheme bytevector and @var{type} is not provided,
656 the result is an array of type @code{uint8} of the same length.
660 @cindex optimized out value in guile
661 @deffn {Scheme Procedure} value-optimized-out? value
662 Return @code{#t} if the compiler optimized out @var{value},
663 thus it is not available for fetching from the inferior.
664 Otherwise return @code{#f}.
667 @deffn {Scheme Procedure} value-address value
668 If @var{value} is addressable, returns a
669 @code{<gdb:value>} object representing the address.
670 Otherwise, @code{#f} is returned.
673 @deffn {Scheme Procedure} value-type value
674 Return the type of @var{value} as a @code{<gdb:type>} object
675 (@pxref{Types In Guile}).
678 @deffn {Scheme Procedure} value-dynamic-type value
679 Return the dynamic type of @var{value}. This uses C@t{++} run-time
680 type information (@acronym{RTTI}) to determine the dynamic type of the
681 value. If the value is of class type, it will return the class in
682 which the value is embedded, if any. If the value is of pointer or
683 reference to a class type, it will compute the dynamic type of the
684 referenced object, and return a pointer or reference to that type,
685 respectively. In all other cases, it will return the value's static
688 Note that this feature will only work when debugging a C@t{++} program
689 that includes @acronym{RTTI} for the object in question. Otherwise,
690 it will just return the static type of the value as in @kbd{ptype foo}.
691 @xref{Symbols, ptype}.
694 @deffn {Scheme Procedure} value-cast value type
695 Return a new instance of @code{<gdb:value>} that is the result of
696 casting @var{value} to the type described by @var{type}, which must
697 be a @code{<gdb:type>} object. If the cast cannot be performed for some
698 reason, this method throws an exception.
701 @deffn {Scheme Procedure} value-dynamic-cast value type
702 Like @code{value-cast}, but works as if the C@t{++} @code{dynamic_cast}
703 operator were used. Consult a C@t{++} reference for details.
706 @deffn {Scheme Procedure} value-reinterpret-cast value type
707 Like @code{value-cast}, but works as if the C@t{++} @code{reinterpret_cast}
708 operator were used. Consult a C@t{++} reference for details.
711 @deffn {Scheme Procedure} value-dereference value
712 For pointer data types, this method returns a new @code{<gdb:value>} object
713 whose contents is the object pointed to by @var{value}. For example, if
714 @code{foo} is a C pointer to an @code{int}, declared in your C program as
721 then you can use the corresponding @code{<gdb:value>} to access what
722 @code{foo} points to like this:
725 (define bar (value-dereference foo))
728 The result @code{bar} will be a @code{<gdb:value>} object holding the
729 value pointed to by @code{foo}.
731 A similar function @code{value-referenced-value} exists which also
732 returns @code{<gdb:value>} objects corresonding to the values pointed to
733 by pointer values (and additionally, values referenced by reference
734 values). However, the behavior of @code{value-dereference}
735 differs from @code{value-referenced-value} by the fact that the
736 behavior of @code{value-dereference} is identical to applying the C
737 unary operator @code{*} on a given value. For example, consider a
738 reference to a pointer @code{ptrref}, declared in your C@t{++} program
746 intptr &ptrref = ptr;
749 Though @code{ptrref} is a reference value, one can apply the method
750 @code{value-dereference} to the @code{<gdb:value>} object corresponding
751 to it and obtain a @code{<gdb:value>} which is identical to that
752 corresponding to @code{val}. However, if you apply the method
753 @code{value-referenced-value}, the result would be a @code{<gdb:value>}
754 object identical to that corresponding to @code{ptr}.
757 (define scm-ptrref (parse-and-eval "ptrref"))
758 (define scm-val (value-dereference scm-ptrref))
759 (define scm-ptr (value-referenced-value scm-ptrref))
762 The @code{<gdb:value>} object @code{scm-val} is identical to that
763 corresponding to @code{val}, and @code{scm-ptr} is identical to that
764 corresponding to @code{ptr}. In general, @code{value-dereference} can
765 be applied whenever the C unary operator @code{*} can be applied
766 to the corresponding C value. For those cases where applying both
767 @code{value-dereference} and @code{value-referenced-value} is allowed,
768 the results obtained need not be identical (as we have seen in the above
769 example). The results are however identical when applied on
770 @code{<gdb:value>} objects corresponding to pointers (@code{<gdb:value>}
771 objects with type code @code{TYPE_CODE_PTR}) in a C/C@t{++} program.
774 @deffn {Scheme Procedure} value-referenced-value value
775 For pointer or reference data types, this method returns a new
776 @code{<gdb:value>} object corresponding to the value referenced by the
777 pointer/reference value. For pointer data types,
778 @code{value-dereference} and @code{value-referenced-value} produce
779 identical results. The difference between these methods is that
780 @code{value-dereference} cannot get the values referenced by reference
781 values. For example, consider a reference to an @code{int}, declared
782 in your C@t{++} program as
790 then applying @code{value-dereference} to the @code{<gdb:value>} object
791 corresponding to @code{ref} will result in an error, while applying
792 @code{value-referenced-value} will result in a @code{<gdb:value>} object
793 identical to that corresponding to @code{val}.
796 (define scm-ref (parse-and-eval "ref"))
797 (define err-ref (value-dereference scm-ref)) ;; error
798 (define scm-val (value-referenced-value scm-ref)) ;; ok
801 The @code{<gdb:value>} object @code{scm-val} is identical to that
802 corresponding to @code{val}.
805 @deffn {Scheme Procedure} value-field value field-name
806 Return field @var{field-name} from @code{<gdb:value>} object @var{value}.
809 @deffn {Scheme Procedure} value-subscript value index
810 Return the value of array @var{value} at index @var{index}.
811 The @var{value} argument must be a subscriptable @code{<gdb:value>} object.
814 @deffn {Scheme Procedure} value-call value arg-list
815 Perform an inferior function call, taking @var{value} as a pointer
816 to the function to call.
817 Each element of list @var{arg-list} must be a <gdb:value> object or an object
818 that can be converted to a value.
819 The result is the value returned by the function.
822 @deffn {Scheme Procedure} value->bool value
823 Return the Scheme boolean representing @code{<gdb:value>} @var{value}.
824 The value must be ``integer like''. Pointers are ok.
827 @deffn {Scheme Procedure} value->integer
828 Return the Scheme integer representing @code{<gdb:value>} @var{value}.
829 The value must be ``integer like''. Pointers are ok.
832 @deffn {Scheme Procedure} value->real
833 Return the Scheme real number representing @code{<gdb:value>} @var{value}.
834 The value must be a number.
837 @deffn {Scheme Procedure} value->bytevector
838 Return a Scheme bytevector with the raw contents of @code{<gdb:value>}
839 @var{value}. No transformation, endian or otherwise, is performed.
843 @deffn {Scheme Procedure} value->string value @r{[}#:encoding encoding@r{]} @r{[}#:errors errors@r{]} @r{[}#:length length@r{]}
844 If @var{value>} represents a string, then this method
845 converts the contents to a Guile string. Otherwise, this method will
848 Values are interpreted as strings according to the rules of the
849 current language. If the optional length argument is given, the
850 string will be converted to that length, and will include any embedded
851 zeroes that the string may contain. Otherwise, for languages
852 where the string is zero-terminated, the entire string will be
855 For example, in C-like languages, a value is a string if it is a pointer
856 to or an array of characters or ints of type @code{wchar_t}, @code{char16_t},
859 If the optional @var{encoding} argument is given, it must be a string
860 naming the encoding of the string in the @code{<gdb:value>}, such as
861 @code{"ascii"}, @code{"iso-8859-6"} or @code{"utf-8"}. It accepts
862 the same encodings as the corresponding argument to Guile's
863 @code{scm_from_stringn} function, and the Guile codec machinery will be used
864 to convert the string. If @var{encoding} is not given, or if
865 @var{encoding} is the empty string, then either the @code{target-charset}
866 (@pxref{Character Sets}) will be used, or a language-specific encoding
867 will be used, if the current language is able to supply one.
869 The optional @var{errors} argument is one of @code{#f}, @code{error} or
870 @code{substitute}. @code{error} and @code{substitute} must be symbols.
871 If @var{errors} is not specified, or if its value is @code{#f}, then the
872 default conversion strategy is used, which is set with the Scheme function
873 @code{set-port-conversion-strategy!}.
874 If the value is @code{'error} then an exception is thrown if there is any
875 conversion error. If the value is @code{'substitute} then any conversion
876 error is replaced with question marks.
877 @xref{Strings,,, guile, GNU Guile Reference Manual}.
879 If the optional @var{length} argument is given, the string will be
880 fetched and converted to the given length.
881 The length must be a Scheme integer and not a @code{<gdb:value>} integer.
885 @deffn {Scheme Procedure} value->lazy-string value @r{[}#:encoding encoding@r{]} @r{[}#:length length@r{]}
886 If this @code{<gdb:value>} represents a string, then this method
887 converts @var{value} to a @code{<gdb:lazy-string} (@pxref{Lazy Strings
888 In Guile}). Otherwise, this method will throw an exception.
890 If the optional @var{encoding} argument is given, it must be a string
891 naming the encoding of the @code{<gdb:lazy-string}. Some examples are:
892 @code{"ascii"}, @code{"iso-8859-6"} or @code{"utf-8"}. If the
893 @var{encoding} argument is an encoding that @value{GDBN} does not
894 recognize, @value{GDBN} will raise an error.
896 When a lazy string is printed, the @value{GDBN} encoding machinery is
897 used to convert the string during printing. If the optional
898 @var{encoding} argument is not provided, or is an empty string,
899 @value{GDBN} will automatically select the encoding most suitable for
900 the string type. For further information on encoding in @value{GDBN}
901 please see @ref{Character Sets}.
903 If the optional @var{length} argument is given, the string will be
904 fetched and encoded to the length of characters specified. If
905 the @var{length} argument is not provided, the string will be fetched
906 and encoded until a null of appropriate width is found.
907 The length must be a Scheme integer and not a @code{<gdb:value>} integer.
910 @deffn {Scheme Procedure} value-lazy? value
911 Return @code{#t} if @var{value} has not yet been fetched
913 Otherwise return @code{#f}.
914 @value{GDBN} does not fetch values until necessary, for efficiency.
918 (define myval (parse-and-eval "somevar"))
921 The value of @code{somevar} is not fetched at this time. It will be
922 fetched when the value is needed, or when the @code{fetch-lazy}
923 procedure is invoked.
926 @deffn {Scheme Procedure} make-lazy-value type address
927 Return a @code{<gdb:value>} that will be lazily fetched from the
928 target. The object of type @code{<gdb:type>} whose value to fetch is
929 specified by its @var{type} and its target memory @var{address}, which
933 @deffn {Scheme Procedure} value-fetch-lazy! value
934 If @var{value} is a lazy value (@code{(value-lazy? value)} is @code{#t}),
935 then the value is fetched from the inferior.
936 Any errors that occur in the process will produce a Guile exception.
938 If @var{value} is not a lazy value, this method has no effect.
940 The result of this function is unspecified.
943 @deffn {Scheme Procedure} value-print value
944 Return the string representation (print form) of @code{<gdb:value>}
948 @node Arithmetic In Guile
949 @subsubsection Arithmetic In Guile
951 The @code{(gdb)} module provides several functions for performing
952 arithmetic on @code{<gdb:value>} objects.
953 The arithmetic is performed as if it were done by the target,
954 and therefore has target semantics which are not necessarily
955 those of Scheme. For example operations work with a fixed precision,
956 not the arbitrary precision of Scheme.
958 Wherever a function takes an integer or pointer as an operand,
959 @value{GDBN} will convert appropriate Scheme values to perform
962 @deffn {Scheme Procedure} value-add a b
965 @deffn {Scheme Procedure} value-sub a b
968 @deffn {Scheme Procedure} value-mul a b
971 @deffn {Scheme Procedure} value-div a b
974 @deffn {Scheme Procedure} value-rem a b
977 @deffn {Scheme Procedure} value-mod a b
980 @deffn {Scheme Procedure} value-pow a b
983 @deffn {Scheme Procedure} value-not a
986 @deffn {Scheme Procedure} value-neg a
989 @deffn {Scheme Procedure} value-pos a
992 @deffn {Scheme Procedure} value-abs a
995 @deffn {Scheme Procedure} value-lsh a b
998 @deffn {Scheme Procedure} value-rsh a b
1001 @deffn {Scheme Procedure} value-min a b
1004 @deffn {Scheme Procedure} value-max a b
1007 @deffn {Scheme Procedure} value-lognot a
1010 @deffn {Scheme Procedure} value-logand a b
1013 @deffn {Scheme Procedure} value-logior a b
1016 @deffn {Scheme Procedure} value-logxor a b
1019 @deffn {Scheme Procedure} value=? a b
1022 @deffn {Scheme Procedure} value<? a b
1025 @deffn {Scheme Procedure} value<=? a b
1028 @deffn {Scheme Procedure} value>? a b
1031 @deffn {Scheme Procedure} value>=? a b
1034 Scheme does not provide a @code{not-equal} function,
1035 and thus Guile support in @value{GDBN} does not either.
1037 @node Types In Guile
1038 @subsubsection Types In Guile
1039 @cindex types in guile
1040 @cindex guile, working with types
1043 @value{GDBN} represents types from the inferior in objects of type
1046 The following type-related procedures are provided by the
1047 @code{(gdb)} module.
1049 @deffn {Scheme Procedure} type? object
1050 Return @code{#t} if @var{object} is an object of type @code{<gdb:type>}.
1051 Otherwise return @code{#f}.
1054 @deffn {Scheme Procedure} lookup-type name @r{[}#:block block@r{]}
1055 This function looks up a type by its @var{name}, which must be a string.
1057 If @var{block} is given, it is an object of type @code{<gdb:block>},
1058 and @var{name} is looked up in that scope.
1059 Otherwise, it is searched for globally.
1061 Ordinarily, this function will return an instance of @code{<gdb:type>}.
1062 If the named type cannot be found, it will throw an exception.
1065 @deffn {Scheme Procedure} type-code type
1066 Return the type code of @var{type}. The type code will be one of the
1067 @code{TYPE_CODE_} constants defined below.
1070 @deffn {Scheme Procedure} type-tag type
1071 Return the tag name of @var{type}. The tag name is the name after
1072 @code{struct}, @code{union}, or @code{enum} in C and C@t{++}; not all
1073 languages have this concept. If this type has no tag name, then
1074 @code{#f} is returned.
1077 @deffn {Scheme Procedure} type-name type
1078 Return the name of @var{type}.
1079 If this type has no name, then @code{#f} is returned.
1082 @deffn {Scheme Procedure} type-print-name type
1083 Return the print name of @var{type}.
1084 This returns something even for anonymous types.
1085 For example, for an anonymous C struct @code{"struct @{...@}"} is returned.
1088 @deffn {Scheme Procedure} type-sizeof type
1089 Return the size of this type, in target @code{char} units. Usually, a
1090 target's @code{char} type will be an 8-bit byte. However, on some
1091 unusual platforms, this type may have a different size.
1094 @deffn {Scheme Procedure} type-strip-typedefs type
1095 Return a new @code{<gdb:type>} that represents the real type of @var{type},
1096 after removing all layers of typedefs.
1099 @deffn {Scheme Procedure} type-array type n1 @r{[}n2@r{]}
1100 Return a new @code{<gdb:type>} object which represents an array of this
1101 type. If one argument is given, it is the inclusive upper bound of
1102 the array; in this case the lower bound is zero. If two arguments are
1103 given, the first argument is the lower bound of the array, and the
1104 second argument is the upper bound of the array. An array's length
1105 must not be negative, but the bounds can be.
1108 @deffn {Scheme Procedure} type-vector type n1 @r{[}n2@r{]}
1109 Return a new @code{<gdb:type>} object which represents a vector of this
1110 type. If one argument is given, it is the inclusive upper bound of
1111 the vector; in this case the lower bound is zero. If two arguments are
1112 given, the first argument is the lower bound of the vector, and the
1113 second argument is the upper bound of the vector. A vector's length
1114 must not be negative, but the bounds can be.
1116 The difference between an @code{array} and a @code{vector} is that
1117 arrays behave like in C: when used in expressions they decay to a pointer
1118 to the first element whereas vectors are treated as first class values.
1121 @deffn {Scheme Procedure} type-pointer type
1122 Return a new @code{<gdb:type>} object which represents a pointer to
1126 @deffn {Scheme Procedure} type-range type
1127 Return a list of two elements: the low bound and high bound of @var{type}.
1128 If @var{type} does not have a range, an exception is thrown.
1131 @deffn {Scheme Procedure} type-reference type
1132 Return a new @code{<gdb:type>} object which represents a reference to
1136 @deffn {Scheme Procedure} type-target type
1137 Return a new @code{<gdb:type>} object which represents the target type
1140 For a pointer type, the target type is the type of the pointed-to
1141 object. For an array type (meaning C-like arrays), the target type is
1142 the type of the elements of the array. For a function or method type,
1143 the target type is the type of the return value. For a complex type,
1144 the target type is the type of the elements. For a typedef, the
1145 target type is the aliased type.
1147 If the type does not have a target, this method will throw an
1151 @deffn {Scheme Procedure} type-const type
1152 Return a new @code{<gdb:type>} object which represents a
1153 @code{const}-qualified variant of @var{type}.
1156 @deffn {Scheme Procedure} type-volatile type
1157 Return a new @code{<gdb:type>} object which represents a
1158 @code{volatile}-qualified variant of @var{type}.
1161 @deffn {Scheme Procedure} type-unqualified type
1162 Return a new @code{<gdb:type>} object which represents an unqualified
1163 variant of @var{type}. That is, the result is neither @code{const} nor
1167 @deffn {Scheme Procedure} type-num-fields
1168 Return the number of fields of @code{<gdb:type>} @var{type}.
1171 @deffn {Scheme Procedure} type-fields type
1172 Return the fields of @var{type} as a list.
1173 For structure and union types, @code{fields} has the usual meaning.
1174 Range types have two fields, the minimum and maximum values. Enum types
1175 have one field per enum constant. Function and method types have one
1176 field per parameter. The base types of C@t{++} classes are also
1177 represented as fields. If the type has no fields, or does not fit
1178 into one of these categories, an empty list will be returned.
1179 @xref{Fields of a type in Guile}.
1182 @deffn {Scheme Procedure} make-field-iterator type
1183 Return the fields of @var{type} as a <gdb:iterator> object.
1184 @xref{Iterators In Guile}.
1187 @deffn {Scheme Procedure} type-field type field-name
1188 Return field named @var{field-name} in @var{type}.
1189 The result is an object of type @code{<gdb:field>}.
1190 @xref{Fields of a type in Guile}.
1191 If the type does not have fields, or @var{field-name} is not a field
1192 of @var{type}, an exception is thrown.
1194 For example, if @code{some-type} is a @code{<gdb:type>} instance holding
1195 a structure type, you can access its @code{foo} field with:
1198 (define bar (type-field some-type "foo"))
1201 @code{bar} will be a @code{<gdb:field>} object.
1204 @deffn {Scheme Procedure} type-has-field? type name
1205 Return @code{#t} if @code{<gdb:type>} @var{type} has field named @var{name}.
1206 Otherwise return @code{#f}.
1209 Each type has a code, which indicates what category this type falls
1210 into. The available type categories are represented by constants
1211 defined in the @code{(gdb)} module:
1215 The type is a pointer.
1217 @item TYPE_CODE_ARRAY
1218 The type is an array.
1220 @item TYPE_CODE_STRUCT
1221 The type is a structure.
1223 @item TYPE_CODE_UNION
1224 The type is a union.
1226 @item TYPE_CODE_ENUM
1227 The type is an enum.
1229 @item TYPE_CODE_FLAGS
1230 A bit flags type, used for things such as status registers.
1232 @item TYPE_CODE_FUNC
1233 The type is a function.
1236 The type is an integer type.
1239 A floating point type.
1241 @item TYPE_CODE_VOID
1242 The special type @code{void}.
1247 @item TYPE_CODE_RANGE
1248 A range type, that is, an integer type with bounds.
1250 @item TYPE_CODE_STRING
1251 A string type. Note that this is only used for certain languages with
1252 language-defined string types; C strings are not represented this way.
1254 @item TYPE_CODE_BITSTRING
1255 A string of bits. It is deprecated.
1257 @item TYPE_CODE_ERROR
1258 An unknown or erroneous type.
1260 @item TYPE_CODE_METHOD
1261 A method type, as found in C@t{++}.
1263 @item TYPE_CODE_METHODPTR
1264 A pointer-to-member-function.
1266 @item TYPE_CODE_MEMBERPTR
1267 A pointer-to-member.
1272 @item TYPE_CODE_CHAR
1275 @item TYPE_CODE_BOOL
1278 @item TYPE_CODE_COMPLEX
1279 A complex float type.
1281 @item TYPE_CODE_TYPEDEF
1282 A typedef to some other type.
1284 @item TYPE_CODE_NAMESPACE
1285 A C@t{++} namespace.
1287 @item TYPE_CODE_DECFLOAT
1288 A decimal floating point type.
1290 @item TYPE_CODE_INTERNAL_FUNCTION
1291 A function internal to @value{GDBN}. This is the type used to represent
1292 convenience functions (@pxref{Convenience Funs}).
1295 Further support for types is provided in the @code{(gdb types)}
1296 Guile module (@pxref{Guile Types Module}).
1298 @anchor{Fields of a type in Guile}
1299 Each field is represented as an object of type @code{<gdb:field>}.
1301 The following field-related procedures are provided by the
1302 @code{(gdb)} module:
1304 @deffn {Scheme Procedure} field? object
1305 Return @code{#t} if @var{object} is an object of type @code{<gdb:field>}.
1306 Otherwise return @code{#f}.
1309 @deffn {Scheme Procedure} field-name field
1310 Return the name of the field, or @code{#f} for anonymous fields.
1313 @deffn {Scheme Procedure} field-type field
1314 Return the type of the field. This is usually an instance of
1315 @code{<gdb:type>}, but it can be @code{#f} in some situations.
1318 @deffn {Scheme Procedure} field-enumval field
1319 Return the enum value represented by @code{<gdb:field>} @var{field}.
1322 @deffn {Scheme Procedure} field-bitpos field
1323 Return the bit position of @code{<gdb:field>} @var{field}.
1324 This attribute is not available for @code{static} fields (as in
1328 @deffn {Scheme Procedure} field-bitsize field
1329 If the field is packed, or is a bitfield, return the size of
1330 @code{<gdb:field>} @var{field} in bits. Otherwise, zero is returned;
1331 in which case the field's size is given by its type.
1334 @deffn {Scheme Procedure} field-artificial? field
1335 Return @code{#t} if the field is artificial, usually meaning that
1336 it was provided by the compiler and not the user.
1337 Otherwise return @code{#f}.
1340 @deffn {Scheme Procedure} field-base-class? field
1341 Return @code{#t} if the field represents a base class of a C@t{++}
1343 Otherwise return @code{#f}.
1346 @node Guile Pretty Printing API
1347 @subsubsection Guile Pretty Printing API
1348 @cindex guile pretty printing api
1350 An example output is provided (@pxref{Pretty Printing}).
1352 A pretty-printer is represented by an object of type <gdb:pretty-printer>.
1353 Pretty-printer objects are created with @code{make-pretty-printer}.
1355 The following pretty-printer-related procedures are provided by the
1356 @code{(gdb)} module:
1358 @deffn {Scheme Procedure} make-pretty-printer name lookup-function
1359 Return a @code{<gdb:pretty-printer>} object named @var{name}.
1361 @var{lookup-function} is a function of one parameter: the value to
1362 be printed. If the value is handled by this pretty-printer, then
1363 @var{lookup-function} returns an object of type
1364 <gdb:pretty-printer-worker> to perform the actual pretty-printing.
1365 Otherwise @var{lookup-function} returns @code{#f}.
1368 @deffn {Scheme Procedure} pretty-printer? object
1369 Return @code{#t} if @var{object} is a @code{<gdb:pretty-printer>} object.
1370 Otherwise return @code{#f}.
1373 @deffn {Scheme Procedure} pretty-printer-enabled? pretty-printer
1374 Return @code{#t} if @var{pretty-printer} is enabled.
1375 Otherwise return @code{#f}.
1378 @deffn {Scheme Procedure} set-pretty-printer-enabled! pretty-printer flag
1379 Set the enabled flag of @var{pretty-printer} to @var{flag}.
1380 The value returned is unspecified.
1383 @deffn {Scheme Procedure} pretty-printers
1384 Return the list of global pretty-printers.
1387 @deffn {Scheme Procedure} set-pretty-printers! pretty-printers
1388 Set the list of global pretty-printers to @var{pretty-printers}.
1389 The value returned is unspecified.
1392 @deffn {Scheme Procedure} make-pretty-printer-worker display-hint to-string children
1393 Return an object of type @code{<gdb:pretty-printer-worker>}.
1395 This function takes three parameters:
1399 @var{display-hint} provides a hint to @value{GDBN} or @value{GDBN}
1400 front end via MI to change the formatting of the value being printed.
1401 The value must be a string or @code{#f} (meaning there is no hint).
1402 Several values for @var{display-hint}
1403 are predefined by @value{GDBN}:
1407 Indicate that the object being printed is ``array-like''. The CLI
1408 uses this to respect parameters such as @code{set print elements} and
1409 @code{set print array}.
1412 Indicate that the object being printed is ``map-like'', and that the
1413 children of this value can be assumed to alternate between keys and
1417 Indicate that the object being printed is ``string-like''. If the
1418 printer's @code{to-string} function returns a Guile string of some
1419 kind, then @value{GDBN} will call its internal language-specific
1420 string-printing function to format the string. For the CLI this means
1421 adding quotation marks, possibly escaping some characters, respecting
1422 @code{set print elements}, and the like.
1426 @var{to-string} is either a function of one parameter, the
1427 @code{<gdb:pretty-printer-worker>} object, or @code{#f}.
1429 When printing from the CLI, if the @code{to-string} method exists,
1430 then @value{GDBN} will prepend its result to the values returned by
1431 @code{children}. Exactly how this formatting is done is dependent on
1432 the display hint, and may change as more hints are added. Also,
1433 depending on the print settings (@pxref{Print Settings}), the CLI may
1434 print just the result of @code{to-string} in a stack trace, omitting
1435 the result of @code{children}.
1437 If this method returns a string, it is printed verbatim.
1439 Otherwise, if this method returns an instance of @code{<gdb:value>},
1440 then @value{GDBN} prints this value. This may result in a call to
1441 another pretty-printer.
1443 If instead the method returns a Guile value which is convertible to a
1444 @code{<gdb:value>}, then @value{GDBN} performs the conversion and prints
1445 the resulting value. Again, this may result in a call to another
1446 pretty-printer. Guile scalars (integers, floats, and booleans) and
1447 strings are convertible to @code{<gdb:value>}; other types are not.
1449 Finally, if this method returns @code{#f} then no further operations
1450 are peformed in this method and nothing is printed.
1452 If the result is not one of these types, an exception is raised.
1454 @var{to-string} may also be @code{#f} in which case it is left to
1455 @var{children} to print the value.
1458 @var{children} is either a function of one parameter, the
1459 @code{<gdb:pretty-printer-worker>} object, or @code{#f}.
1461 @value{GDBN} will call this function on a pretty-printer to compute the
1462 children of the pretty-printer's value.
1464 This function must return a <gdb:iterator> object.
1465 Each item returned by the iterator must be a tuple holding
1466 two elements. The first element is the ``name'' of the child; the
1467 second element is the child's value. The value can be any Guile
1468 object which is convertible to a @value{GDBN} value.
1470 If @var{children} is @code{#f}, @value{GDBN} will act
1471 as though the value has no children.
1473 Children may be hidden from display based on the value of @samp{set
1474 print max-depth} (@pxref{Print Settings}).
1478 @value{GDBN} provides a function which can be used to look up the
1479 default pretty-printer for a @code{<gdb:value>}:
1481 @deffn {Scheme Procedure} default-visualizer value
1482 This function takes a @code{<gdb:value>} object as an argument. If a
1483 pretty-printer for this value exists, then it is returned. If no such
1484 printer exists, then this returns @code{#f}.
1487 @node Selecting Guile Pretty-Printers
1488 @subsubsection Selecting Guile Pretty-Printers
1489 @cindex selecting guile pretty-printers
1491 There are three sets of pretty-printers that @value{GDBN} searches:
1495 Per-objfile list of pretty-printers (@pxref{Objfiles In Guile}).
1497 Per-progspace list of pretty-printers (@pxref{Progspaces In Guile}).
1499 The global list of pretty-printers (@pxref{Guile Pretty Printing API}).
1500 These printers are available when debugging any inferior.
1503 Pretty-printer lookup is done by passing the value to be printed to the
1504 lookup function of each enabled object in turn.
1505 Lookup stops when a lookup function returns a non-@code{#f} value
1506 or when the list is exhausted.
1507 Lookup functions must return either a @code{<gdb:pretty-printer-worker>}
1508 object or @code{#f}. Otherwise an exception is thrown.
1510 @value{GDBN} first checks the result of @code{objfile-pretty-printers}
1511 of each @code{<gdb:objfile>} in the current program space and iteratively
1512 calls each enabled lookup function in the list for that @code{<gdb:objfile>}
1513 until a non-@code{#f} object is returned.
1514 If no pretty-printer is found in the objfile lists, @value{GDBN} then
1515 searches the result of @code{progspace-pretty-printers} of the current
1516 program space, calling each enabled function until a non-@code{#f} object
1518 After these lists have been exhausted, it tries the global pretty-printers
1519 list, obtained with @code{pretty-printers}, again calling each enabled
1520 function until a non-@code{#f} object is returned.
1522 The order in which the objfiles are searched is not specified. For a
1523 given list, functions are always invoked from the head of the list,
1524 and iterated over sequentially until the end of the list, or a
1525 @code{<gdb:pretty-printer-worker>} object is returned.
1527 For various reasons a pretty-printer may not work.
1528 For example, the underlying data structure may have changed and
1529 the pretty-printer is out of date.
1531 The consequences of a broken pretty-printer are severe enough that
1532 @value{GDBN} provides support for enabling and disabling individual
1533 printers. For example, if @code{print frame-arguments} is on,
1534 a backtrace can become highly illegible if any argument is printed
1535 with a broken printer.
1537 Pretty-printers are enabled and disabled from Scheme by calling
1538 @code{set-pretty-printer-enabled!}.
1539 @xref{Guile Pretty Printing API}.
1541 @node Writing a Guile Pretty-Printer
1542 @subsubsection Writing a Guile Pretty-Printer
1543 @cindex writing a Guile pretty-printer
1545 A pretty-printer consists of two basic parts: a lookup function to determine
1546 if the type is supported, and the printer itself.
1548 Here is an example showing how a @code{std::string} printer might be
1549 written. @xref{Guile Pretty Printing API}, for details.
1552 (define (make-my-string-printer value)
1553 "Print a my::string string"
1554 (make-pretty-printer-worker
1557 (value-field value "_data"))
1561 And here is an example showing how a lookup function for the printer
1562 example above might be written.
1565 (define (str-lookup-function pretty-printer value)
1566 (let ((tag (type-tag (value-type value))))
1568 (string-prefix? "std::string<" tag)
1569 (make-my-string-printer value))))
1572 Then to register this printer in the global printer list:
1575 (append-pretty-printer!
1576 (make-pretty-printer "my-string" str-lookup-function))
1579 The example lookup function extracts the value's type, and attempts to
1580 match it to a type that it can pretty-print. If it is a type the
1581 printer can pretty-print, it will return a <gdb:pretty-printer-worker> object.
1582 If not, it returns @code{#f}.
1584 We recommend that you put your core pretty-printers into a Guile
1585 package. If your pretty-printers are for use with a library, we
1586 further recommend embedding a version number into the package name.
1587 This practice will enable @value{GDBN} to load multiple versions of
1588 your pretty-printers at the same time, because they will have
1591 You should write auto-loaded code (@pxref{Guile Auto-loading}) such that it
1592 can be evaluated multiple times without changing its meaning. An
1593 ideal auto-load file will consist solely of @code{import}s of your
1594 printer modules, followed by a call to a register pretty-printers with
1595 the current objfile.
1597 Taken as a whole, this approach will scale nicely to multiple
1598 inferiors, each potentially using a different library version.
1599 Embedding a version number in the Guile package name will ensure that
1600 @value{GDBN} is able to load both sets of printers simultaneously.
1601 Then, because the search for pretty-printers is done by objfile, and
1602 because your auto-loaded code took care to register your library's
1603 printers with a specific objfile, @value{GDBN} will find the correct
1604 printers for the specific version of the library used by each
1607 To continue the @code{my::string} example,
1608 this code might appear in @code{(my-project my-library v1)}:
1612 (define (register-printers objfile)
1613 (append-objfile-pretty-printer!
1614 (make-pretty-printer "my-string" str-lookup-function)))
1618 And then the corresponding contents of the auto-load file would be:
1621 (use-modules (gdb) (my-project my-library v1))
1622 (register-printers (current-objfile))
1625 The previous example illustrates a basic pretty-printer.
1626 There are a few things that can be improved on.
1627 The printer only handles one type, whereas a library typically has
1628 several types. One could install a lookup function for each desired type
1629 in the library, but one could also have a single lookup function recognize
1630 several types. The latter is the conventional way this is handled.
1631 If a pretty-printer can handle multiple data types, then its
1632 @dfn{subprinters} are the printers for the individual data types.
1634 The @code{(gdb printing)} module provides a formal way of solving this
1635 problem (@pxref{Guile Printing Module}).
1636 Here is another example that handles multiple types.
1638 These are the types we are going to pretty-print:
1641 struct foo @{ int a, b; @};
1642 struct bar @{ struct foo x, y; @};
1645 Here are the printers:
1648 (define (make-foo-printer value)
1649 "Print a foo object"
1650 (make-pretty-printer-worker
1653 (format #f "a=<~a> b=<~a>"
1654 (value-field value "a") (value-field value "a")))
1657 (define (make-bar-printer value)
1658 "Print a bar object"
1659 (make-pretty-printer-worker
1662 (format #f "x=<~a> y=<~a>"
1663 (value-field value "x") (value-field value "y")))
1667 This example doesn't need a lookup function, that is handled by the
1668 @code{(gdb printing)} module. Instead a function is provided to build up
1669 the object that handles the lookup.
1672 (use-modules (gdb printing))
1674 (define (build-pretty-printer)
1675 (let ((pp (make-pretty-printer-collection "my-library")))
1676 (pp-collection-add-tag-printer "foo" make-foo-printer)
1677 (pp-collection-add-tag-printer "bar" make-bar-printer)
1681 And here is the autoload support:
1684 (use-modules (gdb) (my-library))
1685 (append-objfile-pretty-printer! (current-objfile) (build-pretty-printer))
1688 Finally, when this printer is loaded into @value{GDBN}, here is the
1689 corresponding output of @samp{info pretty-printer}:
1692 (gdb) info pretty-printer
1699 @node Commands In Guile
1700 @subsubsection Commands In Guile
1702 @cindex commands in guile
1703 @cindex guile commands
1704 You can implement new @value{GDBN} CLI commands in Guile. A CLI
1705 command object is created with the @code{make-command} Guile function,
1706 and added to @value{GDBN} with the @code{register-command!} Guile function.
1707 This two-step approach is taken to separate out the side-effect of adding
1708 the command to @value{GDBN} from @code{make-command}.
1710 There is no support for multi-line commands, that is commands that
1711 consist of multiple lines and are terminated with @code{end}.
1713 @c TODO: line length
1714 @deffn {Scheme Procedure} (make-command name @r{[}#:invoke invoke{]} @r{[}#:command-class command-class@r{]} @r{[}#:completer-class completer{]} @r{[}#:prefix? prefix@r{]} @r{[}#:doc doc-string{]})
1716 The argument @var{name} is the name of the command. If @var{name} consists of
1717 multiple words, then the initial words are looked for as prefix
1718 commands. In this case, if one of the prefix commands does not exist,
1719 an exception is raised.
1721 The result is the @code{<gdb:command>} object representing the command.
1722 The command is not usable until it has been registered with @value{GDBN}
1723 with @code{register-command!}.
1725 The rest of the arguments are optional.
1727 The argument @var{invoke} is a procedure of three arguments: @var{self},
1728 @var{args} and @var{from-tty}. The argument @var{self} is the
1729 @code{<gdb:command>} object representing the command.
1730 The argument @var{args} is a string representing the arguments passed to
1731 the command, after leading and trailing whitespace has been stripped.
1732 The argument @var{from-tty} is a boolean flag and specifies whether the
1733 command should consider itself to have been originated from the user
1734 invoking it interactively. If this function throws an exception,
1735 it is turned into a @value{GDBN} @code{error} call.
1736 Otherwise, the return value is ignored.
1738 The argument @var{command-class} is one of the @samp{COMMAND_} constants
1739 defined below. This argument tells @value{GDBN} how to categorize the
1740 new command in the help system. The default is @code{COMMAND_NONE}.
1742 The argument @var{completer} is either @code{#f}, one of the @samp{COMPLETE_}
1743 constants defined below, or a procedure, also defined below.
1744 This argument tells @value{GDBN} how to perform completion
1745 for this command. If not provided or if the value is @code{#f},
1746 then no completion is performed on the command.
1748 The argument @var{prefix} is a boolean flag indicating whether the new
1749 command is a prefix command; sub-commands of this command may be
1752 The argument @var{doc-string} is help text for the new command.
1753 If no documentation string is provided, the default value ``This command is
1754 not documented.'' is used.
1757 @deffn {Scheme Procedure} register-command! command
1758 Add @var{command}, a @code{<gdb:command>} object, to @value{GDBN}'s
1760 It is an error to register a command more than once.
1761 The result is unspecified.
1764 @deffn {Scheme Procedure} command? object
1765 Return @code{#t} if @var{object} is a @code{<gdb:command>} object.
1766 Otherwise return @code{#f}.
1769 @cindex don't repeat Guile command
1770 @deffn {Scheme Procedure} dont-repeat
1771 By default, a @value{GDBN} command is repeated when the user enters a
1772 blank line at the command prompt. A command can suppress this
1773 behavior by invoking the @code{dont-repeat} function. This is similar
1774 to the user command @code{dont-repeat}, see @ref{Define, dont-repeat}.
1777 @deffn {Scheme Procedure} string->argv string
1778 Convert a string to a list of strings split up according to
1779 @value{GDBN}'s argv parsing rules.
1780 It is recommended to use this for consistency.
1781 Arguments are separated by spaces and may be quoted.
1785 scheme@@(guile-user)> (string->argv "1 2\\ \\\"3 '4 \"5' \"6 '7\"")
1786 $1 = ("1" "2 \"3" "4 \"5" "6 '7")
1790 @deffn {Scheme Procedure} throw-user-error message . args
1791 Throw a @code{gdb:user-error} exception.
1792 The argument @var{message} is the error message as a format string, like the
1793 @var{fmt} argument to the @code{format} Scheme function.
1794 @xref{Formatted Output,,, guile, GNU Guile Reference Manual}.
1795 The argument @var{args} is a list of the optional arguments of @var{message}.
1797 This is used when the command detects a user error of some kind,
1798 say a bad command argument.
1801 (gdb) guile (use-modules (gdb))
1803 (register-command! (make-command "test-user-error"
1804 #:command-class COMMAND_OBSCURE
1805 #:invoke (lambda (self arg from-tty)
1806 (throw-user-error "Bad argument ~a" arg))))
1808 (gdb) test-user-error ugh
1809 ERROR: Bad argument ugh
1813 @cindex completion of Guile commands
1814 @deffn completer self text word
1815 If the @var{completer} option to @code{make-command} is a procedure,
1816 it takes three arguments: @var{self} which is the @code{<gdb:command>}
1817 object, and @var{text} and @var{word} which are both strings.
1818 The argument @var{text} holds the complete command line up to the cursor's
1819 location. The argument @var{word} holds the last word of the command line;
1820 this is computed using a word-breaking heuristic.
1822 All forms of completion are handled by this function, that is,
1823 the @key{TAB} and @key{M-?} key bindings (@pxref{Completion}),
1824 and the @code{complete} command (@pxref{Help, complete}).
1826 This procedure can return several kinds of values:
1830 If the return value is a list, the contents of the list are used as the
1831 completions. It is up to @var{completer} to ensure that the
1832 contents actually do complete the word. An empty list is
1833 allowed, it means that there were no completions available. Only
1834 string elements of the list are used; other elements in the
1838 If the return value is a @code{<gdb:iterator>} object, it is iterated over to
1839 obtain the completions. It is up to @code{completer-procedure} to ensure
1840 that the results actually do complete the word. Only
1841 string elements of the result are used; other elements in the
1842 sequence are ignored.
1845 All other results are treated as though there were no available
1850 When a new command is registered, it will have been declared as a member of
1851 some general class of commands. This is used to classify top-level
1852 commands in the on-line help system; note that prefix commands are not
1853 listed under their own category but rather that of their top-level
1854 command. The available classifications are represented by constants
1855 defined in the @code{gdb} module:
1859 The command does not belong to any particular class. A command in
1860 this category will not be displayed in any of the help categories.
1861 This is the default.
1863 @item COMMAND_RUNNING
1864 The command is related to running the inferior. For example,
1865 @code{start}, @code{step}, and @code{continue} are in this category.
1866 Type @kbd{help running} at the @value{GDBN} prompt to see a list of
1867 commands in this category.
1870 The command is related to data or variables. For example,
1871 @code{call}, @code{find}, and @code{print} are in this category. Type
1872 @kbd{help data} at the @value{GDBN} prompt to see a list of commands
1876 The command has to do with manipulation of the stack. For example,
1877 @code{backtrace}, @code{frame}, and @code{return} are in this
1878 category. Type @kbd{help stack} at the @value{GDBN} prompt to see a
1879 list of commands in this category.
1882 This class is used for file-related commands. For example,
1883 @code{file}, @code{list} and @code{section} are in this category.
1884 Type @kbd{help files} at the @value{GDBN} prompt to see a list of
1885 commands in this category.
1887 @item COMMAND_SUPPORT
1888 This should be used for ``support facilities'', generally meaning
1889 things that are useful to the user when interacting with @value{GDBN},
1890 but not related to the state of the inferior. For example,
1891 @code{help}, @code{make}, and @code{shell} are in this category. Type
1892 @kbd{help support} at the @value{GDBN} prompt to see a list of
1893 commands in this category.
1895 @item COMMAND_STATUS
1896 The command is an @samp{info}-related command, that is, related to the
1897 state of @value{GDBN} itself. For example, @code{info}, @code{macro},
1898 and @code{show} are in this category. Type @kbd{help status} at the
1899 @value{GDBN} prompt to see a list of commands in this category.
1901 @item COMMAND_BREAKPOINTS
1902 The command has to do with breakpoints. For example, @code{break},
1903 @code{clear}, and @code{delete} are in this category. Type @kbd{help
1904 breakpoints} at the @value{GDBN} prompt to see a list of commands in
1907 @item COMMAND_TRACEPOINTS
1908 The command has to do with tracepoints. For example, @code{trace},
1909 @code{actions}, and @code{tfind} are in this category. Type
1910 @kbd{help tracepoints} at the @value{GDBN} prompt to see a list of
1911 commands in this category.
1914 The command is a general purpose command for the user, and typically
1915 does not fit in one of the other categories.
1916 Type @kbd{help user-defined} at the @value{GDBN} prompt to see
1917 a list of commands in this category, as well as the list of gdb macros
1918 (@pxref{Sequences}).
1920 @item COMMAND_OBSCURE
1921 The command is only used in unusual circumstances, or is not of
1922 general interest to users. For example, @code{checkpoint},
1923 @code{fork}, and @code{stop} are in this category. Type @kbd{help
1924 obscure} at the @value{GDBN} prompt to see a list of commands in this
1927 @item COMMAND_MAINTENANCE
1928 The command is only useful to @value{GDBN} maintainers. The
1929 @code{maintenance} and @code{flushregs} commands are in this category.
1930 Type @kbd{help internals} at the @value{GDBN} prompt to see a list of
1931 commands in this category.
1934 A new command can use a predefined completion function, either by
1935 specifying it via an argument at initialization, or by returning it
1936 from the @code{completer} procedure. These predefined completion
1937 constants are all defined in the @code{gdb} module:
1941 This constant means that no completion should be done.
1943 @item COMPLETE_FILENAME
1944 This constant means that filename completion should be performed.
1946 @item COMPLETE_LOCATION
1947 This constant means that location completion should be done.
1948 @xref{Specify Location}.
1950 @item COMPLETE_COMMAND
1951 This constant means that completion should examine @value{GDBN}
1954 @item COMPLETE_SYMBOL
1955 This constant means that completion should be done using symbol names
1958 @item COMPLETE_EXPRESSION
1959 This constant means that completion should be done on expressions.
1960 Often this means completing on symbol names, but some language
1961 parsers also have support for completing on field names.
1964 The following code snippet shows how a trivial CLI command can be
1965 implemented in Guile:
1969 (register-command! (make-command "hello-world"
1970 #:command-class COMMAND_USER
1971 #:doc "Greet the whole world."
1972 #:invoke (lambda (self args from-tty) (display "Hello, World!\n"))))
1978 @node Parameters In Guile
1979 @subsubsection Parameters In Guile
1981 @cindex parameters in guile
1982 @cindex guile parameters
1984 You can implement new @value{GDBN} @dfn{parameters} using Guile
1985 @footnote{Note that @value{GDBN} parameters must not be confused with
1986 Guile’s parameter objects (@pxref{Parameters,,, guile, GNU Guile
1987 Reference Manual}).}.
1989 There are many parameters that already exist and can be set in
1990 @value{GDBN}. Two examples are: @code{set follow-fork} and
1991 @code{set charset}. Setting these parameters influences certain
1992 behavior in @value{GDBN}. Similarly, you can define parameters that
1993 can be used to influence behavior in custom Guile scripts and commands.
1995 A new parameter is defined with the @code{make-parameter} Guile function,
1996 and added to @value{GDBN} with the @code{register-parameter!} Guile function.
1997 This two-step approach is taken to separate out the side-effect of adding
1998 the parameter to @value{GDBN} from @code{make-parameter}.
2000 Parameters are exposed to the user via the @code{set} and
2001 @code{show} commands. @xref{Help}.
2004 @deffn {Scheme Procedure} (make-parameter name @r{[}#:command-class command-class@r{]} @r{[}#:parameter-type parameter-type{]} @r{[}#:enum-list enum-list@r{]} @r{[}#:set-func set-func{]} @r{[}#:show-func show-func{]} @r{[}#:doc doc{]} @r{[}#:set-doc set-doc{]} @r{[}#:show-doc show-doc{]} @r{[}#:initial-value initial-value{]})
2006 The argument @var{name} is the name of the new parameter. If @var{name}
2007 consists of multiple words, then the initial words are looked for as prefix
2008 parameters. An example of this can be illustrated with the
2009 @code{set print} set of parameters. If @var{name} is
2010 @code{print foo}, then @code{print} will be searched as the prefix
2011 parameter. In this case the parameter can subsequently be accessed in
2012 @value{GDBN} as @code{set print foo}.
2013 If @var{name} consists of multiple words, and no prefix parameter group
2014 can be found, an exception is raised.
2016 The result is the @code{<gdb:parameter>} object representing the parameter.
2017 The parameter is not usable until it has been registered with @value{GDBN}
2018 with @code{register-parameter!}.
2020 The rest of the arguments are optional.
2022 The argument @var{command-class} should be one of the @samp{COMMAND_} constants
2023 (@pxref{Commands In Guile}). This argument tells @value{GDBN} how to
2024 categorize the new parameter in the help system.
2025 The default is @code{COMMAND_NONE}.
2027 The argument @var{parameter-type} should be one of the @samp{PARAM_} constants
2028 defined below. This argument tells @value{GDBN} the type of the new
2029 parameter; this information is used for input validation and
2030 completion. The default is @code{PARAM_BOOLEAN}.
2032 If @var{parameter-type} is @code{PARAM_ENUM}, then
2033 @var{enum-list} must be a list of strings. These strings
2034 represent the possible values for the parameter.
2036 If @var{parameter-type} is not @code{PARAM_ENUM}, then the presence
2037 of @var{enum-list} will cause an exception to be thrown.
2039 The argument @var{set-func} is a function of one argument: @var{self} which
2040 is the @code{<gdb:parameter>} object representing the parameter.
2041 @value{GDBN} will call this function when a @var{parameter}'s value has
2042 been changed via the @code{set} API (for example, @kbd{set foo off}).
2043 The value of the parameter has already been set to the new value.
2044 This function must return a string to be displayed to the user.
2045 @value{GDBN} will add a trailing newline if the string is non-empty.
2046 @value{GDBN} generally doesn't print anything when a parameter is set,
2047 thus typically this function should return @samp{""}.
2048 A non-empty string result should typically be used for displaying warnings
2051 The argument @var{show-func} is a function of two arguments: @var{self} which
2052 is the @code{<gdb:parameter>} object representing the parameter, and
2053 @var{svalue} which is the string representation of the current value.
2054 @value{GDBN} will call this function when a @var{parameter}'s
2055 @code{show} API has been invoked (for example, @kbd{show foo}).
2056 This function must return a string, and will be displayed to the user.
2057 @value{GDBN} will add a trailing newline.
2059 The argument @var{doc} is the help text for the new parameter.
2060 If there is no documentation string, a default value is used.
2062 The argument @var{set-doc} is the help text for this parameter's
2065 The argument @var{show-doc} is the help text for this parameter's
2066 @code{show} command.
2068 The argument @var{initial-value} specifies the initial value of the parameter.
2069 If it is a function, it takes one parameter, the @code{<gdb:parameter>}
2070 object and its result is used as the initial value of the parameter.
2071 The initial value must be valid for the parameter type,
2072 otherwise an exception is thrown.
2075 @deffn {Scheme Procedure} register-parameter! parameter
2076 Add @var{parameter}, a @code{<gdb:parameter>} object, to @value{GDBN}'s
2078 It is an error to register a parameter more than once.
2079 The result is unspecified.
2082 @deffn {Scheme Procedure} parameter? object
2083 Return @code{#t} if @var{object} is a @code{<gdb:parameter>} object.
2084 Otherwise return @code{#f}.
2087 @deffn {Scheme Procedure} parameter-value parameter
2088 Return the value of @var{parameter} which may either be
2089 a @code{<gdb:parameter>} object or a string naming the parameter.
2092 @deffn {Scheme Procedure} set-parameter-value! parameter new-value
2093 Assign @var{parameter} the value of @var{new-value}.
2094 The argument @var{parameter} must be an object of type @code{<gdb:parameter>}.
2095 @value{GDBN} does validation when assignments are made.
2098 When a new parameter is defined, its type must be specified. The
2099 available types are represented by constants defined in the @code{gdb}
2104 The value is a plain boolean. The Guile boolean values, @code{#t}
2105 and @code{#f} are the only valid values.
2107 @item PARAM_AUTO_BOOLEAN
2108 The value has three possible states: true, false, and @samp{auto}. In
2109 Guile, true and false are represented using boolean constants, and
2110 @samp{auto} is represented using @code{#:auto}.
2112 @item PARAM_UINTEGER
2113 The value is an unsigned integer. The value of 0 should be
2114 interpreted to mean ``unlimited''.
2116 @item PARAM_ZINTEGER
2117 The value is an integer.
2119 @item PARAM_ZUINTEGER
2120 The value is an unsigned integer.
2122 @item PARAM_ZUINTEGER_UNLIMITED
2123 The value is an integer in the range @samp{[0, INT_MAX]}.
2124 A value of @samp{-1} means ``unlimited'', and other negative
2125 numbers are not allowed.
2128 The value is a string. When the user modifies the string, any escape
2129 sequences, such as @samp{\t}, @samp{\f}, and octal escapes, are
2130 translated into corresponding characters and encoded into the current
2133 @item PARAM_STRING_NOESCAPE
2134 The value is a string. When the user modifies the string, escapes are
2135 passed through untranslated.
2137 @item PARAM_OPTIONAL_FILENAME
2138 The value is a either a filename (a string), or @code{#f}.
2140 @item PARAM_FILENAME
2141 The value is a filename. This is just like
2142 @code{PARAM_STRING_NOESCAPE}, but uses file names for completion.
2145 The value is a string, which must be one of a collection of string
2146 constants provided when the parameter is created.
2149 @node Progspaces In Guile
2150 @subsubsection Program Spaces In Guile
2152 @cindex progspaces in guile
2153 @tindex <gdb:progspace>
2154 A program space, or @dfn{progspace}, represents a symbolic view
2155 of an address space.
2156 It consists of all of the objfiles of the program.
2157 @xref{Objfiles In Guile}.
2158 @xref{Inferiors and Programs, program spaces}, for more details
2159 about program spaces.
2161 Each progspace is represented by an instance of the @code{<gdb:progspace>}
2162 smob. @xref{GDB Scheme Data Types}.
2164 The following progspace-related functions are available in the
2165 @code{(gdb)} module:
2167 @deffn {Scheme Procedure} progspace? object
2168 Return @code{#t} if @var{object} is a @code{<gdb:progspace>} object.
2169 Otherwise return @code{#f}.
2172 @deffn {Scheme Procedure} progspace-valid? progspace
2173 Return @code{#t} if @var{progspace} is valid, @code{#f} if not.
2174 A @code{<gdb:progspace>} object can become invalid
2175 if the program it refers to is not loaded in @value{GDBN} any longer.
2178 @deffn {Scheme Procedure} current-progspace
2179 This function returns the program space of the currently selected inferior.
2180 There is always a current progspace, this never returns @code{#f}.
2181 @xref{Inferiors and Programs}.
2184 @deffn {Scheme Procedure} progspaces
2185 Return a list of all the progspaces currently known to @value{GDBN}.
2188 @deffn {Scheme Procedure} progspace-filename progspace
2189 Return the absolute file name of @var{progspace} as a string.
2190 This is the name of the file passed as the argument to the @code{file}
2191 or @code{symbol-file} commands.
2192 If the program space does not have an associated file name,
2193 then @code{#f} is returned. This occurs, for example, when @value{GDBN}
2194 is started without a program to debug.
2196 A @code{gdb:invalid-object-error} exception is thrown if @var{progspace}
2200 @deffn {Scheme Procedure} progspace-objfiles progspace
2201 Return the list of objfiles of @var{progspace}.
2202 The order of objfiles in the result is arbitrary.
2203 Each element is an object of type @code{<gdb:objfile>}.
2204 @xref{Objfiles In Guile}.
2206 A @code{gdb:invalid-object-error} exception is thrown if @var{progspace}
2210 @deffn {Scheme Procedure} progspace-pretty-printers progspace
2211 Return the list of pretty-printers of @var{progspace}.
2212 Each element is an object of type @code{<gdb:pretty-printer>}.
2213 @xref{Guile Pretty Printing API}, for more information.
2216 @deffn {Scheme Procedure} set-progspace-pretty-printers! progspace printer-list
2217 Set the list of registered @code{<gdb:pretty-printer>} objects for
2218 @var{progspace} to @var{printer-list}.
2219 @xref{Guile Pretty Printing API}, for more information.
2222 @node Objfiles In Guile
2223 @subsubsection Objfiles In Guile
2225 @cindex objfiles in guile
2226 @tindex <gdb:objfile>
2227 @value{GDBN} loads symbols for an inferior from various
2228 symbol-containing files (@pxref{Files}). These include the primary
2229 executable file, any shared libraries used by the inferior, and any
2230 separate debug info files (@pxref{Separate Debug Files}).
2231 @value{GDBN} calls these symbol-containing files @dfn{objfiles}.
2233 Each objfile is represented as an object of type @code{<gdb:objfile>}.
2235 The following objfile-related procedures are provided by the
2236 @code{(gdb)} module:
2238 @deffn {Scheme Procedure} objfile? object
2239 Return @code{#t} if @var{object} is a @code{<gdb:objfile>} object.
2240 Otherwise return @code{#f}.
2243 @deffn {Scheme Procedure} objfile-valid? objfile
2244 Return @code{#t} if @var{objfile} is valid, @code{#f} if not.
2245 A @code{<gdb:objfile>} object can become invalid
2246 if the object file it refers to is not loaded in @value{GDBN} any
2247 longer. All other @code{<gdb:objfile>} procedures will throw an exception
2248 if it is invalid at the time the procedure is called.
2251 @deffn {Scheme Procedure} objfile-filename objfile
2252 Return the file name of @var{objfile} as a string,
2253 with symbolic links resolved.
2256 @deffn {Scheme Procedure} objfile-progspace objfile
2257 Return the @code{<gdb:progspace>} that this object file lives in.
2258 @xref{Progspaces In Guile}, for more on progspaces.
2261 @deffn {Scheme Procedure} objfile-pretty-printers objfile
2262 Return the list of registered @code{<gdb:pretty-printer>} objects for
2263 @var{objfile}. @xref{Guile Pretty Printing API}, for more information.
2266 @deffn {Scheme Procedure} set-objfile-pretty-printers! objfile printer-list
2267 Set the list of registered @code{<gdb:pretty-printer>} objects for
2268 @var{objfile} to @var{printer-list}. The
2269 @var{printer-list} must be a list of @code{<gdb:pretty-printer>} objects.
2270 @xref{Guile Pretty Printing API}, for more information.
2273 @deffn {Scheme Procedure} current-objfile
2274 When auto-loading a Guile script (@pxref{Guile Auto-loading}), @value{GDBN}
2275 sets the ``current objfile'' to the corresponding objfile. This
2276 function returns the current objfile. If there is no current objfile,
2277 this function returns @code{#f}.
2280 @deffn {Scheme Procedure} objfiles
2281 Return a list of all the objfiles in the current program space.
2284 @node Frames In Guile
2285 @subsubsection Accessing inferior stack frames from Guile.
2287 @cindex frames in guile
2288 When the debugged program stops, @value{GDBN} is able to analyze its call
2289 stack (@pxref{Frames,,Stack frames}). The @code{<gdb:frame>} class
2290 represents a frame in the stack. A @code{<gdb:frame>} object is only valid
2291 while its corresponding frame exists in the inferior's stack. If you try
2292 to use an invalid frame object, @value{GDBN} will throw a
2293 @code{gdb:invalid-object} exception (@pxref{Guile Exception Handling}).
2295 Two @code{<gdb:frame>} objects can be compared for equality with the
2296 @code{equal?} function, like:
2299 (@value{GDBP}) guile (equal? (newest-frame) (selected-frame))
2303 The following frame-related procedures are provided by the
2304 @code{(gdb)} module:
2306 @deffn {Scheme Procedure} frame? object
2307 Return @code{#t} if @var{object} is a @code{<gdb:frame>} object.
2308 Otherwise return @code{#f}.
2311 @deffn {Scheme Procedure} frame-valid? frame
2312 Returns @code{#t} if @var{frame} is valid, @code{#f} if not.
2313 A frame object can become invalid if the frame it refers to doesn't
2314 exist anymore in the inferior. All @code{<gdb:frame>} procedures will throw
2315 an exception if the frame is invalid at the time the procedure is called.
2318 @deffn {Scheme Procedure} frame-name frame
2319 Return the function name of @var{frame}, or @code{#f} if it can't be
2323 @deffn {Scheme Procedure} frame-arch frame
2324 Return the @code{<gdb:architecture>} object corresponding to @var{frame}'s
2325 architecture. @xref{Architectures In Guile}.
2328 @deffn {Scheme Procedure} frame-type frame
2329 Return the type of @var{frame}. The value can be one of:
2333 An ordinary stack frame.
2336 A fake stack frame that was created by @value{GDBN} when performing an
2337 inferior function call.
2340 A frame representing an inlined function. The function was inlined
2341 into a @code{NORMAL_FRAME} that is older than this one.
2343 @item TAILCALL_FRAME
2344 A frame representing a tail call. @xref{Tail Call Frames}.
2346 @item SIGTRAMP_FRAME
2347 A signal trampoline frame. This is the frame created by the OS when
2348 it calls into a signal handler.
2351 A fake stack frame representing a cross-architecture call.
2353 @item SENTINEL_FRAME
2354 This is like @code{NORMAL_FRAME}, but it is only used for the
2359 @deffn {Scheme Procedure} frame-unwind-stop-reason frame
2360 Return an integer representing the reason why it's not possible to find
2361 more frames toward the outermost frame. Use
2362 @code{unwind-stop-reason-string} to convert the value returned by this
2363 function to a string. The value can be one of:
2366 @item FRAME_UNWIND_NO_REASON
2367 No particular reason (older frames should be available).
2369 @item FRAME_UNWIND_NULL_ID
2370 The previous frame's analyzer returns an invalid result.
2372 @item FRAME_UNWIND_OUTERMOST
2373 This frame is the outermost.
2375 @item FRAME_UNWIND_UNAVAILABLE
2376 Cannot unwind further, because that would require knowing the
2377 values of registers or memory that have not been collected.
2379 @item FRAME_UNWIND_INNER_ID
2380 This frame ID looks like it ought to belong to a NEXT frame,
2381 but we got it for a PREV frame. Normally, this is a sign of
2382 unwinder failure. It could also indicate stack corruption.
2384 @item FRAME_UNWIND_SAME_ID
2385 This frame has the same ID as the previous one. That means
2386 that unwinding further would almost certainly give us another
2387 frame with exactly the same ID, so break the chain. Normally,
2388 this is a sign of unwinder failure. It could also indicate
2391 @item FRAME_UNWIND_NO_SAVED_PC
2392 The frame unwinder did not find any saved PC, but we needed
2393 one to unwind further.
2395 @item FRAME_UNWIND_MEMORY_ERROR
2396 The frame unwinder caused an error while trying to access memory.
2398 @item FRAME_UNWIND_FIRST_ERROR
2399 Any stop reason greater or equal to this value indicates some kind
2400 of error. This special value facilitates writing code that tests
2401 for errors in unwinding in a way that will work correctly even if
2402 the list of the other values is modified in future @value{GDBN}
2403 versions. Using it, you could write:
2406 (define reason (frame-unwind-stop-readon (selected-frame)))
2407 (define reason-str (unwind-stop-reason-string reason))
2408 (if (>= reason FRAME_UNWIND_FIRST_ERROR)
2409 (format #t "An error occured: ~s\n" reason-str))
2414 @deffn {Scheme Procedure} frame-pc frame
2415 Return the frame's resume address.
2418 @deffn {Scheme Procedure} frame-block frame
2419 Return the frame's code block as a @code{<gdb:block>} object.
2420 @xref{Blocks In Guile}.
2423 @deffn {Scheme Procedure} frame-function frame
2424 Return the symbol for the function corresponding to this frame
2425 as a @code{<gdb:symbol>} object, or @code{#f} if there isn't one.
2426 @xref{Symbols In Guile}.
2429 @deffn {Scheme Procedure} frame-older frame
2430 Return the frame that called @var{frame}.
2433 @deffn {Scheme Procedure} frame-newer frame
2434 Return the frame called by @var{frame}.
2437 @deffn {Scheme Procedure} frame-sal frame
2438 Return the frame's @code{<gdb:sal>} (symtab and line) object.
2439 @xref{Symbol Tables In Guile}.
2442 @deffn {Scheme Procedure} frame-read-register frame register
2443 Return the value of @var{register} in @var{frame}. @var{register}
2444 should be a string, like @samp{pc}.
2447 @deffn {Scheme Procedure} frame-read-var frame variable @r{[}#:block block@r{]}
2448 Return the value of @var{variable} in @var{frame}. If the optional
2449 argument @var{block} is provided, search for the variable from that
2450 block; otherwise start at the frame's current block (which is
2451 determined by the frame's current program counter). The
2452 @var{variable} must be given as a string or a @code{<gdb:symbol>}
2453 object, and @var{block} must be a @code{<gdb:block>} object.
2456 @deffn {Scheme Procedure} frame-select frame
2457 Set @var{frame} to be the selected frame. @xref{Stack, ,Examining the
2461 @deffn {Scheme Procedure} selected-frame
2462 Return the selected frame object. @xref{Selection,,Selecting a Frame}.
2465 @deffn {Scheme Procedure} newest-frame
2466 Return the newest frame object for the selected thread.
2469 @deffn {Scheme Procedure} unwind-stop-reason-string reason
2470 Return a string explaining the reason why @value{GDBN} stopped unwinding
2471 frames, as expressed by the given @var{reason} code (an integer, see the
2472 @code{frame-unwind-stop-reason} procedure above in this section).
2475 @node Blocks In Guile
2476 @subsubsection Accessing blocks from Guile.
2478 @cindex blocks in guile
2481 In @value{GDBN}, symbols are stored in blocks. A block corresponds
2482 roughly to a scope in the source code. Blocks are organized
2483 hierarchically, and are represented individually in Guile as an object
2484 of type @code{<gdb:block>}. Blocks rely on debugging information being
2487 A frame has a block. Please see @ref{Frames In Guile}, for a more
2488 in-depth discussion of frames.
2490 The outermost block is known as the @dfn{global block}. The global
2491 block typically holds public global variables and functions.
2493 The block nested just inside the global block is the @dfn{static
2494 block}. The static block typically holds file-scoped variables and
2497 @value{GDBN} provides a method to get a block's superblock, but there
2498 is currently no way to examine the sub-blocks of a block, or to
2499 iterate over all the blocks in a symbol table (@pxref{Symbol Tables In
2502 Here is a short example that should help explain blocks:
2505 /* This is in the global block. */
2508 /* This is in the static block. */
2509 static int file_scope;
2511 /* 'function' is in the global block, and 'argument' is
2512 in a block nested inside of 'function'. */
2513 int function (int argument)
2515 /* 'local' is in a block inside 'function'. It may or may
2516 not be in the same block as 'argument'. */
2520 /* 'inner' is in a block whose superblock is the one holding
2524 /* If this call is expanded by the compiler, you may see
2525 a nested block here whose function is 'inline_function'
2526 and whose superblock is the one holding 'inner'. */
2532 The following block-related procedures are provided by the
2533 @code{(gdb)} module:
2535 @deffn {Scheme Procedure} block? object
2536 Return @code{#t} if @var{object} is a @code{<gdb:block>} object.
2537 Otherwise return @code{#f}.
2540 @deffn {Scheme Procedure} block-valid? block
2541 Returns @code{#t} if @code{<gdb:block>} @var{block} is valid,
2542 @code{#f} if not. A block object can become invalid if the block it
2543 refers to doesn't exist anymore in the inferior. All other
2544 @code{<gdb:block>} methods will throw an exception if it is invalid at
2545 the time the procedure is called. The block's validity is also checked
2546 during iteration over symbols of the block.
2549 @deffn {Scheme Procedure} block-start block
2550 Return the start address of @code{<gdb:block>} @var{block}.
2553 @deffn {Scheme Procedure} block-end block
2554 Return the end address of @code{<gdb:block>} @var{block}.
2557 @deffn {Scheme Procedure} block-function block
2558 Return the name of @code{<gdb:block>} @var{block} represented as a
2559 @code{<gdb:symbol>} object.
2560 If the block is not named, then @code{#f} is returned.
2562 For ordinary function blocks, the superblock is the static block.
2563 However, you should note that it is possible for a function block to
2564 have a superblock that is not the static block -- for instance this
2565 happens for an inlined function.
2568 @deffn {Scheme Procedure} block-superblock block
2569 Return the block containing @code{<gdb:block>} @var{block}.
2570 If the parent block does not exist, then @code{#f} is returned.
2573 @deffn {Scheme Procedure} block-global-block block
2574 Return the global block associated with @code{<gdb:block>} @var{block}.
2577 @deffn {Scheme Procedure} block-static-block block
2578 Return the static block associated with @code{<gdb:block>} @var{block}.
2581 @deffn {Scheme Procedure} block-global? block
2582 Return @code{#t} if @code{<gdb:block>} @var{block} is a global block.
2583 Otherwise return @code{#f}.
2586 @deffn {Scheme Procedure} block-static? block
2587 Return @code{#t} if @code{<gdb:block>} @var{block} is a static block.
2588 Otherwise return @code{#f}.
2591 @deffn {Scheme Procedure} block-symbols
2592 Return a list of all symbols (as <gdb:symbol> objects) in
2593 @code{<gdb:block>} @var{block}.
2596 @deffn {Scheme Procedure} make-block-symbols-iterator block
2597 Return an object of type @code{<gdb:iterator>} that will iterate
2598 over all symbols of the block.
2599 Guile programs should not assume that a specific block object will
2600 always contain a given symbol, since changes in @value{GDBN} features and
2601 infrastructure may cause symbols move across blocks in a symbol table.
2602 @xref{Iterators In Guile}.
2605 @deffn {Scheme Procedure} block-symbols-progress?
2606 Return #t if the object is a <gdb:block-symbols-progress> object.
2607 This object would be obtained from the @code{progress} element of the
2608 @code{<gdb:iterator>} object returned by @code{make-block-symbols-iterator}.
2611 @deffn {Scheme Procedure} lookup-block pc
2612 Return the innermost @code{<gdb:block>} containing the given @var{pc}
2613 value. If the block cannot be found for the @var{pc} value specified,
2614 the function will return @code{#f}.
2617 @node Symbols In Guile
2618 @subsubsection Guile representation of Symbols.
2620 @cindex symbols in guile
2621 @tindex <gdb:symbol>
2623 @value{GDBN} represents every variable, function and type as an
2624 entry in a symbol table. @xref{Symbols, ,Examining the Symbol Table}.
2625 Guile represents these symbols in @value{GDBN} with the
2626 @code{<gdb:symbol>} object.
2628 The following symbol-related procedures are provided by the
2629 @code{(gdb)} module:
2631 @deffn {Scheme Procedure} symbol? object
2632 Return @code{#t} if @var{object} is an object of type @code{<gdb:symbol>}.
2633 Otherwise return @code{#f}.
2636 @deffn {Scheme Procedure} symbol-valid? symbol
2637 Return @code{#t} if the @code{<gdb:symbol>} object is valid,
2638 @code{#f} if not. A @code{<gdb:symbol>} object can become invalid if
2639 the symbol it refers to does not exist in @value{GDBN} any longer.
2640 All other @code{<gdb:symbol>} procedures will throw an exception if it is
2641 invalid at the time the procedure is called.
2644 @deffn {Scheme Procedure} symbol-type symbol
2645 Return the type of @var{symbol} or @code{#f} if no type is recorded.
2646 The result is an object of type @code{<gdb:type>}.
2647 @xref{Types In Guile}.
2650 @deffn {Scheme Procedure} symbol-symtab symbol
2651 Return the symbol table in which @var{symbol} appears.
2652 The result is an object of type @code{<gdb:symtab>}.
2653 @xref{Symbol Tables In Guile}.
2656 @deffn {Scheme Procedure} symbol-line symbol
2657 Return the line number in the source code at which @var{symbol} was defined.
2661 @deffn {Scheme Procedure} symbol-name symbol
2662 Return the name of @var{symbol} as a string.
2665 @deffn {Scheme Procedure} symbol-linkage-name symbol
2666 Return the name of @var{symbol}, as used by the linker (i.e., may be mangled).
2669 @deffn {Scheme Procedure} symbol-print-name symbol
2670 Return the name of @var{symbol} in a form suitable for output. This is either
2671 @code{name} or @code{linkage_name}, depending on whether the user
2672 asked @value{GDBN} to display demangled or mangled names.
2675 @deffn {Scheme Procedure} symbol-addr-class symbol
2676 Return the address class of the symbol. This classifies how to find the value
2677 of a symbol. Each address class is a constant defined in the
2678 @code{(gdb)} module and described later in this chapter.
2681 @deffn {Scheme Procedure} symbol-needs-frame? symbol
2682 Return @code{#t} if evaluating @var{symbol}'s value requires a frame
2683 (@pxref{Frames In Guile}) and @code{#f} otherwise. Typically,
2684 local variables will require a frame, but other symbols will not.
2687 @deffn {Scheme Procedure} symbol-argument? symbol
2688 Return @code{#t} if @var{symbol} is an argument of a function.
2689 Otherwise return @code{#f}.
2692 @deffn {Scheme Procedure} symbol-constant? symbol
2693 Return @code{#t} if @var{symbol} is a constant.
2694 Otherwise return @code{#f}.
2697 @deffn {Scheme Procedure} symbol-function? symbol
2698 Return @code{#t} if @var{symbol} is a function or a method.
2699 Otherwise return @code{#f}.
2702 @deffn {Scheme Procedure} symbol-variable? symbol
2703 Return @code{#t} if @var{symbol} is a variable.
2704 Otherwise return @code{#f}.
2707 @deffn {Scheme Procedure} symbol-value symbol @r{[}#:frame frame@r{]}
2708 Compute the value of @var{symbol}, as a @code{<gdb:value>}. For
2709 functions, this computes the address of the function, cast to the
2710 appropriate type. If the symbol requires a frame in order to compute
2711 its value, then @var{frame} must be given. If @var{frame} is not
2712 given, or if @var{frame} is invalid, then an exception is thrown.
2715 @c TODO: line length
2716 @deffn {Scheme Procedure} lookup-symbol name @r{[}#:block block@r{]} @r{[}#:domain domain@r{]}
2717 This function searches for a symbol by name. The search scope can be
2718 restricted to the parameters defined in the optional domain and block
2721 @var{name} is the name of the symbol. It must be a string. The
2722 optional @var{block} argument restricts the search to symbols visible
2723 in that @var{block}. The @var{block} argument must be a
2724 @code{<gdb:block>} object. If omitted, the block for the current frame
2725 is used. The optional @var{domain} argument restricts
2726 the search to the domain type. The @var{domain} argument must be a
2727 domain constant defined in the @code{(gdb)} module and described later
2730 The result is a list of two elements.
2731 The first element is a @code{<gdb:symbol>} object or @code{#f} if the symbol
2733 If the symbol is found, the second element is @code{#t} if the symbol
2734 is a field of a method's object (e.g., @code{this} in C@t{++}),
2735 otherwise it is @code{#f}.
2736 If the symbol is not found, the second element is @code{#f}.
2739 @deffn {Scheme Procedure} lookup-global-symbol name @r{[}#:domain domain@r{]}
2740 This function searches for a global symbol by name.
2741 The search scope can be restricted by the domain argument.
2743 @var{name} is the name of the symbol. It must be a string.
2744 The optional @var{domain} argument restricts the search to the domain type.
2745 The @var{domain} argument must be a domain constant defined in the @code{(gdb)}
2746 module and described later in this chapter.
2748 The result is a @code{<gdb:symbol>} object or @code{#f} if the symbol
2752 The available domain categories in @code{<gdb:symbol>} are represented
2753 as constants in the @code{(gdb)} module:
2756 @item SYMBOL_UNDEF_DOMAIN
2757 This is used when a domain has not been discovered or none of the
2758 following domains apply. This usually indicates an error either
2759 in the symbol information or in @value{GDBN}'s handling of symbols.
2761 @item SYMBOL_VAR_DOMAIN
2762 This domain contains variables, function names, typedef names and enum
2765 @item SYMBOL_STRUCT_DOMAIN
2766 This domain holds struct, union and enum type names.
2768 @item SYMBOL_LABEL_DOMAIN
2769 This domain contains names of labels (for gotos).
2771 @item SYMBOL_VARIABLES_DOMAIN
2772 This domain holds a subset of the @code{SYMBOLS_VAR_DOMAIN}; it
2773 contains everything minus functions and types.
2775 @item SYMBOL_FUNCTIONS_DOMAIN
2776 This domain contains all functions.
2778 @item SYMBOL_TYPES_DOMAIN
2779 This domain contains all types.
2782 The available address class categories in @code{<gdb:symbol>} are represented
2783 as constants in the @code{gdb} module:
2786 @item SYMBOL_LOC_UNDEF
2787 If this is returned by address class, it indicates an error either in
2788 the symbol information or in @value{GDBN}'s handling of symbols.
2790 @item SYMBOL_LOC_CONST
2791 Value is constant int.
2793 @item SYMBOL_LOC_STATIC
2794 Value is at a fixed address.
2796 @item SYMBOL_LOC_REGISTER
2797 Value is in a register.
2799 @item SYMBOL_LOC_ARG
2800 Value is an argument. This value is at the offset stored within the
2801 symbol inside the frame's argument list.
2803 @item SYMBOL_LOC_REF_ARG
2804 Value address is stored in the frame's argument list. Just like
2805 @code{LOC_ARG} except that the value's address is stored at the
2806 offset, not the value itself.
2808 @item SYMBOL_LOC_REGPARM_ADDR
2809 Value is a specified register. Just like @code{LOC_REGISTER} except
2810 the register holds the address of the argument instead of the argument
2813 @item SYMBOL_LOC_LOCAL
2814 Value is a local variable.
2816 @item SYMBOL_LOC_TYPEDEF
2817 Value not used. Symbols in the domain @code{SYMBOL_STRUCT_DOMAIN} all
2820 @item SYMBOL_LOC_BLOCK
2823 @item SYMBOL_LOC_CONST_BYTES
2824 Value is a byte-sequence.
2826 @item SYMBOL_LOC_UNRESOLVED
2827 Value is at a fixed address, but the address of the variable has to be
2828 determined from the minimal symbol table whenever the variable is
2831 @item SYMBOL_LOC_OPTIMIZED_OUT
2832 The value does not actually exist in the program.
2834 @item SYMBOL_LOC_COMPUTED
2835 The value's address is a computed location.
2838 @node Symbol Tables In Guile
2839 @subsubsection Symbol table representation in Guile.
2841 @cindex symbol tables in guile
2842 @tindex <gdb:symtab>
2845 Access to symbol table data maintained by @value{GDBN} on the inferior
2846 is exposed to Guile via two objects: @code{<gdb:sal>} (symtab-and-line) and
2847 @code{<gdb:symtab>}. Symbol table and line data for a frame is returned
2848 from the @code{frame-find-sal} @code{<gdb:frame>} procedure.
2849 @xref{Frames In Guile}.
2851 For more information on @value{GDBN}'s symbol table management, see
2852 @ref{Symbols, ,Examining the Symbol Table}.
2854 The following symtab-related procedures are provided by the
2855 @code{(gdb)} module:
2857 @deffn {Scheme Procedure} symtab? object
2858 Return @code{#t} if @var{object} is an object of type @code{<gdb:symtab>}.
2859 Otherwise return @code{#f}.
2862 @deffn {Scheme Procedure} symtab-valid? symtab
2863 Return @code{#t} if the @code{<gdb:symtab>} object is valid,
2864 @code{#f} if not. A @code{<gdb:symtab>} object becomes invalid when
2865 the symbol table it refers to no longer exists in @value{GDBN}.
2866 All other @code{<gdb:symtab>} procedures will throw an exception
2867 if it is invalid at the time the procedure is called.
2870 @deffn {Scheme Procedure} symtab-filename symtab
2871 Return the symbol table's source filename.
2874 @deffn {Scheme Procedure} symtab-fullname symtab
2875 Return the symbol table's source absolute file name.
2878 @deffn {Scheme Procedure} symtab-objfile symtab
2879 Return the symbol table's backing object file. @xref{Objfiles In Guile}.
2882 @deffn {Scheme Procedure} symtab-global-block symtab
2883 Return the global block of the underlying symbol table.
2884 @xref{Blocks In Guile}.
2887 @deffn {Scheme Procedure} symtab-static-block symtab
2888 Return the static block of the underlying symbol table.
2889 @xref{Blocks In Guile}.
2892 The following symtab-and-line-related procedures are provided by the
2893 @code{(gdb)} module:
2895 @deffn {Scheme Procedure} sal? object
2896 Return @code{#t} if @var{object} is an object of type @code{<gdb:sal>}.
2897 Otherwise return @code{#f}.
2900 @deffn {Scheme Procedure} sal-valid? sal
2901 Return @code{#t} if @var{sal} is valid, @code{#f} if not.
2902 A @code{<gdb:sal>} object becomes invalid when the Symbol table object
2903 it refers to no longer exists in @value{GDBN}. All other
2904 @code{<gdb:sal>} procedures will throw an exception if it is
2905 invalid at the time the procedure is called.
2908 @deffn {Scheme Procedure} sal-symtab sal
2909 Return the symbol table object (@code{<gdb:symtab>}) for @var{sal}.
2912 @deffn {Scheme Procedure} sal-line sal
2913 Return the line number for @var{sal}.
2916 @deffn {Scheme Procedure} sal-pc sal
2917 Return the start of the address range occupied by code for @var{sal}.
2920 @deffn {Scheme Procedure} sal-last sal
2921 Return the end of the address range occupied by code for @var{sal}.
2924 @deffn {Scheme Procedure} find-pc-line pc
2925 Return the @code{<gdb:sal>} object corresponding to the @var{pc} value.
2926 If an invalid value of @var{pc} is passed as an argument, then the
2927 @code{symtab} and @code{line} attributes of the returned @code{<gdb:sal>}
2928 object will be @code{#f} and 0 respectively.
2931 @node Breakpoints In Guile
2932 @subsubsection Manipulating breakpoints using Guile
2934 @cindex breakpoints in guile
2935 @tindex <gdb:breakpoint>
2937 Breakpoints in Guile are represented by objects of type
2938 @code{<gdb:breakpoint>}. New breakpoints can be created with the
2939 @code{make-breakpoint} Guile function, and then added to @value{GDBN} with the
2940 @code{register-breakpoint!} Guile function.
2941 This two-step approach is taken to separate out the side-effect of adding
2942 the breakpoint to @value{GDBN} from @code{make-breakpoint}.
2944 Support is also provided to view and manipulate breakpoints created
2947 The following breakpoint-related procedures are provided by the
2948 @code{(gdb)} module:
2950 @c TODO: line length
2951 @deffn {Scheme Procedure} make-breakpoint location @r{[}#:type type@r{]} @r{[}#:wp-class wp-class@r{]} @r{[}#:internal internal@r{]}
2952 Create a new breakpoint at @var{location}, a string naming the
2953 location of the breakpoint, or an expression that defines a watchpoint.
2954 The contents can be any location recognized by the @code{break} command,
2955 or in the case of a watchpoint, by the @code{watch} command.
2957 The breakpoint is initially marked as @samp{invalid}.
2958 The breakpoint is not usable until it has been registered with @value{GDBN}
2959 with @code{register-breakpoint!}, at which point it becomes @samp{valid}.
2960 The result is the @code{<gdb:breakpoint>} object representing the breakpoint.
2962 The optional @var{type} denotes the breakpoint to create.
2963 This argument can be either @code{BP_BREAKPOINT} or @code{BP_WATCHPOINT},
2964 and defaults to @code{BP_BREAKPOINT}.
2966 The optional @var{wp-class} argument defines the class of watchpoint to
2967 create, if @var{type} is @code{BP_WATCHPOINT}. If a watchpoint class is
2968 not provided, it is assumed to be a @code{WP_WRITE} class.
2970 The optional @var{internal} argument allows the breakpoint to become
2971 invisible to the user. The breakpoint will neither be reported when
2972 registered, nor will it be listed in the output from @code{info breakpoints}
2973 (but will be listed with the @code{maint info breakpoints} command).
2974 If an internal flag is not provided, the breakpoint is visible
2977 When a watchpoint is created, @value{GDBN} will try to create a
2978 hardware assisted watchpoint. If successful, the type of the watchpoint
2979 is changed from @code{BP_WATCHPOINT} to @code{BP_HARDWARE_WATCHPOINT}
2980 for @code{WP_WRITE}, @code{BP_READ_WATCHPOINT} for @code{WP_READ},
2981 and @code{BP_ACCESS_WATCHPOINT} for @code{WP_ACCESS}.
2982 If not successful, the type of the watchpoint is left as @code{WP_WATCHPOINT}.
2984 The available types are represented by constants defined in the @code{gdb}
2989 Normal code breakpoint.
2992 Watchpoint breakpoint.
2994 @item BP_HARDWARE_WATCHPOINT
2995 Hardware assisted watchpoint.
2996 This value cannot be specified when creating the breakpoint.
2998 @item BP_READ_WATCHPOINT
2999 Hardware assisted read watchpoint.
3000 This value cannot be specified when creating the breakpoint.
3002 @item BP_ACCESS_WATCHPOINT
3003 Hardware assisted access watchpoint.
3004 This value cannot be specified when creating the breakpoint.
3007 The available watchpoint types represented by constants are defined in the
3008 @code{(gdb)} module:
3012 Read only watchpoint.
3015 Write only watchpoint.
3018 Read/Write watchpoint.
3023 @deffn {Scheme Procedure} register-breakpoint! breakpoint
3024 Add @var{breakpoint}, a @code{<gdb:breakpoint>} object, to @value{GDBN}'s
3025 list of breakpoints. The breakpoint must have been created with
3026 @code{make-breakpoint}. One cannot register breakpoints that have been
3027 created outside of Guile. Once a breakpoint is registered it becomes
3029 It is an error to register an already registered breakpoint.
3030 The result is unspecified.
3033 @deffn {Scheme Procedure} delete-breakpoint! breakpoint
3034 Remove @var{breakpoint} from @value{GDBN}'s list of breakpoints.
3035 This also invalidates the Guile @var{breakpoint} object.
3036 Any further attempt to access the object will throw an exception.
3038 If @var{breakpoint} was created from Guile with @code{make-breakpoint}
3039 it may be re-registered with @value{GDBN}, in which case the breakpoint
3040 becomes valid again.
3043 @deffn {Scheme Procedure} breakpoints
3044 Return a list of all breakpoints.
3045 Each element of the list is a @code{<gdb:breakpoint>} object.
3048 @deffn {Scheme Procedure} breakpoint? object
3049 Return @code{#t} if @var{object} is a @code{<gdb:breakpoint>} object,
3050 and @code{#f} otherwise.
3053 @deffn {Scheme Procedure} breakpoint-valid? breakpoint
3054 Return @code{#t} if @var{breakpoint} is valid, @code{#f} otherwise.
3055 Breakpoints created with @code{make-breakpoint} are marked as invalid
3056 until they are registered with @value{GDBN} with @code{register-breakpoint!}.
3057 A @code{<gdb:breakpoint>} object can become invalid
3058 if the user deletes the breakpoint. In this case, the object still
3059 exists, but the underlying breakpoint does not. In the cases of
3060 watchpoint scope, the watchpoint remains valid even if execution of the
3061 inferior leaves the scope of that watchpoint.
3064 @deffn {Scheme Procedure} breakpoint-number breakpoint
3065 Return the breakpoint's number --- the identifier used by
3066 the user to manipulate the breakpoint.
3069 @deffn {Scheme Procedure} breakpoint-type breakpoint
3070 Return the breakpoint's type --- the identifier used to
3071 determine the actual breakpoint type or use-case.
3074 @deffn {Scheme Procedure} breakpoint-visible? breakpoint
3075 Return @code{#t} if the breakpoint is visible to the user
3076 when hit, or when the @samp{info breakpoints} command is run.
3077 Otherwise return @code{#f}.
3080 @deffn {Scheme Procedure} breakpoint-location breakpoint
3081 Return the location of the breakpoint, as specified by
3082 the user. It is a string. If the breakpoint does not have a location
3083 (that is, it is a watchpoint) return @code{#f}.
3086 @deffn {Scheme Procedure} breakpoint-expression breakpoint
3087 Return the breakpoint expression, as specified by the user. It is a string.
3088 If the breakpoint does not have an expression (the breakpoint is not a
3089 watchpoint) return @code{#f}.
3092 @deffn {Scheme Procedure} breakpoint-enabled? breakpoint
3093 Return @code{#t} if the breakpoint is enabled, and @code{#f} otherwise.
3096 @deffn {Scheme Procedure} set-breakpoint-enabled! breakpoint flag
3097 Set the enabled state of @var{breakpoint} to @var{flag}.
3098 If flag is @code{#f} it is disabled, otherwise it is enabled.
3101 @deffn {Scheme Procedure} breakpoint-silent? breakpoint
3102 Return @code{#t} if the breakpoint is silent, and @code{#f} otherwise.
3104 Note that a breakpoint can also be silent if it has commands and the
3105 first command is @code{silent}. This is not reported by the
3106 @code{silent} attribute.
3109 @deffn {Scheme Procedure} set-breakpoint-silent! breakpoint flag
3110 Set the silent state of @var{breakpoint} to @var{flag}.
3111 If flag is @code{#f} the breakpoint is made silent,
3112 otherwise it is made non-silent (or noisy).
3115 @deffn {Scheme Procedure} breakpoint-ignore-count breakpoint
3116 Return the ignore count for @var{breakpoint}.
3119 @deffn {Scheme Procedure} set-breakpoint-ignore-count! breakpoint count
3120 Set the ignore count for @var{breakpoint} to @var{count}.
3123 @deffn {Scheme Procedure} breakpoint-hit-count breakpoint
3124 Return hit count of @var{breakpoint}.
3127 @deffn {Scheme Procedure} set-breakpoint-hit-count! breakpoint count
3128 Set the hit count of @var{breakpoint} to @var{count}.
3129 At present, @var{count} must be zero.
3132 @deffn {Scheme Procedure} breakpoint-thread breakpoint
3133 Return the global-thread-id for thread-specific breakpoint
3134 @var{breakpoint}. Return #f if @var{breakpoint} is not
3138 @deffn {Scheme Procedure} set-breakpoint-thread! breakpoint global-thread-id|#f
3139 Set the thread-id for @var{breakpoint} to @var{global-thread-id} If
3140 set to @code{#f}, the breakpoint is no longer thread-specific.
3143 @deffn {Scheme Procedure} breakpoint-task breakpoint
3144 If the breakpoint is Ada task-specific, return the Ada task id.
3145 If the breakpoint is not task-specific (or the underlying
3146 language is not Ada), return @code{#f}.
3149 @deffn {Scheme Procedure} set-breakpoint-task! breakpoint task
3150 Set the Ada task of @var{breakpoint} to @var{task}.
3151 If set to @code{#f}, the breakpoint is no longer task-specific.
3154 @deffn {Scheme Procedure} breakpoint-condition breakpoint
3155 Return the condition of @var{breakpoint}, as specified by the user.
3156 It is a string. If there is no condition, return @code{#f}.
3159 @deffn {Scheme Procedure} set-breakpoint-condition! breakpoint condition
3160 Set the condition of @var{breakpoint} to @var{condition},
3161 which must be a string. If set to @code{#f} then the breakpoint
3162 becomes unconditional.
3165 @deffn {Scheme Procedure} breakpoint-stop breakpoint
3166 Return the stop predicate of @var{breakpoint}.
3167 See @code{set-breakpoint-stop!} below in this section.
3170 @deffn {Scheme Procedure} set-breakpoint-stop! breakpoint procedure|#f
3171 Set the stop predicate of @var{breakpoint}. The predicate
3172 @var{procedure} takes one argument: the <gdb:breakpoint> object.
3173 If this predicate is set to a procedure then it is invoked whenever
3174 the inferior reaches this breakpoint. If it returns @code{#t},
3175 or any non-@code{#f} value, then the inferior is stopped,
3176 otherwise the inferior will continue.
3178 If there are multiple breakpoints at the same location with a
3179 @code{stop} predicate, each one will be called regardless of the
3180 return status of the previous. This ensures that all @code{stop}
3181 predicates have a chance to execute at that location. In this scenario
3182 if one of the methods returns @code{#t} but the others return
3183 @code{#f}, the inferior will still be stopped.
3185 You should not alter the execution state of the inferior (i.e.@:, step,
3186 next, etc.), alter the current frame context (i.e.@:, change the current
3187 active frame), or alter, add or delete any breakpoint. As a general
3188 rule, you should not alter any data within @value{GDBN} or the inferior
3191 Example @code{stop} implementation:
3194 (define (my-stop? bkpt)
3195 (let ((int-val (parse-and-eval "foo")))
3196 (value=? int-val 3)))
3197 (define bkpt (make-breakpoint "main.c:42"))
3198 (register-breakpoint! bkpt)
3199 (set-breakpoint-stop! bkpt my-stop?)
3203 @deffn {Scheme Procedure} breakpoint-commands breakpoint
3204 Return the commands attached to @var{breakpoint} as a string,
3205 or @code{#f} if there are none.
3208 @node Lazy Strings In Guile
3209 @subsubsection Guile representation of lazy strings.
3211 @cindex lazy strings in guile
3212 @tindex <gdb:lazy-string>
3214 A @dfn{lazy string} is a string whose contents is not retrieved or
3215 encoded until it is needed.
3217 A @code{<gdb:lazy-string>} is represented in @value{GDBN} as an
3218 @code{address} that points to a region of memory, an @code{encoding}
3219 that will be used to encode that region of memory, and a @code{length}
3220 to delimit the region of memory that represents the string. The
3221 difference between a @code{<gdb:lazy-string>} and a string wrapped within
3222 a @code{<gdb:value>} is that a @code{<gdb:lazy-string>} will be treated
3223 differently by @value{GDBN} when printing. A @code{<gdb:lazy-string>} is
3224 retrieved and encoded during printing, while a @code{<gdb:value>}
3225 wrapping a string is immediately retrieved and encoded on creation.
3227 The following lazy-string-related procedures are provided by the
3228 @code{(gdb)} module:
3230 @deffn {Scheme Procedure} lazy-string? object
3231 Return @code{#t} if @var{object} is an object of type @code{<gdb:lazy-string>}.
3232 Otherwise return @code{#f}.
3235 @deffn {Scheme Procedure} lazy-string-address lazy-sring
3236 Return the address of @var{lazy-string}.
3239 @deffn {Scheme Procedure} lazy-string-length lazy-string
3240 Return the length of @var{lazy-string} in characters. If the
3241 length is -1, then the string will be fetched and encoded up to the
3242 first null of appropriate width.
3245 @deffn {Scheme Procedure} lazy-string-encoding lazy-string
3246 Return the encoding that will be applied to @var{lazy-string}
3247 when the string is printed by @value{GDBN}. If the encoding is not
3248 set, or contains an empty string, then @value{GDBN} will select the
3249 most appropriate encoding when the string is printed.
3252 @deffn {Scheme Procedure} lazy-string-type lazy-string
3253 Return the type that is represented by @var{lazy-string}'s type.
3254 For a lazy string this is a pointer or array type. To
3255 resolve this to the lazy string's character type, use @code{type-target-type}.
3256 @xref{Types In Guile}.
3259 @deffn {Scheme Procedure} lazy-string->value lazy-string
3260 Convert the @code{<gdb:lazy-string>} to a @code{<gdb:value>}. This value
3261 will point to the string in memory, but will lose all the delayed
3262 retrieval, encoding and handling that @value{GDBN} applies to a
3263 @code{<gdb:lazy-string>}.
3266 @node Architectures In Guile
3267 @subsubsection Guile representation of architectures
3269 @cindex guile architectures
3272 @value{GDBN} uses architecture specific parameters and artifacts in a
3273 number of its various computations. An architecture is represented
3274 by an instance of the @code{<gdb:arch>} class.
3276 The following architecture-related procedures are provided by the
3277 @code{(gdb)} module:
3279 @deffn {Scheme Procedure} arch? object
3280 Return @code{#t} if @var{object} is an object of type @code{<gdb:arch>}.
3281 Otherwise return @code{#f}.
3284 @deffn {Scheme Procedure} current-arch
3285 Return the current architecture as a @code{<gdb:arch>} object.
3288 @deffn {Scheme Procedure} arch-name arch
3289 Return the name (string value) of @code{<gdb:arch>} @var{arch}.
3292 @deffn {Scheme Procedure} arch-charset arch
3293 Return name of target character set of @code{<gdb:arch>} @var{arch}.
3296 @deffn {Scheme Procedure} arch-wide-charset
3297 Return name of target wide character set of @code{<gdb:arch>} @var{arch}.
3300 Each architecture provides a set of predefined types, obtained by
3301 the following functions.
3303 @deffn {Scheme Procedure} arch-void-type arch
3304 Return the @code{<gdb:type>} object for a @code{void} type
3305 of architecture @var{arch}.
3308 @deffn {Scheme Procedure} arch-char-type arch
3309 Return the @code{<gdb:type>} object for a @code{char} type
3310 of architecture @var{arch}.
3313 @deffn {Scheme Procedure} arch-short-type arch
3314 Return the @code{<gdb:type>} object for a @code{short} type
3315 of architecture @var{arch}.
3318 @deffn {Scheme Procedure} arch-int-type arch
3319 Return the @code{<gdb:type>} object for an @code{int} type
3320 of architecture @var{arch}.
3323 @deffn {Scheme Procedure} arch-long-type arch
3324 Return the @code{<gdb:type>} object for a @code{long} type
3325 of architecture @var{arch}.
3328 @deffn {Scheme Procedure} arch-schar-type arch
3329 Return the @code{<gdb:type>} object for a @code{signed char} type
3330 of architecture @var{arch}.
3333 @deffn {Scheme Procedure} arch-uchar-type arch
3334 Return the @code{<gdb:type>} object for an @code{unsigned char} type
3335 of architecture @var{arch}.
3338 @deffn {Scheme Procedure} arch-ushort-type arch
3339 Return the @code{<gdb:type>} object for an @code{unsigned short} type
3340 of architecture @var{arch}.
3343 @deffn {Scheme Procedure} arch-uint-type arch
3344 Return the @code{<gdb:type>} object for an @code{unsigned int} type
3345 of architecture @var{arch}.
3348 @deffn {Scheme Procedure} arch-ulong-type arch
3349 Return the @code{<gdb:type>} object for an @code{unsigned long} type
3350 of architecture @var{arch}.
3353 @deffn {Scheme Procedure} arch-float-type arch
3354 Return the @code{<gdb:type>} object for a @code{float} type
3355 of architecture @var{arch}.
3358 @deffn {Scheme Procedure} arch-double-type arch
3359 Return the @code{<gdb:type>} object for a @code{double} type
3360 of architecture @var{arch}.
3363 @deffn {Scheme Procedure} arch-longdouble-type arch
3364 Return the @code{<gdb:type>} object for a @code{long double} type
3365 of architecture @var{arch}.
3368 @deffn {Scheme Procedure} arch-bool-type arch
3369 Return the @code{<gdb:type>} object for a @code{bool} type
3370 of architecture @var{arch}.
3373 @deffn {Scheme Procedure} arch-longlong-type arch
3374 Return the @code{<gdb:type>} object for a @code{long long} type
3375 of architecture @var{arch}.
3378 @deffn {Scheme Procedure} arch-ulonglong-type arch
3379 Return the @code{<gdb:type>} object for an @code{unsigned long long} type
3380 of architecture @var{arch}.
3383 @deffn {Scheme Procedure} arch-int8-type arch
3384 Return the @code{<gdb:type>} object for an @code{int8} type
3385 of architecture @var{arch}.
3388 @deffn {Scheme Procedure} arch-uint8-type arch
3389 Return the @code{<gdb:type>} object for a @code{uint8} type
3390 of architecture @var{arch}.
3393 @deffn {Scheme Procedure} arch-int16-type arch
3394 Return the @code{<gdb:type>} object for an @code{int16} type
3395 of architecture @var{arch}.
3398 @deffn {Scheme Procedure} arch-uint16-type arch
3399 Return the @code{<gdb:type>} object for a @code{uint16} type
3400 of architecture @var{arch}.
3403 @deffn {Scheme Procedure} arch-int32-type arch
3404 Return the @code{<gdb:type>} object for an @code{int32} type
3405 of architecture @var{arch}.
3408 @deffn {Scheme Procedure} arch-uint32-type arch
3409 Return the @code{<gdb:type>} object for a @code{uint32} type
3410 of architecture @var{arch}.
3413 @deffn {Scheme Procedure} arch-int64-type arch
3414 Return the @code{<gdb:type>} object for an @code{int64} type
3415 of architecture @var{arch}.
3418 @deffn {Scheme Procedure} arch-uint64-type arch
3419 Return the @code{<gdb:type>} object for a @code{uint64} type
3420 of architecture @var{arch}.
3426 (gdb) guile (type-name (arch-uchar-type (current-arch)))
3430 @node Disassembly In Guile
3431 @subsubsection Disassembly In Guile
3433 The disassembler can be invoked from Scheme code.
3434 Furthermore, the disassembler can take a Guile port as input,
3435 allowing one to disassemble from any source, and not just target memory.
3437 @c TODO: line length
3438 @deffn {Scheme Procedure} arch-disassemble arch start-pc @r{[}#:port port@r{]} @r{[}#:offset offset@r{]} @r{[}#:size size@r{]} @r{[}#:count count@r{]}
3439 Return a list of disassembled instructions starting from the memory
3440 address @var{start-pc}.
3442 The optional argument @var{port} specifies the input port to read bytes from.
3443 If @var{port} is @code{#f} then bytes are read from target memory.
3445 The optional argument @var{offset} specifies the address offset of the
3446 first byte in @var{port}. This is useful, for example, when @var{port}
3447 specifies a @samp{bytevector} and you want the bytevector to be disassembled
3448 as if it came from that address. The @var{start-pc} passed to the reader
3449 for @var{port} is offset by the same amount.
3453 (gdb) guile (use-modules (rnrs io ports))
3454 (gdb) guile (define pc (value->integer (parse-and-eval "$pc")))
3455 (gdb) guile (define mem (open-memory #:start pc))
3456 (gdb) guile (define bv (get-bytevector-n mem 10))
3457 (gdb) guile (define bv-port (open-bytevector-input-port bv))
3458 (gdb) guile (define arch (current-arch))
3459 (gdb) guile (arch-disassemble arch pc #:port bv-port #:offset pc)
3460 (((address . 4195516) (asm . "mov $0x4005c8,%edi") (length . 5)))
3463 The optional arguments @var{size} and
3464 @var{count} determine the number of instructions in the returned list.
3465 If either @var{size} or @var{count} is specified as zero, then
3466 no instructions are disassembled and an empty list is returned.
3467 If both the optional arguments @var{size} and @var{count} are
3468 specified, then a list of at most @var{count} disassembled instructions
3469 whose start address falls in the closed memory address interval from
3470 @var{start-pc} to (@var{start-pc} + @var{size} - 1) are returned.
3471 If @var{size} is not specified, but @var{count} is specified,
3472 then @var{count} number of instructions starting from the address
3473 @var{start-pc} are returned. If @var{count} is not specified but
3474 @var{size} is specified, then all instructions whose start address
3475 falls in the closed memory address interval from @var{start-pc} to
3476 (@var{start-pc} + @var{size} - 1) are returned.
3477 If neither @var{size} nor @var{count} are specified, then a single
3478 instruction at @var{start-pc} is returned.
3480 Each element of the returned list is an alist (associative list)
3481 with the following keys:
3486 The value corresponding to this key is a Guile integer of
3487 the memory address of the instruction.
3490 The value corresponding to this key is a string value which represents
3491 the instruction with assembly language mnemonics. The assembly
3492 language flavor used is the same as that specified by the current CLI
3493 variable @code{disassembly-flavor}. @xref{Machine Code}.
3496 The value corresponding to this key is the length of the instruction in bytes.
3501 @node I/O Ports in Guile
3502 @subsubsection I/O Ports in Guile
3504 @deffn {Scheme Procedure} input-port
3505 Return @value{GDBN}'s input port as a Guile port object.
3508 @deffn {Scheme Procedure} output-port
3509 Return @value{GDBN}'s output port as a Guile port object.
3512 @deffn {Scheme Procedure} error-port
3513 Return @value{GDBN}'s error port as a Guile port object.
3516 @deffn {Scheme Procedure} stdio-port? object
3517 Return @code{#t} if @var{object} is a @value{GDBN} stdio port.
3518 Otherwise return @code{#f}.
3521 @node Memory Ports in Guile
3522 @subsubsection Memory Ports in Guile
3524 @value{GDBN} provides a @code{port} interface to target memory.
3525 This allows Guile code to read/write target memory using Guile's port and
3526 bytevector functionality. The main routine is @code{open-memory} which
3527 returns a port object. One can then read/write memory using that object.
3529 @deffn {Scheme Procedure} open-memory @r{[}#:mode mode{]} @r{[}#:start address{]} @r{[}#:size size{]}
3530 Return a port object that can be used for reading and writing memory.
3531 The port will be open according to @var{mode}, which is the standard
3532 mode argument to Guile port open routines, except that the @samp{"a"}
3533 and @samp{"l"} modes are not supported.
3534 @xref{File Ports,,, guile, GNU Guile Reference Manual}.
3535 The @samp{"b"} (binary) character may be present, but is ignored:
3536 memory ports are binary only. If @samp{"0"} is appended then
3537 the port is marked as unbuffered.
3538 The default is @samp{"r"}, read-only and buffered.
3540 The chunk of memory that can be accessed can be bounded.
3541 If both @var{start} and @var{size} are unspecified, all of memory can be
3542 accessed. If only @var{start} is specified, all of memory from that point
3543 on can be accessed. If only @var{size} if specified, all memory in the
3544 range [0,@var{size}) can be accessed. If both are specified, all memory
3545 in the rane [@var{start},@var{start}+@var{size}) can be accessed.
3548 @deffn {Scheme Procedure} memory-port?
3549 Return @code{#t} if @var{object} is an object of type @code{<gdb:memory-port>}.
3550 Otherwise return @code{#f}.
3553 @deffn {Scheme Procedure} memory-port-range memory-port
3554 Return the range of @code{<gdb:memory-port>} @var{memory-port} as a list
3555 of two elements: @code{(start end)}. The range is @var{start} to @var{end}
3559 @deffn {Scheme Procedure} memory-port-read-buffer-size memory-port
3560 Return the size of the read buffer of @code{<gdb:memory-port>}
3564 @deffn {Scheme Procedure} set-memory-port-read-buffer-size! memory-port size
3565 Set the size of the read buffer of @code{<gdb:memory-port>}
3566 @var{memory-port} to @var{size}. The result is unspecified.
3569 @deffn {Scheme Procedure} memory-port-write-buffer-size memory-port
3570 Return the size of the write buffer of @code{<gdb:memory-port>}
3574 @deffn {Scheme Procedure} set-memory-port-write-buffer-size! memory-port size
3575 Set the size of the write buffer of @code{<gdb:memory-port>}
3576 @var{memory-port} to @var{size}. The result is unspecified.
3579 A memory port is closed like any other port, with @code{close-port}.
3581 Combined with Guile's @code{bytevectors}, memory ports provide a lot
3582 of utility. For example, to fill a buffer of 10 integers in memory,
3583 one can do something like the following.
3586 ;; In the program: int buffer[10];
3587 (use-modules (rnrs bytevectors))
3588 (use-modules (rnrs io ports))
3589 (define addr (parse-and-eval "buffer"))
3591 (define byte-size (* n 4))
3592 (define mem-port (open-memory #:mode "r+" #:start
3593 (value->integer addr) #:size byte-size))
3594 (define byte-vec (make-bytevector byte-size))
3597 (bytevector-s32-native-set! byte-vec (* i 4) (* i 42)))
3598 (put-bytevector mem-port byte-vec)
3599 (close-port mem-port)
3602 @node Iterators In Guile
3603 @subsubsection Iterators In Guile
3605 @cindex guile iterators
3606 @tindex <gdb:iterator>
3608 A simple iterator facility is provided to allow, for example,
3609 iterating over the set of program symbols without having to first
3610 construct a list of all of them. A useful contribution would be
3611 to add support for SRFI 41 and SRFI 45.
3613 @deffn {Scheme Procedure} make-iterator object progress next!
3614 A @code{<gdb:iterator>} object is constructed with the @code{make-iterator}
3615 procedure. It takes three arguments: the object to be iterated over,
3616 an object to record the progress of the iteration, and a procedure to
3617 return the next element in the iteration, or an implementation chosen value
3618 to denote the end of iteration.
3620 By convention, end of iteration is marked with @code{(end-of-iteration)},
3621 and may be tested with the @code{end-of-iteration?} predicate.
3622 The result of @code{(end-of-iteration)} is chosen so that it is not
3623 otherwise used by the @code{(gdb)} module. If you are using
3624 @code{<gdb:iterator>} in your own code it is your responsibility to
3625 maintain this invariant.
3627 A trivial example for illustration's sake:
3630 (use-modules (gdb iterator))
3631 (define my-list (list 1 2 3))
3633 (make-iterator my-list my-list
3635 (let ((l (iterator-progress iter)))
3639 (set-iterator-progress! iter (cdr l))
3643 Here is a slightly more realistic example, which computes a list of all the
3644 functions in @code{my-global-block}.
3647 (use-modules (gdb iterator))
3648 (define this-sal (find-pc-line (frame-pc (selected-frame))))
3649 (define this-symtab (sal-symtab this-sal))
3650 (define this-global-block (symtab-global-block this-symtab))
3651 (define syms-iter (make-block-symbols-iterator this-global-block))
3652 (define functions (iterator-filter symbol-function? syms-iter))
3656 @deffn {Scheme Procedure} iterator? object
3657 Return @code{#t} if @var{object} is a @code{<gdb:iterator>} object.
3658 Otherwise return @code{#f}.
3661 @deffn {Scheme Procedure} iterator-object iterator
3662 Return the first argument that was passed to @code{make-iterator}.
3663 This is the object being iterated over.
3666 @deffn {Scheme Procedure} iterator-progress iterator
3667 Return the object tracking iteration progress.
3670 @deffn {Scheme Procedure} set-iterator-progress! iterator new-value
3671 Set the object tracking iteration progress.
3674 @deffn {Scheme Procedure} iterator-next! iterator
3675 Invoke the procedure that was the third argument to @code{make-iterator},
3676 passing it one argument, the @code{<gdb:iterator>} object.
3677 The result is either the next element in the iteration, or an end
3678 marker as implemented by the @code{next!} procedure.
3679 By convention the end marker is the result of @code{(end-of-iteration)}.
3682 @deffn {Scheme Procedure} end-of-iteration
3683 Return the Scheme object that denotes end of iteration.
3686 @deffn {Scheme Procedure} end-of-iteration? object
3687 Return @code{#t} if @var{object} is the end of iteration marker.
3688 Otherwise return @code{#f}.
3691 These functions are provided by the @code{(gdb iterator)} module to
3692 assist in using iterators.
3694 @deffn {Scheme Procedure} make-list-iterator list
3695 Return a @code{<gdb:iterator>} object that will iterate over @var{list}.
3698 @deffn {Scheme Procedure} iterator->list iterator
3699 Return the elements pointed to by @var{iterator} as a list.
3702 @deffn {Scheme Procedure} iterator-map proc iterator
3703 Return the list of objects obtained by applying @var{proc} to the object
3704 pointed to by @var{iterator} and to each subsequent object.
3707 @deffn {Scheme Procedure} iterator-for-each proc iterator
3708 Apply @var{proc} to each element pointed to by @var{iterator}.
3709 The result is unspecified.
3712 @deffn {Scheme Procedure} iterator-filter pred iterator
3713 Return the list of elements pointed to by @var{iterator} that satisfy
3717 @deffn {Scheme Procedure} iterator-until pred iterator
3718 Run @var{iterator} until the result of @code{(pred element)} is true
3719 and return that as the result. Otherwise return @code{#f}.
3722 @node Guile Auto-loading
3723 @subsection Guile Auto-loading
3724 @cindex guile auto-loading
3726 When a new object file is read (for example, due to the @code{file}
3727 command, or because the inferior has loaded a shared library),
3728 @value{GDBN} will look for Guile support scripts in two ways:
3729 @file{@var{objfile}-gdb.scm} and the @code{.debug_gdb_scripts} section.
3730 @xref{Auto-loading extensions}.
3732 The auto-loading feature is useful for supplying application-specific
3733 debugging commands and scripts.
3735 Auto-loading can be enabled or disabled,
3736 and the list of auto-loaded scripts can be printed.
3739 @anchor{set auto-load guile-scripts}
3740 @kindex set auto-load guile-scripts
3741 @item set auto-load guile-scripts [on|off]
3742 Enable or disable the auto-loading of Guile scripts.
3744 @anchor{show auto-load guile-scripts}
3745 @kindex show auto-load guile-scripts
3746 @item show auto-load guile-scripts
3747 Show whether auto-loading of Guile scripts is enabled or disabled.
3749 @anchor{info auto-load guile-scripts}
3750 @kindex info auto-load guile-scripts
3751 @cindex print list of auto-loaded Guile scripts
3752 @item info auto-load guile-scripts [@var{regexp}]
3753 Print the list of all Guile scripts that @value{GDBN} auto-loaded.
3755 Also printed is the list of Guile scripts that were mentioned in
3756 the @code{.debug_gdb_scripts} section and were not found.
3757 This is useful because their names are not printed when @value{GDBN}
3758 tries to load them and fails. There may be many of them, and printing
3759 an error message for each one is problematic.
3761 If @var{regexp} is supplied only Guile scripts with matching names are printed.
3766 (gdb) info auto-load guile-scripts
3768 Yes scm-section-script.scm
3769 full name: /tmp/scm-section-script.scm
3770 No my-foo-pretty-printers.scm
3774 When reading an auto-loaded file, @value{GDBN} sets the
3775 @dfn{current objfile}. This is available via the @code{current-objfile}
3776 procedure (@pxref{Objfiles In Guile}). This can be useful for
3777 registering objfile-specific pretty-printers.
3780 @subsection Guile Modules
3781 @cindex guile modules
3783 @value{GDBN} comes with several modules to assist writing Guile code.
3786 * Guile Printing Module:: Building and registering pretty-printers
3787 * Guile Types Module:: Utilities for working with types
3790 @node Guile Printing Module
3791 @subsubsection Guile Printing Module
3793 This module provides a collection of utilities for working with
3799 (use-modules (gdb printing))
3802 @deffn {Scheme Procedure} prepend-pretty-printer! object printer
3803 Add @var{printer} to the front of the list of pretty-printers for
3804 @var{object}. The @var{object} must either be a @code{<gdb:objfile>} object,
3805 or @code{#f} in which case @var{printer} is added to the global list of
3809 @deffn {Scheme Procecure} append-pretty-printer! object printer
3810 Add @var{printer} to the end of the list of pretty-printers for
3811 @var{object}. The @var{object} must either be a @code{<gdb:objfile>} object,
3812 or @code{#f} in which case @var{printer} is added to the global list of
3816 @node Guile Types Module
3817 @subsubsection Guile Types Module
3819 This module provides a collection of utilities for working with
3820 @code{<gdb:type>} objects.
3825 (use-modules (gdb types))
3828 @deffn {Scheme Procedure} get-basic-type type
3829 Return @var{type} with const and volatile qualifiers stripped,
3830 and with typedefs and C@t{++} references converted to the underlying type.
3835 typedef const int const_int;
3837 const_int& foo_ref (foo);
3838 int main () @{ return 0; @}
3845 (gdb) guile (use-modules (gdb) (gdb types))
3846 (gdb) guile (define foo-ref (parse-and-eval "foo_ref"))
3847 (gdb) guile (get-basic-type (value-type foo-ref))
3852 @deffn {Scheme Procedure} type-has-field-deep? type field
3853 Return @code{#t} if @var{type}, assumed to be a type with fields
3854 (e.g., a structure or union), has field @var{field}.
3855 Otherwise return @code{#f}.
3856 This searches baseclasses, whereas @code{type-has-field?} does not.
3859 @deffn {Scheme Procedure} make-enum-hashtable enum-type
3860 Return a Guile hash table produced from @var{enum-type}.
3861 Elements in the hash table are referenced with @code{hashq-ref}.