aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/.gdbinit57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/.gdbinit b/src/.gdbinit
index 6d7476d5a72..0596188e050 100644
--- a/src/.gdbinit
+++ b/src/.gdbinit
@@ -1264,3 +1264,60 @@ commands
1264 end 1264 end
1265 continue 1265 continue
1266end 1266end
1267
1268
1269# Put the Python code at the end of .gdbinit so that if GDB does not
1270# support Python, GDB will do all the above initializations before
1271# reporting an error.
1272
1273python
1274
1275# Omit pretty-printing in older (pre-7.3) GDBs that lack it.
1276if hasattr(gdb, 'printing'):
1277
1278 class Emacs_Pretty_Printers (gdb.printing.RegexpCollectionPrettyPrinter):
1279 """A collection of pretty-printers. This is like GDB's
1280 RegexpCollectionPrettyPrinter except when printing Lisp_Object."""
1281 def __call__ (self, val):
1282 """Look up the pretty-printer for the provided value."""
1283 type = val.type
1284 typename = type.tag or type.name
1285 basic_type = gdb.types.get_basic_type (type)
1286 basic_typename = basic_type.tag or basic_type.name
1287 for printer in self.subprinters:
1288 if (printer.enabled
1289 and ((printer.regexp == '^Lisp_Object$'
1290 and typename == 'Lisp_Object')
1291 or (basic_typename
1292 and printer.compiled_re.search (basic_typename)))):
1293 return printer.gen_printer (val)
1294 return None
1295
1296 class Lisp_Object_Printer:
1297 "A printer for Lisp_Object values."
1298 def __init__ (self, val):
1299 self.val = val
1300
1301 def to_string (self):
1302 "Yield a string that can be fed back into GDB."
1303 val = self.val
1304 basic_type = gdb.types.get_basic_type (val.type)
1305 if (basic_type.code == gdb.TYPE_CODE_STRUCT
1306 and gdb.types.has_field (basic_type, "i")):
1307 val = val["i"]
1308 # Yield "XIL(N)", where N is a C integer. This helps humans
1309 # distinguish Lisp_Object values from ordinary integers even
1310 # when Lisp_Object is an integer. Perhaps some day the
1311 # pretty-printing could be fancier.
1312 if not val:
1313 return "XIL(0)" # Easier to read than "XIL(0x0)".
1314 return "XIL(0x%x)" % val
1315
1316 def build_pretty_printer ():
1317 pp = Emacs_Pretty_Printers ("Emacs")
1318 pp.add_printer ('Lisp_Object', '^Lisp_Object$', Lisp_Object_Printer)
1319 return pp
1320
1321 gdb.printing.register_pretty_printer (gdb.current_objfile (),
1322 build_pretty_printer (), True)
1323end