plugins.py (1193B)
1 import gdb.printing 2 3 class Arena_printer(gdb.ValuePrinter): 4 def __init__(self, val): 5 self.val = val 6 7 def to_string(self): 8 beg = self.val["beg"] 9 end = self.val["end"] 10 return '{capacity: %d}' % (end - beg) 11 12 class Stream_printer(gdb.ValuePrinter): 13 def __init__(self, val): 14 self.val = val 15 16 def to_string(self): 17 len = self.val["widx"] 18 str = self.val["data"].string(length=min(max(len, 0), 64)) 19 return '{len = %d, data = "%s"}' % (len, str) 20 21 class str8_printer(gdb.ValuePrinter): 22 def __init__(self, val): 23 self.val = val 24 25 def to_string(self): 26 len = self.val["len"] 27 str = self.val["data"].string(length=min(max(len, 0), 64)) 28 return '{len = %d, data = "%s"}' % (len, str) 29 30 def build_pretty_printer(): 31 pp = gdb.printing.RegexpCollectionPrettyPrinter("rnpnr") 32 pp.add_printer("s8", "s8", str8_printer) 33 pp.add_printer("str8", "str8", str8_printer) 34 pp.add_printer("Arena", "Arena", Arena_printer) 35 pp.add_printer("Stream", "Stream", Stream_printer) 36 return pp 37 38 gdb.printing.register_pretty_printer( 39 gdb.current_objfile(), build_pretty_printer() 40 )