dotfiles

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

plugins.py (1345B)


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