GDB command(s) making debugging PostgreSQL somewhat easier
Python
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
LICENSE
README.md
gdbpg.py

README.md

PostgreSQL GDB commands

GDB commands making debugging PostgreSQL internals easier. Currently this provides a single command 'pgprint' that understand the 'Node' structures used internally, can can print them semi-intelligently.

Usage

Copy the gdbpg.py script somewhere, and load it from gdb:

$ gdb ... 
(gdb) source /...path.../gdbpg.py 

and then just use pgprint command to print variables from gdb console. E.g. if plan is pointing to (PlannedStmt *), you may do this:

(gdb) pgprint plan

and you'll get something like this:

          type: CMD_SELECT
      query ID: 0
    param exec: 0
     returning: False
 modifying CTE: False
   can set tag: True
     transient: False
  row security: False
           
     plan tree: 
        -> HashJoin (cost=202.125...342.812 rows=2550 width=16)
                target list:
                        TargetEntry (resno=1 resname="id" ...
                        TargetEntry (resno=2 resname="id" ...
                        TargetEntry (resno=3 resname="id" ...
                        TargetEntry (resno=4 resname="id" ...
                ...

Limitations

Not all Node types are supported (only the subset I recently needed). It's rather trivial to add support for more nodes though - just hack the format_node function a bit.