import gdb from teachos import format_size class KapiMemoryChunkPrinter(gdb.ValuePrinter): def __init__(self, val: gdb.Value, typename="chunk"): self.__val = val try: self.__number = int(val["m_number"]) except gdb.error: self.__number = "" try: self.__size = int(gdb.parse_and_eval(f"{val.type.name}::size")["value"]) except gdb.error: self.__size = "" self.__typename = typename def to_string(self): return f"{self.__typename} {self.__number} of size {format_size(self.__size)}" def children(self): yield ("number", self.__number) yield ("size", self.__size) def display_hint(self): return None class KapiMemoryFramePrinter(KapiMemoryChunkPrinter): def __init__(self, val): super().__init__(val, "frame") class KapiMemoryPagePrinter(KapiMemoryChunkPrinter): def __init__(self, val): super().__init__(val, "page")