aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Newsome <tim@sifive.com>2022-01-06 09:29:44 -0800
committerGitHub <noreply@github.com>2022-01-06 09:29:44 -0800
commitcf04274f50621fd9ef9147793cca6dd1657985c7 (patch)
tree43294b7097490943d45c5e86aa5e1dfe5d7e75a6
parent0266ef52ea94554bf71c741b963461b21ac82dba (diff)
downloadriscv-tests-cf04274f50621fd9ef9147793cca6dd1657985c7.zip
riscv-tests-cf04274f50621fd9ef9147793cca6dd1657985c7.tar.gz
riscv-tests-cf04274f50621fd9ef9147793cca6dd1657985c7.tar.bz2
Add gdb.interact() for debug tests. (#367)
This feature lets you easily interact with the gdb after the test has run to a certain point.
-rw-r--r--debug/testlib.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/debug/testlib.py b/debug/testlib.py
index 25ff5be..bb4ac25 100644
--- a/debug/testlib.py
+++ b/debug/testlib.py
@@ -681,6 +681,24 @@ class Gdb:
self.active_child.expect(r"\(gdb\)", timeout=timeout)
return self.active_child.before.strip().decode("utf-8", errors="ignore")
+ def interact(self):
+ """Call this from a test at a point where you just want to interact with
+ gdb directly. This is useful when you're debugging a problem and just
+ want to take over at a certain point in the test."""
+ saved_stdout = sys.stdout
+ sys.stdout = real_stdout
+ try:
+ print()
+ print("Interact with the gdb instance created by the test.")
+ print("This is not a true gdb prompt, so things like tab ")
+ print("completion won't work.")
+ while True:
+ command = input("(gdb) ")
+ print(self.command(command))
+ finally:
+ sys.stdout = saved_stdout
+
+
def global_command(self, command):
"""Execute this command on every gdb that we control."""
with PrivateState(self):