aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorJohan Sternerup <johan.sternerup@gmail.com>2024-06-01 18:16:31 +0200
committerTom Tromey <tromey@adacore.com>2024-06-06 10:25:19 -0600
commit42dc1b7f621755ab0587be5e313b4b0918738952 (patch)
tree0b40067880966fc1498d85ab4db8c0c0d17a470b /gdb
parent584dc32c594fa60eba0a3149001e8a844b09f5b9 (diff)
downloadgdb-42dc1b7f621755ab0587be5e313b4b0918738952.zip
gdb-42dc1b7f621755ab0587be5e313b4b0918738952.tar.gz
gdb-42dc1b7f621755ab0587be5e313b4b0918738952.tar.bz2
DAP: Allow gdb exception in exec_and_log to propagate
This allows a request to specify that any gdb exception raised in exec_and_log within the gdb thread to be propagated back to the DAP thread (using the Canceller object as the orchestrator). Approved-By: Tom Tromey <tom@tromey.com>
Diffstat (limited to 'gdb')
-rw-r--r--gdb/python/lib/gdb/dap/events.py4
-rw-r--r--gdb/python/lib/gdb/dap/startup.py9
2 files changed, 8 insertions, 5 deletions
diff --git a/gdb/python/lib/gdb/dap/events.py b/gdb/python/lib/gdb/dap/events.py
index 80a259a..2e6fe98 100644
--- a/gdb/python/lib/gdb/dap/events.py
+++ b/gdb/python/lib/gdb/dap/events.py
@@ -161,7 +161,7 @@ _expected_pause = False
@in_gdb_thread
-def exec_and_expect_stop(cmd, expected_pause=False):
+def exec_and_expect_stop(cmd, expected_pause=False, propagate_exception=False):
"""A wrapper for exec_and_log that sets the continue-suppression flag.
When EXPECTED_PAUSE is True, a stop that looks like a pause (e.g.,
@@ -174,7 +174,7 @@ def exec_and_expect_stop(cmd, expected_pause=False):
# continuing.
_suppress_cont = not expected_pause
# FIXME if the call fails should we clear _suppress_cont?
- exec_and_log(cmd)
+ exec_and_log(cmd, propagate_exception)
# Map from gdb stop reasons to DAP stop reasons. Some of these can't
diff --git a/gdb/python/lib/gdb/dap/startup.py b/gdb/python/lib/gdb/dap/startup.py
index 58591c0..3952447 100644
--- a/gdb/python/lib/gdb/dap/startup.py
+++ b/gdb/python/lib/gdb/dap/startup.py
@@ -204,7 +204,7 @@ def log_stack(level=LogLevel.DEFAULT):
@in_gdb_thread
-def exec_and_log(cmd):
+def exec_and_log(cmd, propagate_exception=False):
"""Execute the gdb command CMD.
If logging is enabled, log the command and its output."""
log("+++ " + cmd)
@@ -212,5 +212,8 @@ def exec_and_log(cmd):
output = gdb.execute(cmd, from_tty=True, to_string=True)
if output != "":
log(">>> " + output)
- except gdb.error:
- log_stack()
+ except gdb.error as e:
+ if propagate_exception:
+ raise DAPException(str(e)) from e
+ else:
+ log_stack()