[tools] Let GDB quit easily if inferior already quit

I had defined hook-quit in the GDB script to kill the inferior. But if
the inferior had already terminated, then trying to quit GDB only
printed an error. Now hook-quit is smarter and checks if the inferior is
running before trying to kill it.
This commit is contained in:
2024-04-27 15:41:05 -07:00
parent 53f90f5a1d
commit cee4fe67fc

View File

@@ -501,6 +501,18 @@ class LinkedListPrinter:
return self.items return self.items
class IsRunning(gdb.Function):
def __init__(self):
super(IsRunning, self).__init__("is_running")
def invoke(self):
inferior = gdb.selected_inferior()
return \
inferior is not None and \
inferior.is_valid() and \
len(inferior.threads()) > 0
def build_pretty_printers(): def build_pretty_printers():
pp = gdb.printing.RegexpCollectionPrettyPrinter("jsix") pp = gdb.printing.RegexpCollectionPrettyPrinter("jsix")
pp.add_printer("cap table", '^cap_table$', CapTablePrinter) pp.add_printer("cap table", '^cap_table$', CapTablePrinter)
@@ -520,9 +532,10 @@ GetThreadsCommand()
PrintProfilesCommand() PrintProfilesCommand()
DumpLogCommand() DumpLogCommand()
ShowCurrentProcessCommand() ShowCurrentProcessCommand()
IsRunning()
gdb.execute("display/i $rip") gdb.execute("display/i $rip")
gdb.execute("define hook-quit\nkill\nend") gdb.execute("define hook-quit\nif $is_running()\n kill\nend\nend")
if not gdb.selected_inferior().was_attached: if not gdb.selected_inferior().was_attached:
gdb.execute("add-symbol-file build/panic.serial.elf") gdb.execute("add-symbol-file build/panic.serial.elf")
gdb.execute("target remote :1234") gdb.execute("target remote :1234")