import gdb; import re; class VectorWrapperPrinter: def __init__(self, parVal): self.val = parVal def to_string(self): sz = int(self.val["m_wrapped"].type.template_argument(1)); arr_vals = ", ".join(str(self.val["m_wrapped"]["_M_elems"][z]) for z in range(0, sz)); return "<{0}>".format(arr_vals); def vector_wrapper_match(parVal): tag_value = str(parVal.type.strip_typedefs().tag); if tag_value == None: return None; reg_vecbase = re.compile("^vwr::implem::VecBase<.*>$"); reg_vec = re.compile("^vwr::Vec<.*>$"); if reg_vecbase.match(tag_value) or reg_vec.match(tag_value): return VectorWrapperPrinter(parVal); else: return None; def display_hint(self): return "array"; def register_printers(parObjfile): parObjfile.pretty_printers.append(vector_wrapper_match); # (gdb) p parFrom # $1 = (const dk::Viewport<2u>::coords &) @0x7fffffffb810: { >> = {m_wrapped = {_M_elems = {0, # 0}}}, , 2u>> = {, true>> = {}, }, static unit_x = , static unit_y = } # (gdb) p parFrom # $1 = (const dk::Viewport<2u>::coords &) @0x7fffffffb810: { >> = # {0, 0}, , 2u>> = {, true>> = {}, }, static unit_x = , static unit_y = }