diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-05-07 12:09:27 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-05-07 12:09:27 +0200 |
| commit | 6ac1537d07dffa3482bbccf710a77a7316191c2e (patch) | |
| tree | 3f5d7158932344a29d790ae1705dc6b8607ce6b7 /libs/kstd/gdb/vector.py | |
| parent | 35829497bdc0e00aa8f32b1855079fa5e2e0b084 (diff) | |
| download | kernel-6ac1537d07dffa3482bbccf710a77a7316191c2e.tar.xz kernel-6ac1537d07dffa3482bbccf710a77a7316191c2e.zip | |
debug: use gdb.ValuePrinter base class
Diffstat (limited to 'libs/kstd/gdb/vector.py')
| -rw-r--r-- | libs/kstd/gdb/vector.py | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/libs/kstd/gdb/vector.py b/libs/kstd/gdb/vector.py index b3604de..69f8ca2 100644 --- a/libs/kstd/gdb/vector.py +++ b/libs/kstd/gdb/vector.py @@ -1,21 +1,28 @@ import gdb -from teachos import TeachOSBasePrinter -class KstdVectorPrinter(TeachOSBasePrinter): +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): - size = int(self.value["m_size"]) - capacity = int(self.value["m_capacity"]) - return f"vector of length {size}, capacity {capacity}" + return f"vector of length {self.__size}, capacity {self.__capacity}" def children(self): - size = int(self.value["m_size"]) - data_pointer = self.value["m_data"] - for i in range(size): + 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 int(self.value["m_size"]) + return self.__size |
