diff options
| -rw-r--r-- | libs/kstd/gdb/__init__.py | 7 | ||||
| -rw-r--r-- | libs/kstd/gdb/smart_pointers.py | 17 |
2 files changed, 23 insertions, 1 deletions
diff --git a/libs/kstd/gdb/__init__.py b/libs/kstd/gdb/__init__.py index 2d61539..c5d1e53 100644 --- a/libs/kstd/gdb/__init__.py +++ b/libs/kstd/gdb/__init__.py @@ -2,7 +2,11 @@ import gdb.printing from .vector import KstdVectorPrinter from .string import KstdStringPrinter -from .smart_pointers import KstdUniquePtrPrinter, KstdSharedPtrPrinter +from .smart_pointers import ( + KstdUniquePtrPrinter, + KstdSharedPtrPrinter, + KstdObserverPtrPrinter, +) def build_pretty_printers(): @@ -11,6 +15,7 @@ def build_pretty_printers(): pp.add_printer("string", "^kstd::string$", KstdStringPrinter) pp.add_printer("unique_ptr", "^kstd::unique_ptr<.*>$", KstdUniquePtrPrinter) pp.add_printer("shared_ptr", "^kstd::shared_ptr<.*>$", KstdSharedPtrPrinter) + 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 b94d466..f6e8a45 100644 --- a/libs/kstd/gdb/smart_pointers.py +++ b/libs/kstd/gdb/smart_pointers.py @@ -49,3 +49,20 @@ class KstdSharedPtrPrinter(gdb.ValuePrinter): def display_hint(self): return None + + +class KstdObserverPtrPrinter(gdb.ValuePrinter): + def __init__(self, val): + self.__val = val + self.__type = val.type.template_argument(0) + self.__pointer = val["m_ptr"] + + def to_string(self): + return f"{(self.__pointer)}" + + def children(self): + if int(self.__pointer) != 0: + yield ("get()", self.__pointer.dereference()) + + def display_hint(self): + return None |
