Skip to content

Commit 1e52ef0

Browse files
committed
Support pause and continue requests
1 parent 48bdb79 commit 1e52ef0

File tree

2 files changed

+30
-7
lines changed

2 files changed

+30
-7
lines changed

src/debugger.rs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use anyhow::Result;
1+
use anyhow::{Result, bail};
22
use cairo_vm::vm::vm_core::VirtualMachine;
33

44
use crate::connection::Connection;
@@ -33,8 +33,25 @@ impl CairoDebugger {
3333
}
3434

3535
fn sync(&self, _vm: &VirtualMachine) -> Result<()> {
36-
if let Some(request) = self.connection.try_next_request()? {
37-
self.handle_request(request)?;
36+
if let Some(request) = self.connection.try_next_request()?
37+
&& let HandleResult::Trigger(NextAction::Stop) = self.handle_request(request)?
38+
{
39+
self.process_until_resume()?;
40+
}
41+
42+
Ok(())
43+
}
44+
45+
fn process_until_resume(&self) -> Result<()> {
46+
loop {
47+
let request = self.connection.next_request()?;
48+
match self.handle_request(request)? {
49+
HandleResult::Trigger(NextAction::Resume) => break,
50+
HandleResult::Trigger(NextAction::FinishInit) => {
51+
bail!("Unexpected request received during execution");
52+
}
53+
HandleResult::Handled | HandleResult::Trigger(NextAction::Stop) => {}
54+
}
3855
}
3956

4057
Ok(())

src/debugger/handler.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ use anyhow::{Result, bail};
22
use dap::events::{Event, StoppedEventBody};
33
use dap::prelude::{Command, Request, ResponseBody};
44
use dap::responses::{
5-
EvaluateResponse, ScopesResponse, SetBreakpointsResponse, StackTraceResponse, ThreadsResponse,
6-
VariablesResponse,
5+
ContinueResponse, EvaluateResponse, ScopesResponse, SetBreakpointsResponse, StackTraceResponse,
6+
ThreadsResponse, VariablesResponse,
77
};
88
use dap::types::{Breakpoint, Capabilities, Source, StackFrame, StoppedEventReason, Thread};
99
use tracing::trace;
@@ -16,6 +16,8 @@ pub enum HandleResult {
1616
}
1717

1818
pub enum NextAction {
19+
Resume,
20+
Stop,
1921
FinishInit,
2022
}
2123

@@ -94,7 +96,11 @@ impl CairoDebugger {
9496
Ok(HandleResult::Trigger(NextAction::FinishInit))
9597
}
9698
Command::Continue(_) => {
97-
todo!()
99+
self.connection.send_success(
100+
request,
101+
ResponseBody::Continue(ContinueResponse { all_threads_continued: Some(true) }),
102+
)?;
103+
Ok(HandleResult::Trigger(NextAction::Resume))
98104
}
99105
Command::Launch(_) => {
100106
// Start running the Cairo program here.
@@ -115,7 +121,7 @@ impl CairoDebugger {
115121
hit_breakpoint_ids: None,
116122
}))?;
117123
self.connection.send_success(request, ResponseBody::Pause)?;
118-
Ok(HandleResult::Handled)
124+
Ok(HandleResult::Trigger(NextAction::Stop))
119125
}
120126
Command::SetBreakpoints(args) => {
121127
let mut response_bps = Vec::new();

0 commit comments

Comments
 (0)