From 1246e00478fb5ab2a357de17066fd8738395d9f1 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Mon, 4 May 2026 08:20:42 +0200 Subject: debug: split gdb modules --- libs/kstd/gdb/vector.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 libs/kstd/gdb/vector.py (limited to 'libs/kstd/gdb/vector.py') diff --git a/libs/kstd/gdb/vector.py b/libs/kstd/gdb/vector.py new file mode 100644 index 0000000..597ffdc --- /dev/null +++ b/libs/kstd/gdb/vector.py @@ -0,0 +1,22 @@ +import gdb + + +class KstdVectorPrinter: + + def __init__(self, val): + self.val = val + self.type = val.type.template_argument(0) + + def to_string(self): + size = int(self.val["m_size"]) + capacity = int(self.val["m_capacity"]) + return f"kstd::vector of length {size}, capacity {capacity}" + + def children(self): + size = int(self.val["m_size"]) + data_pointer = self.val["m_data"] + for i in range(size): + yield (f"[{i}]", (data_pointer + i).dereference()) + + def display_hint(self): + return "array" -- cgit v1.2.3 From 78e42a1b6e0a857865be1e60f82871ac13c91bb1 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Mon, 4 May 2026 12:01:01 +0200 Subject: debug: improve pretty printer implementations --- libs/kstd/gdb/vector.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) (limited to 'libs/kstd/gdb/vector.py') diff --git a/libs/kstd/gdb/vector.py b/libs/kstd/gdb/vector.py index 597ffdc..4340ef4 100644 --- a/libs/kstd/gdb/vector.py +++ b/libs/kstd/gdb/vector.py @@ -1,20 +1,21 @@ import gdb +from teachos import TeachOSBasePrinter -class KstdVectorPrinter: - +class KstdVectorPrinter(TeachOSBasePrinter): def __init__(self, val): - self.val = val - self.type = val.type.template_argument(0) + super().__init__(val) + self.__type = val.type.template_argument(0) def to_string(self): - size = int(self.val["m_size"]) - capacity = int(self.val["m_capacity"]) - return f"kstd::vector of length {size}, capacity {capacity}" + size = int(self.value["m_size"]) + capacity = int(self.value["m_capacity"]) + return f"kstd::vector<{self.__type}> (size={size}, capacity={capacity})" def children(self): - size = int(self.val["m_size"]) - data_pointer = self.val["m_data"] + yield from super().children() + size = int(self.value["m_size"]) + data_pointer = self.value["m_data"] for i in range(size): yield (f"[{i}]", (data_pointer + i).dereference()) -- cgit v1.2.3 From 35829497bdc0e00aa8f32b1855079fa5e2e0b084 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Thu, 7 May 2026 11:41:31 +0200 Subject: debug: align kstd printers with std ones --- libs/kstd/gdb/vector.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'libs/kstd/gdb/vector.py') diff --git a/libs/kstd/gdb/vector.py b/libs/kstd/gdb/vector.py index 4340ef4..b3604de 100644 --- a/libs/kstd/gdb/vector.py +++ b/libs/kstd/gdb/vector.py @@ -3,17 +3,12 @@ from teachos import TeachOSBasePrinter class KstdVectorPrinter(TeachOSBasePrinter): - def __init__(self, val): - super().__init__(val) - self.__type = val.type.template_argument(0) - def to_string(self): size = int(self.value["m_size"]) capacity = int(self.value["m_capacity"]) - return f"kstd::vector<{self.__type}> (size={size}, capacity={capacity})" + return f"vector of length {size}, capacity {capacity}" def children(self): - yield from super().children() size = int(self.value["m_size"]) data_pointer = self.value["m_data"] for i in range(size): @@ -21,3 +16,6 @@ class KstdVectorPrinter(TeachOSBasePrinter): def display_hint(self): return "array" + + def num_children(self): + return int(self.value["m_size"]) -- cgit v1.2.3 From 6ac1537d07dffa3482bbccf710a77a7316191c2e Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Thu, 7 May 2026 12:09:27 +0200 Subject: debug: use gdb.ValuePrinter base class --- libs/kstd/gdb/vector.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) (limited to 'libs/kstd/gdb/vector.py') 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 -- cgit v1.2.3 From 2cb7a2575e8eb46df36dae108fae661b91801540 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Sun, 10 May 2026 12:18:01 +0200 Subject: debug: add pretty printer for boot modules registry --- libs/kstd/gdb/vector.py | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) (limited to 'libs/kstd/gdb/vector.py') diff --git a/libs/kstd/gdb/vector.py b/libs/kstd/gdb/vector.py index 69f8ca2..f11e064 100644 --- a/libs/kstd/gdb/vector.py +++ b/libs/kstd/gdb/vector.py @@ -2,24 +2,37 @@ import gdb class KstdVectorPrinter(gdb.ValuePrinter): - def __init__(self, val): + class Iterator: + def __init__(self, begin: gdb.Value, end: gdb.Value): + self._item = begin + self._end = end + self._count = 0 + + def __iter__(self): + return self + + def __next__(self): + count = self._count + self._count = count + 1 + + if self._item == self._end: + raise StopIteration + + element = self._item.dereference() + self._item = self._item + 1 + return (f"[{count}]", element) + + def __init__(self, val: gdb.Value): self.__val = val self.__size = int(val["m_size"]) self.__capacity = int(val["m_capacity"]) + self.__data = val["m_data"] 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") + return self.Iterator(self.__data, self.__data + self.__size) def display_hint(self): return "array" -- cgit v1.2.3