diff --git a/crates/dap_adapters/src/gdb.rs b/crates/dap_adapters/src/gdb.rs index 3187a00fa0664eb7b520b89c7b9098011aa96133..5bc2223f75b758161c9b48f3fa1873e272d01b1c 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 1669bb60113f6614cf2fe619c7d1b3a54e564515..3db344cdd253aba8759f927a9d4da229c28dcd29 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 4a4b110f889475ebf818ca290185a0b24b71775a..b5b282435ec9d5ec6ecd27c62bac03c6de07a57b 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 5d46f18db04c1f7acaec76a820d1130aed7ba50b..62b1e59dd915073022d814aefd147984bf143974 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 4ac8b93d76bdcc4c1b49ae7fcfcd30280a067a3b..1390906401adf7ab32e97817785a897063869019 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 28cea73477f2c36f15a505e6755be1ab1e2439c5..f6914869219b46097945561a37aed7d53ed218c8 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 b614ecd82b3c595d658234cf745230c92edccff9..3f51ed75a8e2783ba2f4dd761cc8961064f0673d 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 b4b6cb678281a3e9b575a51373268f9b0e6d43db..723fe8352a55e951edd4d6ffc3b0088bd0fa890e 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 219a9cd0ce3bfba287bb57c0fea3c0215edcb4ae..2209f4d72d4d4d81fa0f34ab8ebec7a645736582 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 ed426a39c1edc37c57e3c5675e1ed0cfc9cb8178..36e0cd18f20d62ba913897243ad8d302a002f7ed 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 68a76b3faa78603e6470a236d08b03f15be8c21e..1824e91e57910b708a196b204ff68e04318f4d39 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 ccbd67bfa676f9ccb976601ca5fd9ed98f7a60da..52c067bdad9fafa803a80937bc6f34f949c44957 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 3258728f4ba57222664638baa822382d3bee384c..e5ddcd2ee245393f31a5a4abe1408bee8c2a3d77 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 c78ec9388506de7d805f439b055aa41ec8d1894d..0957c2584a51b1eaad3cc6a16d33c5e2fe68e4f1 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