X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fdoc%2Fpython.texi;h=5d762aa612aefdf6ff4b1aad46479c3b4ee9fea5;hb=db178f47dd4c9d2882da42a8915018d1fb90ea17;hp=59b6b3b72db604c0cfb8ec8ae1e2e3ce62744a23;hpb=4a5a194ae8a871a781d4cdc73c7ba3ae7deafbaa;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/doc/python.texi b/gdb/doc/python.texi index 59b6b3b72d..5d762aa612 100644 --- a/gdb/doc/python.texi +++ b/gdb/doc/python.texi @@ -1,4 +1,4 @@ -@c Copyright (C) 2008-2018 Free Software Foundation, Inc. +@c Copyright (C) 2008-2019 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with the @@ -18,6 +18,8 @@ You can extend @value{GDBN} using the @uref{http://www.python.org/, Python programming language}. This feature is available only if @value{GDBN} was configured using @option{--with-python}. +@value{GDBN} can be built against either Python 2 or Python 3; which +one you have depends on this configure-time option. @cindex python directory Python scripts used by @value{GDBN} should be installed in @@ -88,8 +90,6 @@ containing @code{end}. For example: @smallexample (@value{GDBP}) python -Type python script -End with a line saying just "end". >print 23 >end 23 @@ -113,10 +113,6 @@ interpreter: The script name must end with @samp{.py} and @value{GDBN} must be configured to recognize the script language based on filename extension using the @code{script-extension} setting. @xref{Extending GDB, ,Extending GDB}. - -@item python execfile ("script-name") -This method is based on the @code{execfile} Python built-in function, -and thus is always available. @end table @node Python API @@ -209,6 +205,10 @@ methods and classes added by @value{GDBN} are placed in this module. @value{GDBN} automatically @code{import}s the @code{gdb} module for use in all scripts evaluated by the @code{python} command. +Some types of the @code{gdb} module come with a textual representation +(accessible through the @code{repr} or @code{str} functions). These are +offered for debugging purposes only, expect them to change over time. + @findex gdb.PYTHONDIR @defvar gdb.PYTHONDIR A string containing the python directory (@pxref{Python}). @@ -326,7 +326,9 @@ Return the @code{gdb.Symtab_and_line} object corresponding to the @var{pc} value. @xref{Symbol Tables In Python}. If an invalid value of @var{pc} is passed as an argument, then the @code{symtab} and @code{line} attributes of the returned @code{gdb.Symtab_and_line} object -will be @code{None} and 0 respectively. +will be @code{None} and 0 respectively. This is identical to +@code{gdb.current_progspace().find_pc_line(pc)} and is included for +historical compatibility. @end defun @findex gdb.post_event @@ -446,11 +448,13 @@ never returned. @findex gdb.solib_name @defun gdb.solib_name (address) Return the name of the shared library holding the given @var{address} -as a string, or @code{None}. +as a string, or @code{None}. This is identical to +@code{gdb.current_progspace().solib_name(address)} and is included for +historical compatibility. @end defun @findex gdb.decode_line -@defun gdb.decode_line @r{[}expression@r{]} +@defun gdb.decode_line (@r{[}expression@r{]}) Return locations of the line specified by @var{expression}, or of the current line if no argument was given. This function returns a Python tuple containing two elements. The first element contains a string @@ -660,14 +664,14 @@ The type of this @code{gdb.Value}. The value of this attribute is a @end defvar @defvar Value.dynamic_type -The dynamic type of this @code{gdb.Value}. This uses C@t{++} run-time -type information (@acronym{RTTI}) to determine the dynamic type of the -value. If this value is of class type, it will return the class in -which the value is embedded, if any. If this value is of pointer or -reference to a class type, it will compute the dynamic type of the -referenced object, and return a pointer or reference to that type, -respectively. In all other cases, it will return the value's static -type. +The dynamic type of this @code{gdb.Value}. This uses the object's +virtual table and the C@t{++} run-time type information +(@acronym{RTTI}) to determine the dynamic type of the value. If this +value is of class type, it will return the class in which the value is +embedded, if any. If this value is of pointer or reference to a class +type, it will compute the dynamic type of the referenced object, and +return a pointer or reference to that type, respectively. In all +other cases, it will return the value's static type. Note that this feature will only work when debugging a C@t{++} program that includes @acronym{RTTI} for the object in question. Otherwise, @@ -729,6 +733,14 @@ its result is used. @end table @end defun +@defun Value.__init__ (@var{val}, @var{type}) +This second form of the @code{gdb.Value} constructor returns a +@code{gdb.Value} of type @var{type} where the value contents are taken +from the Python buffer object specified by @var{val}. The number of +bytes in the Python buffer object must be greater than or equal to the +size of @var{type}. +@end defun + @defun Value.cast (type) Return a new instance of @code{gdb.Value} that is the result of casting this instance to the type described by @var{type}, which must @@ -757,7 +769,7 @@ The result @code{bar} will be a @code{gdb.Value} object holding the value pointed to by @code{foo}. A similar function @code{Value.referenced_value} exists which also -returns @code{gdb.Value} objects corresonding to the values pointed to +returns @code{gdb.Value} objects corresponding to the values pointed to by pointer values (and additionally, values referenced by reference values). However, the behavior of @code{Value.dereference} differs from @code{Value.referenced_value} by the fact that the @@ -850,6 +862,91 @@ Like @code{Value.cast}, but works as if the C@t{++} @code{reinterpret_cast} operator were used. Consult a C@t{++} reference for details. @end defun +@defun Value.format_string (...) +Convert a @code{gdb.Value} to a string, similarly to what the @code{print} +command does. Invoked with no arguments, this is equivalent to calling +the @code{str} function on the @code{gdb.Value}. The representation of +the same value may change across different versions of @value{GDBN}, so +you shouldn't, for instance, parse the strings returned by this method. + +All the arguments are keyword only. If an argument is not specified, the +current global default setting is used. + +@table @code +@item raw +@code{True} if pretty-printers (@pxref{Pretty Printing}) should not be +used to format the value. @code{False} if enabled pretty-printers +matching the type represented by the @code{gdb.Value} should be used to +format it. + +@item pretty_arrays +@code{True} if arrays should be pretty printed to be more convenient to +read, @code{False} if they shouldn't (see @code{set print array} in +@ref{Print Settings}). + +@item pretty_structs +@code{True} if structs should be pretty printed to be more convenient to +read, @code{False} if they shouldn't (see @code{set print pretty} in +@ref{Print Settings}). + +@item array_indexes +@code{True} if array indexes should be included in the string +representation of arrays, @code{False} if they shouldn't (see @code{set +print array-indexes} in @ref{Print Settings}). + +@item symbols +@code{True} if the string representation of a pointer should include the +corresponding symbol name (if one exists), @code{False} if it shouldn't +(see @code{set print symbol} in @ref{Print Settings}). + +@item unions +@code{True} if unions which are contained in other structures or unions +should be expanded, @code{False} if they shouldn't (see @code{set print +union} in @ref{Print Settings}). + +@item deref_refs +@code{True} if C@t{++} references should be resolved to the value they +refer to, @code{False} (the default) if they shouldn't. Note that, unlike +for the @code{print} command, references are not automatically expanded +when using the @code{format_string} method or the @code{str} +function. There is no global @code{print} setting to change the default +behaviour. + +@item actual_objects +@code{True} if the representation of a pointer to an object should +identify the @emph{actual} (derived) type of the object rather than the +@emph{declared} type, using the virtual function table. @code{False} if +the @emph{declared} type should be used. (See @code{set print object} in +@ref{Print Settings}). + +@item static_fields +@code{True} if static members should be included in the string +representation of a C@t{++} object, @code{False} if they shouldn't (see +@code{set print static-members} in @ref{Print Settings}). + +@item max_elements +Number of array elements to print, or @code{0} to print an unlimited +number of elements (see @code{set print elements} in @ref{Print +Settings}). + +@item max_depth +The maximum depth to print for nested structs and unions, or @code{-1} +to print an unlimited number of elements (see @code{set print +max-depth} in @ref{Print Settings}). + +@item repeat_threshold +Set the threshold for suppressing display of repeated array elements, or +@code{0} to represent all elements, even if repeated. (See @code{set +print repeats} in @ref{Print Settings}). + +@item format +A string containing a single character representing the format to use for +the returned string. For instance, @code{'x'} is equivalent to using the +@value{GDBN} command @code{print} with the @code{/x} option and formats +the value as a hexadecimal number. +@end table +@end defun + @defun Value.string (@r{[}encoding@r{[}, errors@r{[}, length@r{]]]}) If this @code{gdb.Value} represents a string, then this method converts the contents to a Python string. Otherwise, this method will @@ -988,6 +1085,11 @@ languages have this concept. If this type has no tag name, then @code{None} is returned. @end defvar +@defvar Type.objfile +The @code{gdb.Objfile} that this type was defined in, or @code{None} if +there is no associated objfile. +@end defvar + The following methods are provided: @defun Type.fields () @@ -1255,10 +1357,9 @@ Python module (@pxref{gdb.types}). @subsubsection Pretty Printing API @cindex python pretty printing api -An example output is provided (@pxref{Pretty Printing}). - A pretty-printer is just an object that holds a value and implements a -specific interface, defined here. +specific interface, defined here. An example output is provided +(@pxref{Pretty Printing}). @defun pretty_printer.children (self) @value{GDBN} will call this method on a pretty-printer to compute the @@ -1272,6 +1373,15 @@ object which is convertible to a @value{GDBN} value. This method is optional. If it does not exist, @value{GDBN} will act as though the value has no children. + +For efficiency, the @code{children} method should lazily compute its +results. This will let @value{GDBN} read as few elements as +necessary, for example when various print settings (@pxref{Print +Settings}) or @code{-var-list-children} (@pxref{GDB/MI Variable +Objects}) limit the number of elements to be displayed. + +Children may be hidden from display based on the value of @samp{set +print max-depth} (@pxref{Print Settings}). @end defun @defun pretty_printer.display_hint (self) @@ -1281,7 +1391,7 @@ consumer as a @samp{displayhint} attribute of the variable being printed. This method is optional. If it does exist, this method must return a -string. +string or the special value @code{None}. Some display hints are predefined by @value{GDBN}: @@ -1304,6 +1414,9 @@ string-printing function to format the string. For the CLI this means adding quotation marks, possibly escaping some characters, respecting @code{set print elements}, and the like. @end table + +The special value @code{None} causes @value{GDBN} to apply the default +display rules. @end defun @defun pretty_printer.to_string (self) @@ -1350,10 +1463,21 @@ printer exists, then this returns @code{None}. @subsubsection Selecting Pretty-Printers @cindex selecting python pretty-printers +@value{GDBN} provides several ways to register a pretty-printer: +globally, per program space, and per objfile. When choosing how to +register your pretty-printer, a good rule is to register it with the +smallest scope possible: that is prefer a specific objfile first, then +a program space, and only register a printer globally as a last +resort. + +@findex gdb.pretty_printers +@defvar gdb.pretty_printers The Python list @code{gdb.pretty_printers} contains an array of functions or callable objects that have been registered via addition as a pretty-printer. Printers in this list are called @code{global} printers, they're available when debugging all inferiors. +@end defvar + Each @code{gdb.Progspace} contains a @code{pretty_printers} attribute. Each @code{gdb.Objfile} also contains a @code{pretty_printers} attribute. @@ -1625,7 +1749,7 @@ order to avoid holding information that could become stale as the inferior changed. @node Frame Filter API -@subsubsection Filtering Frames. +@subsubsection Filtering Frames @cindex frame filters api Frame filters are Python objects that manipulate the visibility of a @@ -1777,11 +1901,11 @@ frame filters. Although @code{priority} can be negative, it is recommended practice to assume zero is the lowest priority that a frame filter can be assigned. Frame filters that have the same priority are executed in unsorted order in that priority slot. This -attribute is mandatory. +attribute is mandatory. 100 is a good default priority. @end defvar @node Frame Decorator API -@subsubsection Decorating Frames. +@subsubsection Decorating Frames @cindex frame decorator api Frame decorators are sister objects to frame filters (@pxref{Frame @@ -1805,6 +1929,13 @@ boilerplate code to decorate the content of a @code{gdb.Frame}. It is recommended that other frame decorators inherit and extend this object, and only to override the methods needed. +@tindex gdb.FrameDecorator +@code{FrameDecorator} is defined in the Python module +@code{gdb.FrameDecorator}, so your code can import it like: +@smallexample +from gdb.FrameDecorator import FrameDecorator +@end smallexample + @defun FrameDecorator.elided (self) The @code{elided} method groups frames together in a hierarchical @@ -2283,17 +2414,40 @@ return @code{None}. The code in @value{GDBN} that enables writing unwinders in Python uses this object to return frame's ID and previous frame registers when @value{GDBN} core asks for them. +An unwinder should do as little work as possible. Some otherwise +innocuous operations can cause problems (even crashes, as this code is +not not well-hardened yet). For example, making an inferior call from +an unwinder is unadvisable, as an inferior call will reset +@value{GDBN}'s stack unwinding process, potentially causing re-entrant +unwinding. + @subheading Unwinder Input An object passed to an unwinder (a @code{gdb.PendingFrame} instance) provides a method to read frame's registers: @defun PendingFrame.read_register (reg) -This method returns the contents of the register @var{regn} in the +This method returns the contents of the register @var{reg} in the frame as a @code{gdb.Value} object. @var{reg} can be either a register number or a register name; the values are platform-specific. They are usually found in the corresponding -@file{@var{platform}-tdep.h} file in the @value{GDBN} source tree. +@file{@var{platform}-tdep.h} file in the @value{GDBN} source tree. If +@var{reg} does not name a register for the current architecture, this +method will throw an exception. + +Note that this method will always return a @code{gdb.Value} for a +valid register name. This does not mean that the value will be valid. +For example, you may request a register that an earlier unwinder could +not unwind---the value will be unavailable. Instead, the +@code{gdb.Value} returned from this method will be lazy; that is, its +underlying bits will not be fetched until it is first used. So, +attempting to use such a value will cause an exception at the point of +use. + +The type of the returned @code{gdb.Value} depends on the register and +the architecture. It is common for registers to have a scalar type, +like @code{long long}; but many other types are possible, such as +pointer, pointer-to-function, floating point or vector types. @end defun It also provides a factory method to create a @code{gdb.UnwindInfo} @@ -2306,18 +2460,32 @@ using one of functions provided by @value{GDBN}. @var{frame_id}'s attributes determine which function will be used, as follows: @table @code -@item sp, pc, special -@code{frame_id_build_special (@var{frame_id}.sp, @var{frame_id}.pc, @var{frame_id}.special)} - @item sp, pc -@code{frame_id_build (@var{frame_id}.sp, @var{frame_id}.pc)} +The frame is identified by the given stack address and PC. The stack +address must be chosen so that it is constant throughout the lifetime +of the frame, so a typical choice is the value of the stack pointer at +the start of the function---in the DWARF standard, this would be the +``Call Frame Address''. -This is the most common case. +This is the most common case by far. The other cases are documented +for completeness but are only useful in specialized situations. + +@item sp, pc, special +The frame is identified by the stack address, the PC, and a +``special'' address. The special address is used on architectures +that can have frames that do not change the stack, but which are still +distinct, for example the IA-64, which has a second stack for +registers. Both @var{sp} and @var{special} must be constant +throughout the lifetime of the frame. @item sp -@code{frame_id_build_wild (@var{frame_id}.sp)} +The frame is identified by the stack address only. Any other stack +frame with a matching @var{sp} will be considered to match this frame. +Inside gdb, this is called a ``wild frame''. You will never need +this. @end table -The attribute values should be @code{gdb.Value} + +Each attribute value should be an instance of @code{gdb.Value}. @end defun @@ -2350,7 +2518,7 @@ class FrameId(object): class MyUnwinder(Unwinder): def __init__(....): - supe(MyUnwinder, self).__init___() + super(MyUnwinder, self).__init___() def __call__(pending_frame): if not : @@ -2791,6 +2959,10 @@ Boolean signaling whether the inferior was created using `attach', or started by @value{GDBN} itself. @end defvar +@defvar Inferior.progspace +The inferior's program space. @xref{Progspaces In Python}. +@end defvar + A @code{gdb.Inferior} object has the following methods: @defun Inferior.is_valid () @@ -2807,6 +2979,14 @@ when it is called. If there are no valid threads, the method will return an empty tuple. @end defun +@defun Inferior.architecture () +Return the @code{gdb.Architecture} (@pxref{Architectures In Python}) +for this inferior. This represents the architecture of the inferior +as a whole. Some platforms can have multiple architectures in a +single address space, so this may not match the architecture of a +particular frame (@pxref{Frames In Python}). +@end defun + @findex Inferior.read_memory @defun Inferior.read_memory (address, length) Read @var{length} addressable memory units from the inferior, starting at @@ -2837,11 +3017,16 @@ containing the address where the pattern was found, or @code{None} if the pattern could not be found. @end defun +@findex Inferior.thread_from_handle @findex Inferior.thread_from_thread_handle -@defun Inferior.thread_from_thread_handle (thread_handle) -Return the thread object corresponding to @var{thread_handle}, a thread +@defun Inferior.thread_from_handle (handle) +Return the thread object corresponding to @var{handle}, a thread library specific data structure such as @code{pthread_t} for pthreads library implementations. + +The function @code{Inferior.thread_from_thread_handle} provides +the same functionality, but use of @code{Inferior.thread_from_thread_handle} +is deprecated. @end defun @node Events In Python @@ -2980,9 +3165,16 @@ A reference to the program space (@code{gdb.Progspace}) whose objfile list has been cleared. @xref{Progspaces In Python}. @end defvar -@item events.inferior_call_pre -Emits @code{gdb.InferiorCallPreEvent} which indicates that a function in -the inferior is about to be called. +@item events.inferior_call +Emits events just before and after a function in the inferior is +called by @value{GDBN}. Before an inferior call, this emits an event +of type @code{gdb.InferiorCallPreEvent}, and after an inferior call, +this emits an event of type @code{gdb.InferiorCallPostEvent}. + +@table @code +@tindex gdb.InferiorCallPreEvent +@item @code{gdb.InferiorCallPreEvent} +Indicates that a function in the inferior is about to be called. @defvar InferiorCallPreEvent.ptid The thread in which the call will be run. @@ -2992,9 +3184,9 @@ The thread in which the call will be run. The location of the function to be called. @end defvar -@item events.inferior_call_post -Emits @code{gdb.InferiorCallPostEvent} which indicates that a function in -the inferior has returned. +@tindex gdb.InferiorCallPostEvent +@item @code{gdb.InferiorCallPostEvent} +Indicates that a function in the inferior has just been called. @defvar InferiorCallPostEvent.ptid The thread in which the call was run. @@ -3003,6 +3195,7 @@ The thread in which the call was run. @defvar InferiorCallPostEvent.address The location of the function that was called. @end defvar +@end table @item events.memory_changed Emits @code{gdb.MemoryChangedEvent} which indicates that the memory of the @@ -3100,6 +3293,9 @@ This function returns the thread object for the selected thread. If there is no selected thread, this will return @code{None}. @end defun +To get the list of threads for an inferior, use the @code{Inferior.threads()} +method. @xref{Inferiors In Python} + A @code{gdb.InferiorThread} object has the following attributes: @defvar InferiorThread.name @@ -3163,6 +3359,14 @@ Return a Boolean indicating whether the thread is running. Return a Boolean indicating whether the thread is exited. @end defun +@defun InferiorThread.handle () +Return the thread object's handle, represented as a Python @code{bytes} +object. A @code{gdb.Value} representation of the handle may be +constructed via @code{gdb.Value(bufobj, type)} where @var{bufobj} is +the Python @code{bytes} representation of the handle and @var{type} is +a @code{gdb.Type} for the handle type. +@end defun + @node Recordings In Python @subsubsection Recordings In Python @cindex recordings in python @@ -3767,6 +3971,30 @@ example, @kbd{set foo off}). The @code{value} attribute has already been populated with the new value and may be used in output. This method must return a string. If the returned string is not empty, @value{GDBN} will present it to the user. + +If this method raises the @code{gdb.GdbError} exception +(@pxref{Exception Handling}), then @value{GDBN} will print the +exception's string and the @code{set} command will fail. Note, +however, that the @code{value} attribute will not be reset in this +case. So, if your parameter must validate values, it should store the +old value internally and reset the exposed value, like so: + +@smallexample +class ExampleParam (gdb.Parameter): + def __init__ (self, name): + super (ExampleParam, self).__init__ (name, + gdb.COMMAND_DATA, + gdb.PARAM_BOOLEAN) + self.value = True + self.saved_value = True + def validate(self): + return False + def get_set_string (self): + if not self.validate(): + self.value = self.saved_value + raise gdb.GdbError('Failed to validate') + self.saved_value = self.value +@end smallexample @end defun @defun Parameter.get_show_string (self, svalue) @@ -3942,7 +4170,9 @@ The following progspace-related functions are available in the @findex gdb.current_progspace @defun gdb.current_progspace () This function returns the program space of the currently selected inferior. -@xref{Inferiors and Programs}. +@xref{Inferiors and Programs}. This is identical to +@code{gdb.selected_inferior().progspace} (@pxref{Inferiors In Python}) and is +included for historical compatibility. @end defun @findex gdb.progspaces @@ -3976,6 +4206,45 @@ The @code{frame_filters} attribute is a dictionary of frame filter objects. @xref{Frame Filter API}, for more information. @end defvar +A program space has the following methods: + +@findex Progspace.block_for_pc +@defun Progspace.block_for_pc (pc) +Return the innermost @code{gdb.Block} containing the given @var{pc} +value. If the block cannot be found for the @var{pc} value specified, +the function will return @code{None}. +@end defun + +@findex Progspace.find_pc_line +@defun Progspace.find_pc_line (pc) +Return the @code{gdb.Symtab_and_line} object corresponding to the +@var{pc} value. @xref{Symbol Tables In Python}. If an invalid value +of @var{pc} is passed as an argument, then the @code{symtab} and +@code{line} attributes of the returned @code{gdb.Symtab_and_line} +object will be @code{None} and 0 respectively. +@end defun + +@findex Progspace.is_valid +@defun Progspace.is_valid () +Returns @code{True} if the @code{gdb.Progspace} object is valid, +@code{False} if not. A @code{gdb.Progspace} object can become invalid +if the program space file it refers to is not referenced by any +inferior. All other @code{gdb.Progspace} methods will throw an +exception if it is invalid at the time the method is called. +@end defun + +@findex Progspace.objfiles +@defun Progspace.objfiles () +Return a sequence of all the objfiles referenced by this program +space. @xref{Objfiles In Python}. +@end defun + +@findex Progspace.solib_name +@defun Progspace.solib_name (address) +Return the name of the shared library holding the given @var{address} +as a string, or @code{None}. +@end defun + One may add arbitrary attributes to @code{gdb.Progspace} objects in the usual Python way. This is useful if, for example, one needs to do some extra record keeping @@ -4045,8 +4314,10 @@ this function returns @code{None}. @findex gdb.objfiles @defun gdb.objfiles () -Return a sequence of all the objfiles current known to @value{GDBN}. -@xref{Objfiles In Python}. +Return a sequence of objfiles referenced by the current program space. +@xref{Objfiles In Python}, and @ref{Progspaces In Python}. This is identical +to @code{gdb.selected_inferior().progspace.objfiles()} and is included for +historical compatibility. @end defun @findex gdb.lookup_objfile @@ -4173,8 +4444,25 @@ searches then this function can be used to add a debug info file from a different place. @end defun +@defun Objfile.lookup_global_symbol (name @r{[}, domain@r{]}) +Search for a global symbol named @var{name} in this objfile. Optionally, the +search scope can be restricted with the @var{domain} argument. +The @var{domain} argument must be a domain constant defined in the @code{gdb} +module and described in @ref{Symbols In Python}. This function is similar to +@code{gdb.lookup_global_symbol}, except that the search is limited to this +objfile. + +The result is a @code{gdb.Symbol} object or @code{None} if the symbol +is not found. +@end defun + +@defun Objfile.lookup_static_symbol (name @r{[}, domain@r{]}) +Like @code{Objfile.lookup_global_symbol}, but searches for a global +symbol with static linkage named @var{name} in this objfile. +@end defun + @node Frames In Python -@subsubsection Accessing inferior stack frames from Python. +@subsubsection Accessing inferior stack frames from Python @cindex frames in python When the debugged program stops, @value{GDBN} is able to analyze its call @@ -4376,7 +4664,7 @@ Stack}. @end defun @node Blocks In Python -@subsubsection Accessing blocks from Python. +@subsubsection Accessing blocks from Python @cindex blocks in python @tindex gdb.Block @@ -4437,7 +4725,12 @@ A @code{gdb.Block} is iterable. The iterator returns the symbols should not assume that a specific block object will always contain a given symbol, since changes in @value{GDBN} features and infrastructure may cause symbols move across blocks in a symbol -table. +table. You can also use Python's @dfn{dictionary syntax} to access +variables in this block, e.g.: + +@smallexample +symbol = some_block['variable'] # symbol is of type gdb.Symbol +@end smallexample The following block-related functions are available in the @code{gdb} module: @@ -4446,7 +4739,9 @@ module: @defun gdb.block_for_pc (pc) Return the innermost @code{gdb.Block} containing the given @var{pc} value. If the block cannot be found for the @var{pc} value specified, -the function will return @code{None}. +the function will return @code{None}. This is identical to +@code{gdb.current_progspace().block_for_pc(pc)} and is included for +historical compatibility. @end defun A @code{gdb.Block} object has the following methods: @@ -4509,7 +4804,7 @@ writable. @end defvar @node Symbols In Python -@subsubsection Python representation of Symbols. +@subsubsection Python representation of Symbols @cindex symbols in python @tindex gdb.Symbol @@ -4560,6 +4855,55 @@ The result is a @code{gdb.Symbol} object or @code{None} if the symbol is not found. @end defun +@findex gdb.lookup_static_symbol +@defun gdb.lookup_static_symbol (name @r{[}, domain@r{]}) +This function searches for a global symbol with static linkage by name. +The search scope can be restricted to by the domain argument. + +@var{name} is the name of the symbol. It must be a string. +The optional @var{domain} argument restricts the search to the domain type. +The @var{domain} argument must be a domain constant defined in the @code{gdb} +module and described later in this chapter. + +The result is a @code{gdb.Symbol} object or @code{None} if the symbol +is not found. + +Note that this function will not find function-scoped static variables. To look +up such variables, iterate over the variables of the function's +@code{gdb.Block} and check that @code{block.addr_class} is +@code{gdb.SYMBOL_LOC_STATIC}. + +There can be multiple global symbols with static linkage with the same +name. This function will only return the first matching symbol that +it finds. Which symbol is found depends on where @value{GDBN} is +currently stopped, as @value{GDBN} will first search for matching +symbols in the current object file, and then search all other object +files. If the application is not yet running then @value{GDBN} will +search all object files in the order they appear in the debug +information. +@end defun + +@findex gdb.lookup_static_symbols +@defun gdb.lookup_static_symbols (name @r{[}, domain@r{]}) +Similar to @code{gdb.lookup_static_symbol}, this function searches for +global symbols with static linkage by name, and optionally restricted +by the domain argument. However, this function returns a list of all +matching symbols found, not just the first one. + +@var{name} is the name of the symbol. It must be a string. +The optional @var{domain} argument restricts the search to the domain type. +The @var{domain} argument must be a domain constant defined in the @code{gdb} +module and described later in this chapter. + +The result is a list of @code{gdb.Symbol} objects which could be empty +if no matching symbols were found. + +Note that this function will not find function-scoped static variables. To look +up such variables, iterate over the variables of the function's +@code{gdb.Block} and check that @code{block.addr_class} is +@code{gdb.SYMBOL_LOC_STATIC}. +@end defun + A @code{gdb.Symbol} object has the following attributes: @defvar Symbol.type @@ -4664,18 +5008,13 @@ This domain holds struct, union and enum type names. @item gdb.SYMBOL_LABEL_DOMAIN This domain contains names of labels (for gotos). -@vindex SYMBOL_VARIABLES_DOMAIN -@item gdb.SYMBOL_VARIABLES_DOMAIN -This domain holds a subset of the @code{SYMBOLS_VAR_DOMAIN}; it -contains everything minus functions and types. - -@vindex SYMBOL_FUNCTIONS_DOMAIN -@item gdb.SYMBOL_FUNCTIONS_DOMAIN -This domain contains all functions. +@vindex SYMBOL_MODULE_DOMAIN +@item gdb.SYMBOL_MODULE_DOMAIN +This domain contains names of Fortran module types. -@vindex SYMBOL_TYPES_DOMAIN -@item gdb.SYMBOL_TYPES_DOMAIN -This domain contains all types. +@vindex SYMBOL_COMMON_BLOCK_DOMAIN +@item gdb.SYMBOL_COMMON_BLOCK_DOMAIN +This domain contains names of Fortran common blocks. @end vtable The available address class categories in @code{gdb.Symbol} are represented @@ -4746,10 +5085,15 @@ The value does not actually exist in the program. @vindex SYMBOL_LOC_COMPUTED @item gdb.SYMBOL_LOC_COMPUTED The value's address is a computed location. + +@vindex SYMBOL_LOC_COMPUTED +@item gdb.SYMBOL_LOC_COMPUTED +The value's address is a symbol. This is only used for Fortran common +blocks. @end vtable @node Symbol Tables In Python -@subsubsection Symbol table representation in Python. +@subsubsection Symbol table representation in Python @cindex symbol tables in python @tindex gdb.Symtab @@ -5225,7 +5569,7 @@ is not writable. @end defvar @node Lazy Strings In Python -@subsubsection Python representation of lazy strings. +@subsubsection Python representation of lazy strings @cindex lazy strings in python @tindex gdb.LazyString @@ -5579,13 +5923,12 @@ End a sequence of non-printing characters. For example: @smallexample -substitute_prompt (``frame: \f, - print arguments: \p@{print frame-arguments@}'') +substitute_prompt ("frame: \f, args: \p@{print frame-arguments@}") @end smallexample @exdent will return the string: @smallexample -"frame: main, print arguments: scalars" +"frame: main, args: scalars" @end smallexample @end table