Commit Graph

212 Commits

Author SHA1 Message Date
Piotr Osiewicz
b8383bedae Renames 2025-02-18 02:07:14 +01:00
Piotr Osiewicz
bd27f879e2 Rename DebugAdapterClientId to SessionId 2025-02-18 01:56:57 +01:00
Piotr Osiewicz
b67a382e57 WIP 2025-02-17 18:15:57 +01:00
Piotr Osiewicz
06338963f3 WIP 2025-02-17 17:24:50 +01:00
Piotr Osiewicz
95590967eb WIP 2025-02-17 16:51:39 +01:00
Piotr Osiewicz
0233152bd1 Get rid of supports_attach (we'll configure it differently later on) 2025-02-17 11:02:34 +01:00
Piotr Osiewicz
debcb1f26f WIP
Co-Authored-By: Anthony Eid <hello@anthonyeid.me>
2025-02-14 19:30:14 +01:00
Remco Smits
ecfc0ef12d Move requests into client (#112)
* Move most of the requests into the client state itself.

Co-authored-by: Anthony Eid <hello@anthonyeid.me>

* WIP

* Fix some errors and create new errors

* More teardown

* Fix detach requests

* Move set variable value to dap command

* Fix dap command error and add evaluate command

* FIx more compiler errors

* Fix more compiler errors

* Clipppyyyy

* FIx more

* One more

* Fix one more

* Use threadId from project instead u64

* Mostly fix stack frame list

* More compile errors

* More

* WIP transfer completions to dap command

Co-Authored-By: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>
Co-Authored-By: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>

* Finish console completions DapCommand impl

* Get Zed to build !!

* Fix test compile errors: The debugger tests will still fail

* Add threads reqeust to debug session

Co-authored-by: Piotr Osiewicz <piotr@zed.dev>

---------

Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>
Co-authored-by: Anthony Eid <hello@anthonyeid.me>
Co-authored-by: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>
Co-authored-by: Piotr Osiewicz <piotr@zed.dev>
2025-02-13 16:25:32 -05:00
Remco Smits
af77b2f99f WIP refactor (#110)
* WIP

Co-Authored-By: Piotr Osiewicz <piotr@zed.dev>
Co-Authored-By: Anthony Eid <hello@anthonyeid.me>

* Tear stuff out and make the world burn

Co-authored-by: Remco Smits <djsmits12@gmail.com>
Co-authored-by: Piotr <piotr@zed.dev>

* Fix compile errors

* Remove dap_store from module list and fix some warnings

Module list now uses Entity<DebugSession> to get active modules and handle remote/local state
so dap_store is no longer needed

* Add Cacheable Command trait

This gets rid of ClientRequest or whatever the name was; we don't need to enumerate every possible request and repeat ourselves, instead letting you mark any request as cached with no extra boilerplate.

* Add Eq requirement for RequestSlot

* Implement DapCommand for Arc<DapCommand>

That way we can use a single allocated block for each dap command to store it as both the cache key and the command itself.

* Clone Arc on demand

* Add request helper

* Start work on setting up a new dap_command_handler

* Make clippy pass

* Add loaded sources dap command

* Set up module list test to see if Modules request is called

* Fix compile warnings

* Add basic local module_list test

* Add module list event testing to test_module_list

* Bring back as_any_arc

* Only reset module list's list state when modules_len changes

---------

Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>
Co-authored-by: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>
Co-authored-by: Anthony Eid <hello@anthonyeid.me>
Co-authored-by: Piotr <piotr@zed.dev>
2025-02-06 21:12:53 -05:00
Remco Smits
1be2836f60 Refactor session id to use entity instead (#109)
* Move common session fields to struct

* Use session entity instead of session id inside UI

This is to prepare to move the state to the
2025-02-05 19:19:23 +01:00
Piotr Osiewicz
28874b60cf Fix up symlinks for license files 2025-02-04 02:34:55 +01:00
Anthony Eid
d60089888f Show console output on remote debug clients (#107)
This PR shows console output & removes the query bar for remote clients.

We don't show the query bar because it's currently impossible for remote clients to send evaluations requests from their console. We didn't implement that feature yet because of security consoles and will do so in the future with permissions.

Co-authored-by: Remco Smits \<djsmits12@gmail.com\>

* Add basic collab debug console test

Co-authored-by: Remco Smits <djsmits12@gmail.com>

* Show output events on remote client debug consoles

Co-authored-by: Remco Smits <djsmits12@gmail.com>

* Don't show debug console query bar on remote clients

Co-authored-by: Remco Smits <djsmits12@gmail.com>

---------

Co-authored-by: Remco Smits <djsmits12@gmail.com>
2025-02-03 11:31:06 -05:00
Piotr Osiewicz
4c930652af Use workspace values for edition and publish in new crates 2025-02-03 16:53:00 +01:00
Remco Smits
dfe978b06a Add toolchain support for python debug adapter (#90)
* WIP add toolchain for python

Co-Authored-By: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>

* Integrate toolchain store with dap_store & use it for debugpy

* Wip require worktree to start debug session

* Move start debug session to project for determing the worktree

* Make all tests pass again

* Make collab tests pass

* Use notify instead of manual notification

* Use reference instead of clone

* Revert "Use reference instead of clone"

This reverts commit 61469bb1679bc35d5d3bf0b93e5b7cfc94357c80.

* Revert "Use notify instead of manual notification"

This reverts commit a0b9bf52a1d948dfb244c4b7040576a34ec6f465.

* Revert debugger branch merge

* Revert "Revert debugger branch merge"

This reverts commit 56c883d4dba4877826ea2185a8177fddefa0d054.

* Clean up

* Make node runtime required

* Pass worktree id into get_environment

* Fix use the resolved debug adapter config

* Add fallback if toolchain could not be found to common binary names

---------

Co-authored-by: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>
Co-authored-by: Anthony Eid <hello@anthonyeid.me>
2025-01-29 20:55:57 +01:00
Anthony Eid
78865820d8 Transition to gpui3 (#103)
Update debugger's branch gpui version to 3

Co-authored-by: Remco Smits djsmits12@gmail.com
2025-01-29 03:46:37 -05:00
Anthony Eid
56abc60a34 Collab - Toggle Ignore Breakpoints (#93)
* Create collab ignore breakpoint integration test

* Add collab ignore breakpoints message handlers

Still need to enable remote dap_stores the ability to store/manage ignore breakpoint state

* Refactor session to have remote and local modes

This was done to allow remote clients access to some session details they need such as ignore breakpoints.

Co-authored-by: Remco Smits <djsmits12@gmail.com>

* DapStore so both local & remote modes have access to DebugSessions

* Add remote sessions when creating new debug panel items

* Finish implementing collab breakpoints ignore

* Clippy & clean up

* Clean up session information when sessions end on remote clients

* Rename proto message

* Add ignore breakpoints state to collab db

---------

Co-authored-by: Remco Smits <djsmits12@gmail.com>
2025-01-21 16:53:33 -05:00
Remco Smits
7b6d20b9ff Stack frame presentation hint (#94)
* Update dap type to include new presentation hint for stack frames

* Implement grouped/collapsed stack frames based on presentation hint

* Add test

Co-Authored-By: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>

---------

Co-authored-by: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>
2025-01-20 20:34:28 +01:00
Anthony Eid
1a5feff9ed Implment Variable List Toggling Function in Collab (#88)
* Impl VariablesCommand for dap requests

* Have remote variable list generate entries & other fields locally

* Finish first version of collab variable list test (It fails)

* Get variable list collab test to pass

* Update variable test again (it failing)

* Improve tests more WIP

* Remove a test to make merge easier

* Finalize collab test

* Only send variables one time to collab server instead of each rebuild

* Finish variable list fetch!
2025-01-19 18:58:46 -05:00
Remco Smits
4de9921fa8 Add support for adapter specific clipboard value formatting 2025-01-19 16:07:18 +01:00
Remco Smits
d03e4149ea Fix CustomEvent type field are not public 2025-01-16 21:32:23 +01:00
Anthony Eid
86946506bf Send synced breakpoints to active DAP servers in collab (#89)
* Send changed breakpoints to DAP servers on sync breakpoints handle

Co-authored-by: Remco Smits <djsmits12@gmail.com>

* Add more sync breakpoints test

Co-authored-by: Remco Smits <djsmits12@gmail.com>

---------

Co-authored-by: Remco Smits <djsmits12@gmail.com>
2025-01-16 14:40:22 -05:00
Remco Smits
a9d7858f30 Add restart stack frame (#85)
* Add restart stack frame

* Add collab support

* Add restart frame to proto capabilities

* Add collab test
2025-01-14 22:30:04 +01:00
Anthony Eid
a7e26bbfb5 Proxy dap requests to upstream clients (#77)
* WIP Start work to send all dap client requests with request_dap

* Continue work on converting dap client requests

* WIP setup dap command for proto dap requests

* WIP dap command

Co-authored-by: Remco Smits <djsmits12@gmail.com>

* revert "WIP dap command"

This reverts commit fd2a6832b667aa23caf588c3ab55243319bc1654.

Co-authored-by: Remco Smits <djsmits12@gmail.com>

* More WIP with Dap Command trait
Co-authored-by: Remco Smits <djsmits12@gmail.com>

* Get step over command to work with remote dap clients

Co-authored-by: Remco Smits <djsmits12@gmail.com>

* Fix thread status not being set to stop on remote debug panel items

* Create a inner wrapper type to use for dap remote step requests

* Implement step in,back,out for remote debugger sessions

* Add Continue Command

* Add more dap command impls

TerminateThreads, Pause, and Disconnect. As well as a shutdown session request downstream clients can send to host

* Add Disconnect & Terminate dap command impls

* Add basic dap proxy test over collab

* Fix clippy error

* Start work on syncing breakpoint thread status

Co-authored-by: Remco Smits <djsmits12@gmail.com>
Co-authored-by: Carter Canedy <cartercanedy42@gmail.com>

* WIP Fix thread status not syncing

* Add thread state model's to remote debug panels when setting panel items

* Sync thread state on step out command

---------

Co-authored-by: Remco Smits <djsmits12@gmail.com>
Co-authored-by: Carter Canedy <cartercanedy42@gmail.com>
2025-01-14 01:08:31 -05:00
Remco Smits
dd4a1f7d30 Only change the request timeout for tests 2025-01-08 15:29:16 +01:00
Remco Smits
d99653fd15 Add basic test to validate StartDebugging reverse request works 2025-01-08 11:49:23 +01:00
Anthony Eid
f0cd2bfa61 Fix unused test import 2025-01-02 22:21:15 -05:00
Anthony Eid
020623a19d Fix regression causing some debugger tests to fail
After fn on_response() was created we added a test feature that allowed us to
return error responses. We serialized responses wrapped around
a Result type, causing serde_json::from_value(R::Response) to fail when
attempting to get a response and returning a default response instead.
2025-01-02 22:12:58 -05:00
Remco Smits
42d1b484bd Testing: Allow sending error response inside request handler 2024-12-30 23:17:54 +01:00
Remco Smits
e0891a1df7 Add test for attach select process flow 2024-12-27 19:31:57 +01:00
Remco Smits
f4669e8965 Add basic test for attach flow 2024-12-27 16:59:45 +01:00
Remco Smits
7ced61d798 Add basic test for RunInTerminal reverse request to spawn terminal
This commit also adds a way to add a handler when a response is received from a specific reverse request.
2024-12-27 00:56:42 +01:00
Remco Smits
ca970dd77d Add test option for faking reverse requests 2024-12-26 23:04:57 +01:00
Remco Smits
ccacce9ccb introduce debug session model (#80)
* WIP introduce debug session model

* Wip more refactor towards session model

* Fix some compile errors

* Move sub menu item into own struct

* Don't show client id inside selected value

* Remove unused session_id from shutdown event

* Remove clients from dap store use from sessions instead

* Fix clippy

* Add client id to received event log

* Move reconnect client work again

* Move sessions to local dap store

* Move ingore breakpoints to session model

* Move next session/client id to local store

* Remove duplicated test support only method

* Show client id first in dap log menu entry

* Show sub menu better

* Sort clients by their id

* Sort sessions by their id

* Fix configuration done race condition with sending breakpoints

@Anthony-Eid I think this fixed the race condition you noticed with the configuration done request.

So the issue is when the task is created it directly start the execution of the task itself.
So the `configuration_done` request is most of the times finished before the breakpoints are send
if you don't have a lot of breakpoints.

So instead of creating both tasks before the task is created we now create the 2 tasks right after eachother,
so we can be sure that the `configuration_done` request is send after the breakpoints are send.

```
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 received event `Initialized`
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 3
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 4
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 send `configurationDone` request with sequence_id: 8
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 9
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 7
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 5
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 3
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 4
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 6
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 received response for: `configurationDone` sequence_id: 8
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 9
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 7
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 5
[2024-12-25T21:51:09+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 6
```

```
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 received event `Initialized`
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 4
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 5
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 6
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 7
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 8
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 send `setBreakpoints` request with sequence_id: 3
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 4
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 5
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 6
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 7
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 8
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 received response for: `setBreakpoints` sequence_id: 3
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 send `configurationDone` request with sequence_id: 9
[2024-12-25T21:49:51+01:00 DEBUG dap::client] Client 0 received response for: `configurationDone` sequence_id: 9
```

* Move capabilities back to dapstore itself

* Fix failing remote debug panel test

* Remove capabilities on remote when client shutdown

* Move client_by_session to local store and impl multi client shutdown

* Remove unused code

* Fix clippyyy

* Rename merge capabilities method

As we don't only merge we also insert if there is no capabilities for the client yet.

* Use resolved label for debug session name

* Notify errors when start client to user

* Notify reconnect error to user

* Always shutdown all clients

We should always shutdown all clients  from a single debug session when one is shutdown/terminated.
2024-12-26 16:09:54 +01:00
Remco Smits
1929dec4a0 Use task label for debug panel item tab content 2024-12-22 22:28:22 +01:00
Remco Smits
ed7443db6e Update console evaluate test to validate we invalidate variables 2024-12-22 14:23:39 +01:00
Remco Smits
cea5cc7cd0 Add basic test for collab show debug panel
Co-Authored-By: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>
2024-12-20 21:38:15 +01:00
Anthony Eid
f6d26afb13 Collab: Sync DAP Client Capabilities (#79)
* Start work on getting dap clients to sync capabilities

* Add notify when syncing capabilities 

* Remove client capabilities in handle shutdown debug client
2024-12-20 11:42:00 -05:00
Remco Smits
4f8c19a93a Fix don't remove request handler for tests
This fixes an issue that we couldn't handle a request multiple times.
2024-12-19 22:38:54 +01:00
Anthony Eid
d7fa7c208d WIP Implement Debugger Collab Functionality (#69)
* Initial WIP for impl FollowableItem for DebugPanelItem

* Implment DebuggerThreadState proto functions

* Add Debug panel item variable list definition to zed.proto

* Add more debug panel item messages to zed.proto

* WIP

* Fix compile errors

Co-authored-by: Remco Smits <djsmits12@gmail.com>

* More WIP

Co-authored-by: Remco Smits <djsmits12@gmail.com>

* Further WIP lol

* Start working on fake adapter WIP

Co-authored-by: Remco Smits <djsmits12@gmail.com>
Co-authored-by: Mikayla Maki  <mikayla@zed.dev>

* Merge with Remco's mock debug adapter client branch

* Fix false positive clippy error

This error was a match variant not being covered when the variant wasn't possible dued
to a feature flag. I'm pretty sure this is a bug in clippy/rust-analyzer and will
open an issue on their repos

* Add todo to change in dap adapter downloads

* WIP Get variable to send during variable list

* Get variable list from/to_proto working

Note: For some reason variable entries aren't rendering even though
everything is being sent

* Fix warning messages

* Fix typo

* Impl stack from list from/to_proto for debug panel item

* Change order of set_from_proto for debug panel item

* Impl Variable list variables to/from proto funcs

* Start work on Set Debugger Panel Item event

* WIP with remco

Co-authored-by: Remco Smits <djsmits12@gmail.com>

* Get SetDebugPanelItem proto message sending and handled

Co-authored-by: Remco Smits <djsmits12@gmail.com>

* Setup UpdateDebugAdapter collab message & send live stack frame list updates

* Use proto enums instead of hardcoded integers

* Use read instead of update

* Send variable list update message each time we build the entries

* Send stack frame message when we selected the active stackframe

* Add more mappings

* Remove debug and rename method to be more inline with others

* Use the correct entries to reset

* Add tests to validate we can go and from proto ScopeVariableIndex

* Rename test

* Create UpdateAdapter ModuleList variant WIP

* Change proto conversion trait to have some types return Result enums

* Get clippy to pass

I removed some proto message we used in DebugPanelItem FollowableItem implmentation
because they were causing clippy errors and will need to be change in the near
future anyway

---------

Co-authored-by: Remco Smits <djsmits12@gmail.com>
Co-authored-by: Mikayla Maki <mikayla@zed.dev>
2024-12-18 11:45:21 -05:00
Remco Smits
6aba39874c Add test for stack frame list
This covers the initial fetch and opening of the editor that belongs to the current stack frame (always the first one)
2024-12-18 17:28:36 +01:00
Remco Smits
e3cb3d143e Fix failing test 2024-12-18 15:11:07 +01:00
Remco Smits
7f4f7b056e Add basic debug panel flow test (#74)
* Add debug panel flow tests

* Wip debug

* Wip fix test

Co-Authored-By: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>

* WIP Get test_show_debug_panel to run

while the test now runs without panicing dued to parked with nothing left to run
the debug panel item is not being spawned

* Get test_show_debug_panel to pass & clean up

* Make clippy pass

* Assert debug panel item is removed when client shutdown

* Move send event back to dapstore

---------

Co-authored-by: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>
Co-authored-by: Anthony Eid <hello@anthonyeid.me>
2024-12-18 10:47:50 +01:00
Remco Smits
3474750588 Fix don't panic when we receive a response after the request timeout was exceeded 2024-12-17 18:38:05 +01:00
Remco Smits
28c6012ff8 Update dap types to correctly fix other event case 2024-12-16 20:03:05 +01:00
Anthony Eid
9a802b9133 Add dap settings to disable dap logs & format dap messages within logs 2024-12-16 12:30:30 -05:00
Anthony Eid
d7b5132bd9 Update dap-types version
The past version always returned an error when attempting to deserialize custom DAP
events. Causing Zed to stop recving messages from the debug adapter
2024-12-16 12:14:53 -05:00
Remco Smits
980f9c7353 Correctly reconnect to adapter for StartDebugging reverse request
Before this change, we always started a new adapter but this was causing some issues:

- Infinite client starts
- Cannot start client port already in use
- Not able to start a debug session

Co-Authored-By: Anthony Eid <56899983+Anthony-Eid@users.noreply.github.com>
2024-12-14 20:04:39 +01:00
Remco Smits
aefef9c58c Log event names for debugging 2024-12-14 19:59:41 +01:00
Anthony Eid
490d42599b Fix GDB Debug Adapter on linux & Clippy
The GDB adapter was failing because an stderr stream failed to
connect to Zed from the adapter. We now log the error and continue
the debugging sequence if std input and output streams connect.
2024-12-11 05:20:50 -05:00
Remco Smits
04cd04eb44 Move thread status to debug_panel 2024-12-10 17:54:38 +01:00