import gdb class KstdVectorPrinter(gdb.ValuePrinter): def __init__(self, val): self.__val = val self.__size = int(val["m_size"]) self.__capacity = int(val["m_capacity"]) def to_string(self): return f"vector of length {self.__size}, capacity {self.__capacity}" def children(self): data_pointer = self.__val["m_data"] for i in range(self.__size): yield (f"[{i}]", (data_pointer + i).dereference()) def child(self, n): if n < self.__size: return (f"[{n}]", (self.__val["m_data"] + n).dereference()) else: raise gdb.MemoryError("Index out of range") def display_hint(self): return "array" def num_children(self): return self.__size