diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-07-23 17:04:34 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-07-23 17:04:34 +0200 |
| commit | 969c2018d2d3741022818e3bc326b57162748053 (patch) | |
| tree | 749bfab88dca10e02bed2fefd6ef43de89d192ab /libs/kstd | |
| parent | 7e3e8672cdd19b19532de216e3df6fc3bae8ed7a (diff) | |
| download | kernel-969c2018d2d3741022818e3bc326b57162748053.tar.xz kernel-969c2018d2d3741022818e3bc326b57162748053.zip | |
kstd: fix gdb pretty printers for pointers
Diffstat (limited to 'libs/kstd')
| -rw-r--r-- | libs/kstd/gdb/__init__.py | 2 | ||||
| -rw-r--r-- | libs/kstd/gdb/smart_pointers.py | 36 |
2 files changed, 34 insertions, 4 deletions
diff --git a/libs/kstd/gdb/__init__.py b/libs/kstd/gdb/__init__.py index 4c4b3415..26a38e3b 100644 --- a/libs/kstd/gdb/__init__.py +++ b/libs/kstd/gdb/__init__.py @@ -6,6 +6,7 @@ from .smart_pointers import ( KstdUniquePtrPrinter, KstdSharedPtrPrinter, KstdObserverPtrPrinter, + KstdWeakPtrPrinter, ) @@ -15,6 +16,7 @@ def build_pretty_printers(): pp.add_printer("string", "^kstd::basic_string<.*>$", KstdStringPrinter) pp.add_printer("unique_ptr", "^kstd::unique_ptr<.*>$", KstdUniquePtrPrinter) pp.add_printer("shared_ptr", "^kstd::shared_ptr<.*>$", KstdSharedPtrPrinter) + pp.add_printer("weak_ptr", "^kstd::weak_ptr<.*>$", KstdWeakPtrPrinter) pp.add_printer("observer_ptr", "^kstd::observer_ptr<.*>$", KstdObserverPtrPrinter) return pp diff --git a/libs/kstd/gdb/smart_pointers.py b/libs/kstd/gdb/smart_pointers.py index 30c90dc1..572fee94 100644 --- a/libs/kstd/gdb/smart_pointers.py +++ b/libs/kstd/gdb/smart_pointers.py @@ -27,21 +27,21 @@ class KstdSharedPtrPrinter(gdb.ValuePrinter): self.__type = val.type.template_argument(0) def to_string(self): - pointer = self.__val["m_storage"] + pointer = self.__val["m_pointer"] control_block = self.__val["m_control_block"] if int(pointer) == 0 or int(control_block) == 0: return f"shared_ptr<{self.__type}> (empty)" - strong_refs = int(control_block["strong_count"]["_M_i"]) - weak_refs = int(control_block["weak_count"]["_M_i"]) + strong_refs = int(control_block["m_strong_count"]["_M_i"]) + weak_refs = int(control_block["m_weak_count"]["_M_i"]) return ( f"shared_ptr<{self.__type}> use count {strong_refs}, weak count {weak_refs}" ) def children(self): - pointer = self.__val["m_storage"] + pointer = self.__val["m_pointer"] control_block = self.__val["m_control_block"] if int(pointer) != 0: @@ -51,6 +51,34 @@ class KstdSharedPtrPrinter(gdb.ValuePrinter): return None +class KstdWeakPtrPrinter(gdb.ValuePrinter): + def __init__(self, val): + self.__val = val + self.__type = val.type.template_argument(0) + + def to_string(self): + pointer = self.__val["m_pointer"] + control_block = self.__val["m_control_block"] + + if int(pointer) == 0 or int(control_block) == 0: + return f"weak_ptr<{self.__type}> (empty)" + + strong_refs = int(control_block["m_strong_count"]["_M_i"]) + weak_refs = int(control_block["m_weak_count"]["_M_i"]) + return ( + f"weak_ptr<{self.__type}> use count {strong_refs}, weak count {weak_refs}" + ) + + def children(self): + pointer = self.__val["m_pointer"] + + if int(pointer) != 0: + yield ("get()", pointer.dereference()) + + def display_hint(self): + return None + + class KstdObserverPtrPrinter(gdb.ValuePrinter): def __init__(self, val): self.__val = val |
