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
|
@ -219,7 +219,7 @@ pub enum Event {
|
|||
idx: usize,
|
||||
},
|
||||
RemovedItem {
|
||||
item_id: EntityId,
|
||||
item: Box<dyn ItemHandle>,
|
||||
},
|
||||
Split(SplitDirection),
|
||||
JoinAll,
|
||||
|
@ -247,9 +247,9 @@ impl fmt::Debug for Event {
|
|||
.finish(),
|
||||
Event::Remove { .. } => f.write_str("Remove"),
|
||||
Event::RemoveItem { idx } => f.debug_struct("RemoveItem").field("idx", idx).finish(),
|
||||
Event::RemovedItem { item_id } => f
|
||||
Event::RemovedItem { item } => f
|
||||
.debug_struct("RemovedItem")
|
||||
.field("item_id", item_id)
|
||||
.field("item", &item.item_id())
|
||||
.finish(),
|
||||
Event::Split(direction) => f
|
||||
.debug_struct("Split")
|
||||
|
@ -315,6 +315,7 @@ pub struct Pane {
|
|||
display_nav_history_buttons: Option<bool>,
|
||||
double_click_dispatch_action: Box<dyn Action>,
|
||||
save_modals_spawned: HashSet<EntityId>,
|
||||
close_pane_if_empty: bool,
|
||||
pub new_item_context_menu_handle: PopoverMenuHandle<ContextMenu>,
|
||||
pub split_item_context_menu_handle: PopoverMenuHandle<ContextMenu>,
|
||||
pinned_tab_count: usize,
|
||||
|
@ -519,6 +520,7 @@ impl Pane {
|
|||
_subscriptions: subscriptions,
|
||||
double_click_dispatch_action,
|
||||
save_modals_spawned: HashSet::default(),
|
||||
close_pane_if_empty: true,
|
||||
split_item_context_menu_handle: Default::default(),
|
||||
new_item_context_menu_handle: Default::default(),
|
||||
pinned_tab_count: 0,
|
||||
|
@ -706,6 +708,11 @@ impl Pane {
|
|||
self.can_split_predicate = can_split_predicate;
|
||||
}
|
||||
|
||||
pub fn set_close_pane_if_empty(&mut self, close_pane_if_empty: bool, cx: &mut Context<Self>) {
|
||||
self.close_pane_if_empty = close_pane_if_empty;
|
||||
cx.notify();
|
||||
}
|
||||
|
||||
pub fn set_can_navigate(&mut self, can_navigate: bool, cx: &mut Context<Self>) {
|
||||
self.toolbar.update(cx, |toolbar, cx| {
|
||||
toolbar.set_can_navigate(can_navigate, cx);
|
||||
|
@ -1632,6 +1639,13 @@ impl Pane {
|
|||
|
||||
// Remove the item from the pane.
|
||||
pane.update_in(&mut cx, |pane, window, cx| {
|
||||
pane.remove_item(
|
||||
item_to_close.item_id(),
|
||||
false,
|
||||
pane.close_pane_if_empty,
|
||||
window,
|
||||
cx,
|
||||
);
|
||||
pane.remove_item(item_to_close.item_id(), false, true, window, cx);
|
||||
})
|
||||
.ok();
|
||||
|
@ -1739,13 +1753,9 @@ impl Pane {
|
|||
}
|
||||
}
|
||||
|
||||
cx.emit(Event::RemoveItem { idx: item_index });
|
||||
|
||||
let item = self.items.remove(item_index);
|
||||
|
||||
cx.emit(Event::RemovedItem {
|
||||
item_id: item.item_id(),
|
||||
});
|
||||
cx.emit(Event::RemovedItem { item: item.clone() });
|
||||
if self.items.is_empty() {
|
||||
item.deactivated(window, cx);
|
||||
if close_pane_if_empty {
|
||||
|
@ -2779,7 +2789,7 @@ impl Pane {
|
|||
window.dispatch_action(
|
||||
this.double_click_dispatch_action.boxed_clone(),
|
||||
cx,
|
||||
)
|
||||
);
|
||||
}
|
||||
})),
|
||||
),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue