precise printer injection
This commit is contained in:
parent
ea0c1811c5
commit
b4d329d69f
1 changed files with 14 additions and 5 deletions
|
|
@ -522,11 +522,20 @@ def makematcher(klass):
|
||||||
printErrorOnce(typeName, "No matcher for type '" + typeName + "': " + str(e) + "\n")
|
printErrorOnce(typeName, "No matcher for type '" + typeName + "': " + str(e) + "\n")
|
||||||
return matcher
|
return matcher
|
||||||
|
|
||||||
|
def register_nim_pretty_printers_for_object(objfile):
|
||||||
|
nimMainSym = gdb.lookup_global_symbol("NimMain", gdb.SYMBOL_FUNCTIONS_DOMAIN)
|
||||||
|
if nimMainSym and nimMainSym.symtab.objfile == objfile:
|
||||||
|
print("set Nim pretty printers for ", objfile.filename)
|
||||||
|
|
||||||
|
objfile.type_printers = [NimTypePrinter()]
|
||||||
|
objfile.pretty_printers = [makematcher(var) for var in list(globals().values()) if hasattr(var, 'pattern')]
|
||||||
|
|
||||||
|
# Register pretty printers for all objfiles that are already loaded.
|
||||||
|
for old_objfile in gdb.objfiles():
|
||||||
|
register_nim_pretty_printers_for_object(old_objfile)
|
||||||
|
|
||||||
|
# Register an event handler to register nim pretty printers for all future objfiles.
|
||||||
def new_object_handler(event):
|
def new_object_handler(event):
|
||||||
nimobjfile = gdb.current_objfile() or gdb.objfiles()[0]
|
register_nim_pretty_printers_for_object(event.new_objfile)
|
||||||
nimobjfile.type_printers = []
|
|
||||||
nimobjfile.type_printers = [NimTypePrinter()]
|
|
||||||
nimobjfile.pretty_printers = []
|
|
||||||
nimobjfile.pretty_printers.extend([makematcher(var) for var in list(globals().values()) if hasattr(var, 'pattern')])
|
|
||||||
|
|
||||||
gdb.events.new_objfile.connect(new_object_handler)
|
gdb.events.new_objfile.connect(new_object_handler)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue