[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
scratch/igc bea85a53910: Replace emacs_lldb.py with the one from my fork
From: |
Gerd Moellmann |
Subject: |
scratch/igc bea85a53910: Replace emacs_lldb.py with the one from my fork |
Date: |
Thu, 19 Dec 2024 10:28:35 -0500 (EST) |
branch: scratch/igc
commit bea85a53910d01cb45b9fceb88e3125e253d394d
Author: Gerd Möllmann <gerd@gnu.org>
Commit: Gerd Möllmann <gerd@gnu.org>
Replace emacs_lldb.py with the one from my fork
---
etc/emacs_lldb.py | 40 +++++++++++++++++++++++++++++++++++++++-
1 file changed, 39 insertions(+), 1 deletion(-)
diff --git a/etc/emacs_lldb.py b/etc/emacs_lldb.py
index fa071abb02e..0e0e9a339c0 100644
--- a/etc/emacs_lldb.py
+++ b/etc/emacs_lldb.py
@@ -61,6 +61,7 @@ class Lisp_Object:
"PVEC_TERMINAL": "struct terminal",
"PVEC_WINDOW_CONFIGURATION": "struct save_window_data",
"PVEC_SUBR": "struct Lisp_Subr",
+ "PVEC_PACKAGE": "struct Lisp_Package",
"PVEC_OTHER": "void",
"PVEC_XWIDGET": "void",
"PVEC_XWIDGET_VIEW": "void",
@@ -110,7 +111,7 @@ class Lisp_Object:
& ((1 << GCTYPEBITS) - 1))
if self.lisp_type == "Lisp_Vectorlike":
self.pvec_type = "PVEC_NORMAL_VECTOR"
- vector = self.get_lisp_pointer("struct Lisp_Vector", False)
+ vector = self.get_lisp_pointer("struct Lisp_Vector")
header = vector.GetChildMemberWithName("header");
size = header.GetChildMemberWithName("size");
size = size.GetValueAsUnsigned()
@@ -224,10 +225,40 @@ class Lisp_Object:
return Lisp_Object(name).get_string_data()
return None
+ def is_nil(self):
+ return self.lisp_type == None
+
+ # Get the package of a symbol or None if not a symbol.
+ def get_symbol_package(self):
+ if self.lisp_type == "Lisp_Symbol":
+ u = self.untagged.GetChildMemberWithName("u")
+ s = u.GetChildMemberWithName("s")
+ p = s.GetChildMemberWithName("package")
+ package = Lisp_Object(p)
+ if package.pvec_type:
+ name =
Lisp_Object(package.untagged.GetChildMemberWithName("name"))
+ return name.get_string_data()
+ return None
+
+ def get_package_name(self):
+ name = Lisp_Object(self.untagged.GetChildMemberWithName("name"))
+ return name.get_string_data()
+
# Return a summary string for this object.
def summary(self):
return str(self.untagged)
+ def dump(self, result):
+ if self.lisp_type == "Lisp_Symbol":
+ result.AppendMessage(f"package: {self.get_symbol_package()}")
+ result.AppendMessage(f"name: {self.get_symbol_name()}")
+ elif self.lisp_type == "Lisp_String":
+ result.AppendMessage(str(self.get_string_data()))
+ elif self.lisp_type == "Lisp_Vectorlike" and self.pvec_type ==
"PVEC_PACKAGE":
+ result.AppendMessage(f"package {self.get_package_name()}")
+ else:
+ result.AppendMessage(self.summary())
+
########################################################################
# LLDB Commands
@@ -260,6 +291,12 @@ def xdebug_print(debugger, command, result, internal_dict):
"""Print Lisp_Objects using safe_debug_print()"""
debugger.HandleCommand(f"expr safe_debug_print({command})")
+def xprint(debugger, command, ctx, result, internal_dict):
+ frame = ctx.GetFrame()
+ lisp_obj = Lisp_Object(frame.EvaluateExpression(command))
+ lisp_obj.dump(result)
+
+
########################################################################
# Formatters
@@ -368,6 +405,7 @@ def __lldb_init_module(debugger, internal_dict):
define_command(debugger, xpostmortem)
define_command(debugger, xbacktrace)
define_command(debugger, xdebug_print)
+ define_command(debugger, xprint)
define_type_summary(debugger, "Lisp_Object", type_summary_Lisp_Object)
define_type_synthetic(debugger, "Lisp_Object", Lisp_Object_Provider)
enable_type_category(debugger, "Emacs")
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- scratch/igc bea85a53910: Replace emacs_lldb.py with the one from my fork,
Gerd Moellmann <=