mirror of
https://github.com/ziglang/zig.git
synced 2025-12-06 14:23:09 +00:00
stage1: add ZigList gdb pretty printing
This commit is contained in:
parent
ba43492c0e
commit
79bf4003da
39
tools/zig-gdb.py
Normal file
39
tools/zig-gdb.py
Normal file
@ -0,0 +1,39 @@
|
||||
# pretty printing for stage1
|
||||
# put "source /path/to/zig-gdb.py" in ~/.gdbinit to load it automatically
|
||||
|
||||
import gdb.printing
|
||||
|
||||
class ZigListPrinter:
|
||||
def __init__(self, val):
|
||||
self.val = val
|
||||
|
||||
def to_string(self):
|
||||
return '%s of length %d, capacity %d' % (self.val.type.name, int(self.val['length']), int(self.val['capacity']))
|
||||
|
||||
def children(self):
|
||||
def it(ziglist):
|
||||
for i in range(int(ziglist.val['length'])):
|
||||
item = ziglist.val['items'] + i
|
||||
yield ('[%d]' % i, item.dereference())
|
||||
return it(self)
|
||||
|
||||
def display_hint(self):
|
||||
return 'array'
|
||||
|
||||
# handle both Buf and ZigList<char> because Buf* doesn't work otherwise (gdb bug?)
|
||||
class BufPrinter:
|
||||
def __init__(self, val):
|
||||
self.val = val['list'] if val.type.name == 'Buf' else val
|
||||
|
||||
def to_string(self):
|
||||
return self.val['items'].string(length=int(self.val['length']))
|
||||
|
||||
def display_hint(self):
|
||||
return 'string'
|
||||
|
||||
pp = gdb.printing.RegexpCollectionPrettyPrinter('zig')
|
||||
pp.add_printer('Buf', '^Buf$', BufPrinter)
|
||||
pp.add_printer('ZigList<char>', '^ZigList<char>$', BufPrinter)
|
||||
pp.add_printer('ZigList', '^ZigList<.*>$', ZigListPrinter)
|
||||
|
||||
gdb.printing.register_pretty_printer(gdb.current_objfile(), pp)
|
||||
Loading…
x
Reference in New Issue
Block a user