Debugger implementation (#13433)
### DISCLAIMER > As of 6th March 2025, debugger is still in development. We plan to merge it behind a staff-only feature flag for staff use only, followed by non-public release and then finally a public one (akin to how Git panel release was handled). This is done to ensure the best experience when it gets released. ### END OF DISCLAIMER **The current state of the debugger implementation:** https://github.com/user-attachments/assets/c4deff07-80dd-4dc6-ad2e-0c252a478fe9 https://github.com/user-attachments/assets/e1ed2345-b750-4bb6-9c97-50961b76904f ---- All the todo's are in the following channel, so it's easier to work on this together: https://zed.dev/channel/zed-debugger-11370 If you are on Linux, you can use the following command to join the channel: ```cli zed https://zed.dev/channel/zed-debugger-11370 ``` ## Current Features - Collab - Breakpoints - Sync when you (re)join a project - Sync when you add/remove a breakpoint - Sync active debug line - Stack frames - Click on stack frame - View variables that belong to the stack frame - Visit the source file - Restart stack frame (if adapter supports this) - Variables - Loaded sources - Modules - Controls - Continue - Step back - Stepping granularity (configurable) - Step into - Stepping granularity (configurable) - Step over - Stepping granularity (configurable) - Step out - Stepping granularity (configurable) - Debug console - Breakpoints - Log breakpoints - line breakpoints - Persistent between zed sessions (configurable) - Multi buffer support - Toggle disable/enable all breakpoints - Stack frames - Click on stack frame - View variables that belong to the stack frame - Visit the source file - Show collapsed stack frames - Restart stack frame (if adapter supports this) - Loaded sources - View all used loaded sources if supported by adapter. - Modules - View all used modules (if adapter supports this) - Variables - Copy value - Copy name - Copy memory reference - Set value (if adapter supports this) - keyboard navigation - Debug Console - See logs - View output that was sent from debug adapter - Output grouping - Evaluate code - Updates the variable list - Auto completion - If not supported by adapter, we will show auto-completion for existing variables - Debug Terminal - Run custom commands and change env values right inside your Zed terminal - Attach to process (if adapter supports this) - Process picker - Controls - Continue - Step back - Stepping granularity (configurable) - Step into - Stepping granularity (configurable) - Step over - Stepping granularity (configurable) - Step out - Stepping granularity (configurable) - Disconnect - Restart - Stop - Warning when a debug session exited without hitting any breakpoint - Debug view to see Adapter/RPC log messages - Testing - Fake debug adapter - Fake requests & events --- Release Notes: - N/A --------- Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com> Co-authored-by: Anthony Eid <hello@anthonyeid.me> Co-authored-by: Anthony <anthony@zed.dev> Co-authored-by: Piotr Osiewicz <peterosiewicz@gmail.com> Co-authored-by: Piotr <piotr@zed.dev>
This commit is contained in:
parent
ed4e654fdf
commit
41a60ffecf
156 changed files with 25840 additions and 451 deletions
|
@ -3,12 +3,13 @@ use std::path::Path;
|
|||
|
||||
use ::settings::Settings;
|
||||
use editor::Editor;
|
||||
use feature_flags::{Debugger, FeatureFlagViewExt};
|
||||
use gpui::{App, AppContext as _, Context, Entity, Task, Window};
|
||||
use modal::{TaskOverrides, TasksModal};
|
||||
use project::{Location, TaskContexts, Worktree};
|
||||
use task::{RevealTarget, TaskContext, TaskId, TaskVariables, VariableName};
|
||||
use task::{RevealTarget, TaskContext, TaskId, TaskModal, TaskVariables, VariableName};
|
||||
use workspace::tasks::schedule_task;
|
||||
use workspace::{tasks::schedule_resolved_task, Workspace};
|
||||
use workspace::{tasks::schedule_resolved_task, Start, Workspace};
|
||||
|
||||
mod modal;
|
||||
mod settings;
|
||||
|
@ -18,7 +19,7 @@ pub use modal::{Rerun, Spawn};
|
|||
pub fn init(cx: &mut App) {
|
||||
settings::TaskSettings::register(cx);
|
||||
cx.observe_new(
|
||||
|workspace: &mut Workspace, _window: Option<&mut Window>, _: &mut Context<Workspace>| {
|
||||
|workspace: &mut Workspace, window: Option<&mut Window>, cx: &mut Context<Workspace>| {
|
||||
workspace
|
||||
.register_action(spawn_task_or_modal)
|
||||
.register_action(move |workspace, action: &modal::Rerun, window, cx| {
|
||||
|
@ -85,9 +86,20 @@ pub fn init(cx: &mut App) {
|
|||
);
|
||||
}
|
||||
} else {
|
||||
toggle_modal(workspace, None, window, cx).detach();
|
||||
toggle_modal(workspace, None, TaskModal::ScriptModal, window, cx).detach();
|
||||
};
|
||||
});
|
||||
|
||||
let Some(window) = window else {
|
||||
return;
|
||||
};
|
||||
|
||||
cx.when_flag_enabled::<Debugger>(window, |workspace, _, _| {
|
||||
workspace.register_action(|workspace: &mut Workspace, _: &Start, window, cx| {
|
||||
crate::toggle_modal(workspace, None, task::TaskModal::DebugModal, window, cx)
|
||||
.detach();
|
||||
});
|
||||
});
|
||||
},
|
||||
)
|
||||
.detach();
|
||||
|
@ -109,15 +121,21 @@ fn spawn_task_or_modal(
|
|||
});
|
||||
spawn_task_with_name(task_name.clone(), overrides, window, cx).detach_and_log_err(cx)
|
||||
}
|
||||
Spawn::ViaModal { reveal_target } => {
|
||||
toggle_modal(workspace, *reveal_target, window, cx).detach()
|
||||
}
|
||||
Spawn::ViaModal { reveal_target } => toggle_modal(
|
||||
workspace,
|
||||
*reveal_target,
|
||||
TaskModal::ScriptModal,
|
||||
window,
|
||||
cx,
|
||||
)
|
||||
.detach(),
|
||||
}
|
||||
}
|
||||
|
||||
fn toggle_modal(
|
||||
pub fn toggle_modal(
|
||||
workspace: &mut Workspace,
|
||||
reveal_target: Option<RevealTarget>,
|
||||
task_type: TaskModal,
|
||||
window: &mut Window,
|
||||
cx: &mut Context<Workspace>,
|
||||
) -> Task<()> {
|
||||
|
@ -140,6 +158,7 @@ fn toggle_modal(
|
|||
reveal_target: Some(target),
|
||||
}),
|
||||
workspace_handle,
|
||||
task_type,
|
||||
window,
|
||||
cx,
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue