dotfiles

personal dotfiles
git clone anongit@rnpnr.xyz:dotfiles.git
Log | Files | Refs | Feed | Submodules

Commit: be647ed24f7abf824548f65109e57a7cf29dff15
Parent: a323cabcd5cd093badea1bd90f22b1396814890c
Author: Randy Palamar
Date:   Wed,  1 Apr 2026 07:28:29 -0600

gdb: slightly more robust handling for gdb's terrible python api

Diffstat:
M.config/gdb/gdbinit | 2++
M.config/gdb/plugins.py | 23++++++++++++++++-------
2 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/.config/gdb/gdbinit b/.config/gdb/gdbinit @@ -4,6 +4,8 @@ source ~/.config/gdb/plugins.py set breakpoint pending on +set disassembly-flavor intel + define hook-quit set confirm off end diff --git a/.config/gdb/plugins.py b/.config/gdb/plugins.py @@ -1,5 +1,12 @@ +import gdb import gdb.printing +def fuck_you_gdb(s, member, default): + try: + return s[member] + except: + return default + class Arena_printer(gdb.ValuePrinter): def __init__(self, val): self.val = val @@ -19,13 +26,15 @@ class Stream_printer(gdb.ValuePrinter): return '{len = %d, data = "%s"}' % (len, str) class str8_printer(gdb.ValuePrinter): - def __init__(self, val): - self.val = val - - def to_string(self): - len = self.val["len"] - str = self.val["data"].string(length=min(max(len, 0), 64)) - return '{len = %d, data = "%s"}' % (len, str) + def __init__(self, val): + self.val = val + def to_string(self): + len = fuck_you_gdb(self.val, "len", 0); + if len == 0: + len = fuck_you_gdb(self.val, "length", 0) + str = self.val["data"].string(length=min(max(len, 0) 64)) + + return '{length = %d, data = "%s"}' % (len, str) def build_pretty_printer(): pp = gdb.printing.RegexpCollectionPrettyPrinter("rnpnr")