class RegexPrinter: def __init__(self, val): self.val = val def to_string(self): # Init s = "{" # Regular shit s += "accepting_state = " + str(self.val['accepting_state']) + ", str = " + str(self.val['str']) + ",\n" # Delta delta_t_ptr_ptr = gdb.lookup_type("delta_t").pointer().pointer() dt = self.val['delta_table'] s += "delta_table = {\n" for i in range(0, dt['element_count']): s += "\t" s += ( str( ( dt['data'].cast(delta_t_ptr_ptr) + i ).dereference().dereference() ) ) s += ",\n" s = s[:-2] s += "\n },\n" # Offshoot offshoot_t_ptr_ptr = gdb.lookup_type("offshoot_t").pointer().pointer() dt = self.val['catch_table'] s += "offshoot_table = {\n" for i in range(0, dt['element_count']): s += "\t" s += ( str( ( dt['data'].cast(offshoot_t_ptr_ptr) + i ).dereference().dereference() ) ) s += ",\n" s = s[:-2] s += "\n }\n" # Closour s += "}" return s def regex_lookup(val): if str(val.type) == 'regex_t' or str(val.type) == 'const regex_t': return RegexPrinter(val) return None gdb.pretty_printers.append(regex_lookup)