diff --git a/crates/dap_adapters/src/gdb.rs b/crates/dap_adapters/src/gdb.rs index 3187a00fa0..5bc2223f75 100644 --- a/crates/dap_adapters/src/gdb.rs +++ b/crates/dap_adapters/src/gdb.rs @@ -79,7 +79,7 @@ impl DebugAdapter for GdbDebugAdapter { json!({"pid": attach_config.process_id}) } dap::DebugRequestType::Launch(launch_config) => { - json!({"program": launch_config.program, "cwd": launch_config.cwd}) + json!({"program": launch_config.program, "cwd": launch_config.cwd, "stopOnEntry": config.stop_on_entry}) } } } diff --git a/crates/dap_adapters/src/go.rs b/crates/dap_adapters/src/go.rs index 1669bb6011..3db344cdd2 100644 --- a/crates/dap_adapters/src/go.rs +++ b/crates/dap_adapters/src/go.rs @@ -86,12 +86,14 @@ impl DebugAdapter for GoDebugAdapter { match &config.request { dap::DebugRequestType::Attach(attach_config) => { json!({ - "processId": attach_config.process_id + "processId": attach_config.process_id, + "stopOnEntry": config.stop_on_entry, }) } dap::DebugRequestType::Launch(launch_config) => json!({ "program": launch_config.program, "cwd": launch_config.cwd, + "stopOnEntry": config.stop_on_entry, }), } } diff --git a/crates/dap_adapters/src/javascript.rs b/crates/dap_adapters/src/javascript.rs index 4a4b110f88..b5b282435e 100644 --- a/crates/dap_adapters/src/javascript.rs +++ b/crates/dap_adapters/src/javascript.rs @@ -131,6 +131,7 @@ impl DebugAdapter for JsDebugAdapter { match &config.request { DebugRequestType::Attach(attach) => { map.insert("processId".into(), attach.process_id.into()); + map.insert("stopOnEntry".into(), config.stop_on_entry.into()); } DebugRequestType::Launch(launch) => { map.insert("program".into(), launch.program.clone().into()); diff --git a/crates/dap_adapters/src/lldb.rs b/crates/dap_adapters/src/lldb.rs index 5d46f18db0..62b1e59dd9 100644 --- a/crates/dap_adapters/src/lldb.rs +++ b/crates/dap_adapters/src/lldb.rs @@ -78,6 +78,7 @@ impl DebugAdapter for LldbDebugAdapter { match &config.request { DebugRequestType::Attach(attach) => { map.insert("pid".into(), attach.process_id.into()); + map.insert("stopOnEntry".into(), config.stop_on_entry.into()); } DebugRequestType::Launch(launch) => { map.insert("program".into(), launch.program.clone().into()); diff --git a/crates/dap_adapters/src/php.rs b/crates/dap_adapters/src/php.rs index 4ac8b93d76..1390906401 100644 --- a/crates/dap_adapters/src/php.rs +++ b/crates/dap_adapters/src/php.rs @@ -118,6 +118,7 @@ impl DebugAdapter for PhpDebugAdapter { json!({ "program": launch_config.program, "cwd": launch_config.cwd, + "stopOnEntry": config.stop_on_entry, }) } } diff --git a/crates/dap_adapters/src/python.rs b/crates/dap_adapters/src/python.rs index 28cea73477..f691486921 100644 --- a/crates/dap_adapters/src/python.rs +++ b/crates/dap_adapters/src/python.rs @@ -133,6 +133,7 @@ impl DebugAdapter for PythonDebugAdapter { "subProcess": true, "cwd": launch_config.cwd, "redirectOutput": true, + "StopOnEntry": config.stop_on_entry, }) } dap::DebugRequestType::Attach(attach_config) => { diff --git a/crates/debugger_ui/src/session/inert.rs b/crates/debugger_ui/src/session/inert.rs index b614ecd82b..3f51ed75a8 100644 --- a/crates/debugger_ui/src/session/inert.rs +++ b/crates/debugger_ui/src/session/inert.rs @@ -161,6 +161,7 @@ impl Render for InertState { initialize_args: None, args: Default::default(), locator: None, + stop_on_entry: None, }, }); } else { @@ -324,6 +325,7 @@ impl InertState { args: Default::default(), locator: None, tcp_connection: Some(TCPHost::default()), + stop_on_entry: None, }; let _ = self.workspace.update(cx, |workspace, cx| { diff --git a/crates/debugger_ui/src/tests/attach_modal.rs b/crates/debugger_ui/src/tests/attach_modal.rs index b4b6cb6782..723fe8352a 100644 --- a/crates/debugger_ui/src/tests/attach_modal.rs +++ b/crates/debugger_ui/src/tests/attach_modal.rs @@ -90,6 +90,7 @@ async fn test_show_attach_modal_and_select_process( initialize_args: None, tcp_connection: Some(TCPHost::default()), locator: None, + stop_on_entry: None, args: Default::default(), }, vec![ diff --git a/crates/languages/src/rust.rs b/crates/languages/src/rust.rs index 219a9cd0ce..2209f4d72d 100644 --- a/crates/languages/src/rust.rs +++ b/crates/languages/src/rust.rs @@ -637,6 +637,7 @@ impl ContextProvider for RustContextProvider { locator: Some("cargo".into()), tcp_connection: None, initialize_args: None, + stop_on_entry: None, }), command: "cargo".into(), args: vec![ @@ -737,6 +738,7 @@ impl ContextProvider for RustContextProvider { initialize_args: None, locator: Some("cargo".into()), tcp_connection: None, + stop_on_entry: None, }), args: debug_task_args, tags: vec!["rust-main".to_owned()], diff --git a/crates/project/src/debugger/dap_store.rs b/crates/project/src/debugger/dap_store.rs index ed426a39c1..36e0cd18f2 100644 --- a/crates/project/src/debugger/dap_store.rs +++ b/crates/project/src/debugger/dap_store.rs @@ -472,6 +472,7 @@ impl DapStore { tcp_connection: config.tcp_connection.clone(), locator: None, args: Default::default(), + stop_on_entry: config.stop_on_entry, }; #[cfg(any(test, feature = "test-support"))] diff --git a/crates/project/src/project.rs b/crates/project/src/project.rs index 68a76b3faa..1824e91e57 100644 --- a/crates/project/src/project.rs +++ b/crates/project/src/project.rs @@ -1490,6 +1490,7 @@ impl Project { tcp_connection: None, locator: None, args: Default::default(), + stop_on_entry: None, }; let caps = caps.unwrap_or(Capabilities { supports_step_back: Some(false), diff --git a/crates/task/src/debug_format.rs b/crates/task/src/debug_format.rs index ccbd67bfa6..52c067bdad 100644 --- a/crates/task/src/debug_format.rs +++ b/crates/task/src/debug_format.rs @@ -106,6 +106,8 @@ pub struct DebugAdapterConfig { pub locator: Option, /// Args to pass to a debug adapter (only used in locator right now) pub args: Vec, + /// Whether to tell the debug adapter to stop on entry + pub stop_on_entry: Option, } impl From for DebugAdapterConfig { @@ -118,6 +120,7 @@ impl From for DebugAdapterConfig { tcp_connection: def.tcp_connection, locator: def.locator, args: def.args, + stop_on_entry: def.stop_on_entry, } } } @@ -138,6 +141,7 @@ impl TryFrom for DebugTaskDefinition { tcp_connection: def.tcp_connection, locator: def.locator, args: def.args, + stop_on_entry: def.stop_on_entry, }) } } @@ -166,6 +170,7 @@ impl DebugTaskDefinition { initialize_args: self.initialize_args, locator: self.locator, tcp_connection: self.tcp_connection, + stop_on_entry: self.stop_on_entry, }); let label = self.label.clone(); @@ -215,6 +220,8 @@ pub struct DebugTaskDefinition { /// Args to pass to a debug adapter (only used in locator right now) #[serde(skip)] pub args: Vec, + /// Whether to tell the debug adapter to stop on entry + pub stop_on_entry: Option, } /// A group of Debug Tasks defined in a JSON file. diff --git a/crates/task/src/lib.rs b/crates/task/src/lib.rs index 3258728f4b..e5ddcd2ee2 100644 --- a/crates/task/src/lib.rs +++ b/crates/task/src/lib.rs @@ -144,6 +144,7 @@ impl ResolvedTask { tcp_connection: debug_args.tcp_connection, args, locator: debug_args.locator.clone(), + stop_on_entry: debug_args.stop_on_entry, }) } _ => None, diff --git a/crates/task/src/task_template.rs b/crates/task/src/task_template.rs index c78ec93885..0957c2584a 100644 --- a/crates/task/src/task_template.rs +++ b/crates/task/src/task_template.rs @@ -97,6 +97,8 @@ pub struct DebugArgs { pub initialize_args: Option, /// the locator to use pub locator: Option, + /// Whether to tell the debug adapter to stop on entry + pub stop_on_entry: Option, } /// Represents the type of task that is being ran