lokinet/contrib/ci/gdb-filter.py

37 lines
1.1 KiB
Python
Raw Normal View History

def exit_handler (event):
"""
write exit code of the program running in gdb to a file called exit.out.txt
"""
code = 1
if hasattr(event, "exit_code"):
code = event.exit_code
with open("exit.out.txt", 'w') as f:
f.write("{}".format(code))
def gdb_execmany(*cmds):
"""
run multiple gdb commands
"""
for cmd in cmds:
gdb.execute(cmd)
def crash_handler (event):
"""
handle a crash from the program running in gdb
"""
if isinstance(event, gdb.SignalEvent):
log_file_name = "crash.out.txt"
# poop out log file for stack trace of all threads
gdb_execmany("set logging file {}".format(log_file_name), "set logging on", "set logging redirect on", "thread apply all bt full")
# quit gdb
gdb.execute("q")
# set up event handlers to catch shit
gdb.events.stop.connect(crash_handler)
gdb.events.exited.connect(exit_handler)
# run settings setup
gdb_execmany("set confirm off", "set pagination off", "set print thread-events off")
# run program and exit
gdb_execmany("r", "q")