From 8bb78c95a83e6bff837d3e0979a18c94b0c3c091 Mon Sep 17 00:00:00 2001 From: "Justin C. Miller" Date: Wed, 30 Dec 2020 17:49:27 -0800 Subject: [PATCH] [tools] Improve j6stack GDB command Improve the j6stack command in two ways: first, swap the order of the arguments, as depth is much more likely to be changed. Second, on any exception accessing memory in the stack, print the exception and continue instead of failing the whole command. --- assets/debugging/jsix.elf-gdb.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/assets/debugging/jsix.elf-gdb.py b/assets/debugging/jsix.elf-gdb.py index c883396..3619827 100644 --- a/assets/debugging/jsix.elf-gdb.py +++ b/assets/debugging/jsix.elf-gdb.py @@ -16,10 +16,14 @@ class PrintStackCommand(gdb.Command): depth = int(args[1]) for i in range(depth-1, -1, -1): - offset = i * 8 - base_addr = gdb.parse_and_eval(base) - value = gdb.parse_and_eval(f"*(uint64_t*)({base} + {offset})") - print("{:016x} (+{:04x}): {:016x}".format(int(base_addr) + offset, offset, int(value))) + try: + offset = i * 8 + base_addr = gdb.parse_and_eval(base) + value = gdb.parse_and_eval(f"*(uint64_t*)({base} + {offset})") + print("{:016x} (+{:04x}): {:016x}".format(int(base_addr) + offset, offset, int(value))) + except Exception as e: + print(e) + continue class PrintBacktraceCommand(gdb.Command): @@ -29,13 +33,13 @@ class PrintBacktraceCommand(gdb.Command): def invoke(self, arg, from_tty): args = gdb.string_to_argv(arg) - frame = "$rbp" - if len(args) > 0: - frame = args[0] - depth = 30 + if len(args) > 0: + depth = int(args[0]) + + frame = "$rbp" if len(args) > 1: - depth = int(args[1]) + frame = args[1] for i in range(depth-1, -1, -1): ret = gdb.parse_and_eval(f"*(uint64_t*)({frame} + 8)")