Re: GDB variants accepting plugins (to the debugger) ?

Simon Marchi via Gdb <[email protected]> Fri, 30 Jan 2026 12:16:29 -0500
Newsgroups gmane.comp.gdb.devel
Message-ID <[email protected]>

On 2026-01-30 12:03, Basile Starynkevitch wrote:
> On Fri, 2026-01-30 at 10:35 -0500, Simon Marchi via Gdb wrote:
>>
>>
>> On 2026-01-30 08:33, Eli Zaretskii via Gdb wrote:
>>>> From: Basile Starynkevitch <[email protected]>
>>>> Cc: [email protected]
>>>> Date: Fri, 30 Jan 2026 14:13:51 +0100
>>>>
>>>> I am using GDB-17.1 on Linux/Debian/x86-64 to debug a C++ coded, GPL licensed, inference engine
>>>>
>>>>
>>>> Is there any GDB variant accepting plugins to the debugger process
>>>> (these could be definitely useful to display C++ data in a nice way, std::vector or std::map instances come to mind immediately).
>>>>
>>>> I do know that GDB accept eg Guile or Python scripts.
>>>> But coding manually a Python or Guile function for every important C++ classes of a software is very time consuming
>>>
>>> Did you read the node "Auto-loading extensions" in the GDB manual?
>>> GDB installs such an auto-loaded extension for standard C++ classes,
>>> which actually uses printers.py provided by GCC/libstdc++
>>> distribution.  But you can use the same mechanism to provide
>>> extensions for your classes, if needed.
>>
>> Here's the file Eli is referring to, for libstdc++:
>>
>> https://gcc.gnu.org/git/?p=gcc.git;a=blob;f=libstdc%2B%2B-v3/python/libstdcxx/v6/printers.py;hb=HEAD
>>
>> And here is the API it uses:
>>
>> https://sourceware.org/gdb/current/onlinedocs/gdb.html/Pretty-Printing.html
>>
>> Simon
> 
> I am (perhaps incorrectly) understanding that I could inside the ELF executable embed some ELF section containing Python code for GDB.
> 
> https://sourceware.org/gdb/current/onlinedocs/gdb.html/dotdebug_005fgdb_005fscripts-section.html
> mention something. I don't understand if the script file name should be an absolute path, or a relative one?
> 
> If the Python script is a relative path, is it relative the working directory of GDB or of the debugged process?
> 
> Does anyone has some concrete toy -preferably opensource- example (for an open source C++ program, on Linux, and how to link that program 
> to add the ELF sections containing Python code for the GDB debugger)?

Putting the scripts (either just the name, or the full contents) in a
section of the executable is one way, but you don't have to.

There are a few ways that GDB can find and auto-load the Python script
associated to a binary.  The simplest is to have a file suffixed with
`-gdb.py` right next to your binary.  So if you have binary `foo`, GDB
will attempt to load the Python script `foo-gdb.py` right next to `foo`.

If that one is not found, then GDB looks for foo-gdb.py in other places.
If you do "set debug auto-load 1" prior to loading your binary, you will
see where GDB attempts to load the scripts from.

For example, on my system, GDB will auto-load

  /usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.34-gdb.py

whenever the libstdc++.so.6.0.34 library gets loaded.

See the doc here:

https://sourceware.org/gdb/current/onlinedocs/gdb.html/objfile_002dgdbdotext-file.html#objfile_002dgdbdotext-file

Simon