diff --git a/helix-term/src/commands/dap.rs b/helix-term/src/commands/dap.rs index b30dc8c0..023ed377 100644 --- a/helix-term/src/commands/dap.rs +++ b/helix-term/src/commands/dap.rs @@ -475,19 +475,36 @@ pub fn dap_variables(cx: &mut Context) { if debugger.thread_id.is_none() { cx.editor - .set_status("Cannot access variables while target is running"); + .set_status("Cannot access variables while target is running."); return; } let (frame, thread_id) = match (debugger.active_frame, debugger.thread_id) { (Some(frame), Some(thread_id)) => (frame, thread_id), _ => { cx.editor - .set_status("Cannot find current stack frame to access variables"); + .set_status("Cannot find current stack frame to access variables."); return; } }; - let frame_id = debugger.stack_frames[&thread_id][frame].id; + let thread_frame = match debugger.stack_frames.get(&thread_id) { + Some(thread_frame) => thread_frame, + None => { + cx.editor + .set_error("Failed to get stack frame for thread: {thread_id}"); + return; + } + }; + let stack_frame = match thread_frame.get(frame) { + Some(stack_frame) => stack_frame, + None => { + cx.editor + .set_error("Failed to get stack frame for thread {thread_id} and frame {frame}."); + return; + } + }; + + let frame_id = stack_frame.id; let scopes = match block_on(debugger.scopes(frame_id)) { Ok(s) => s, Err(e) => {