From 8c7e1ab98e80c4f224ba2ef7d343534afa237247 Mon Sep 17 00:00:00 2001 From: Orlando Cazalet-Hyams Date: Wed, 13 Aug 2025 13:57:53 +0100 Subject: [PATCH] [Dexter] Add DAP stepNext and stepOut support (#152717) --- .../dexter/dex/debugger/DAP.py | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/cross-project-tests/debuginfo-tests/dexter/dex/debugger/DAP.py b/cross-project-tests/debuginfo-tests/dexter/dex/debugger/DAP.py index 5c27775202fa..06515dd8e0b1 100644 --- a/cross-project-tests/debuginfo-tests/dexter/dex/debugger/DAP.py +++ b/cross-project-tests/debuginfo-tests/dexter/dex/debugger/DAP.py @@ -361,7 +361,10 @@ class DAP(DebuggerBase, metaclass=abc.ABCMeta): # response or the event, since the DAP does not specify an order in which they are sent. May need revisiting # if there turns out to be some odd ordering issues, e.g. if we can receive messages in the order # ["response: continued", "event: stopped", "event: continued"]. - if message["command"] == "continue" and message["success"] == True: + if ( + message["command"] in ["continue", "stepIn", "next", "stepOut"] + and message["success"] == True + ): debugger_state.is_running = True # Reset all state that is invalidated upon program continue. debugger_state.stopped_reason = None @@ -677,14 +680,18 @@ class DAP(DebuggerBase, metaclass=abc.ABCMeta): def _post_step_hook(self): """Hook to be executed after completing a step request.""" - def step_in(self): + def _step(self, step_request_string): self._flush_breakpoints() step_req_id = self.send_message( - self.make_request("stepIn", {"threadId": self._debugger_state.thread}) + self.make_request( + step_request_string, {"threadId": self._debugger_state.thread} + ) ) response = self._await_response(step_req_id) if not response["success"]: - raise DebuggerException("failed to step") + raise DebuggerException( + f"failed to perform debugger action: '{step_request_string}'" + ) # If we've "stepped" to a breakpoint, then continue to hit the breakpoint properly. # NB: This is an issue that only seems relevant to LLDB, but is also harmless outside of LLDB; if it turns out # to cause issues for other debuggers, we can move it to a post-step hook. @@ -692,6 +699,15 @@ class DAP(DebuggerBase, metaclass=abc.ABCMeta): time.sleep(0.001) self._post_step_hook() + def step_in(self): + self._step("stepIn") + + def step_next(self): + self._step("next") + + def step_out(self): + self._step("stepOut") + def go(self) -> ReturnCode: self._flush_breakpoints() continue_req_id = self.send_message(