diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-05-04 12:01:01 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-05-04 12:01:01 +0200 |
| commit | 78e42a1b6e0a857865be1e60f82871ac13c91bb1 (patch) | |
| tree | 34cc53f3367b660320a0be6aa1c0c451135f83e0 /scripts | |
| parent | 1246e00478fb5ab2a357de17066fd8738395d9f1 (diff) | |
| download | kernel-78e42a1b6e0a857865be1e60f82871ac13c91bb1.tar.xz kernel-78e42a1b6e0a857865be1e60f82871ac13c91bb1.zip | |
debug: improve pretty printer implementations
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/gdb/pretty_printers.py | 6 | ||||
| -rw-r--r-- | scripts/gdb/teachos/__init__.py | 30 |
2 files changed, 35 insertions, 1 deletions
diff --git a/scripts/gdb/pretty_printers.py b/scripts/gdb/pretty_printers.py index 83db491..c209328 100644 --- a/scripts/gdb/pretty_printers.py +++ b/scripts/gdb/pretty_printers.py @@ -4,7 +4,11 @@ import gdb import importlib.util script_path = os.path.abspath(__file__) -repo_root = os.path.dirname(os.path.dirname(os.path.dirname(script_path))) +script_root = os.path.dirname(script_path) +repo_root = os.path.dirname(os.path.dirname(script_root)) + +if script_root not in sys.path: + sys.path.insert(0, script_root) components = { "kstd": "libs/kstd/gdb", diff --git a/scripts/gdb/teachos/__init__.py b/scripts/gdb/teachos/__init__.py new file mode 100644 index 0000000..d90d6ad --- /dev/null +++ b/scripts/gdb/teachos/__init__.py @@ -0,0 +1,30 @@ +import gdb + + +class TeachOSBasePrinter: + def __init__(self, val): + self.__val = val + + @property + def value(self): + return self.__val + + def children(self): + real_type = self.value.type.strip_typedefs() + + if real_type.code not in (gdb.TYPE_CODE_STRUCT, gdb.TYPE_CODE_UNION): + return + + for field in real_type.fields(): + if field.artificial: + continue + + try: + if field.is_base_class: + yield (field.name, self.value.cast(field.type)) + elif field.name is not None: + yield (field.name, self.value[field.name]) + else: + yield ("<anonymous>", self.value[field]) + except gdb.error: + yield (str(field.name), "<unreadable>") |
