Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Debugger implementation #13433

Draft
wants to merge 725 commits into
base: main
Choose a base branch
from
Draft

Conversation

RemcoSmitsDev
Copy link
Contributor

@RemcoSmitsDev RemcoSmitsDev commented Jun 23, 2024

Closes #5307
Closes #5065

The current state of the debugger implementation:

Screen.Recording.2024-10-16.at.15.02.20.mov
Screen.Recording.2025-01-19.at.17.45.06.mov

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:

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:

  • Added debugger implementation.

@cla-bot cla-bot bot added the cla-signed The user has signed the Contributor License Agreement label Jun 23, 2024
@davidbuzz
Copy link
Contributor

Add documententation and/or an example on how to configure and/enable this for a specific debugger... if not as part of this PR then to the todo list ?

@osiewicz
Copy link
Contributor

Change client id to be language id because you should only run one client per language at the same time

What if you have e.g. a monorepo with multiple services written in the same language?

@RemcoSmitsDev
Copy link
Contributor Author

Uhm, I think most of the debug adapters support multiple threads, but need to look more in to that. Not sure how VS Code handles this, if they allow you to run the same debugger adapter twice or more.

@RemcoSmitsDev RemcoSmitsDev force-pushed the debugger branch 2 times, most recently from c71eb06 to 47a5f0c Compare June 29, 2024 14:47
@davidbuzz
Copy link
Contributor

I'd love to see another more up-to-date video of the current status of this, if u can find time. :-)

@RemcoSmitsDev RemcoSmitsDev force-pushed the debugger branch 3 times, most recently from ac95fbd to 515122c Compare July 3, 2024 21:20
@jonahcui
Copy link

jonahcui commented Jul 4, 2024

HI, I have started a dlv(go dap server) to debug go program, but i need bring env to the dlv commend. I read the code DebugAdapterClient, i think when create_tcp_client or create_stdio_client, we should bring env configuration to command.

@RemcoSmitsDev
Copy link
Contributor Author

RemcoSmitsDev commented Jul 4, 2024

HI, I have started a dlv(go dap server) to debug go program, but i need bring env to the dlv commend. I read the code DebugAdapterClient, i think when create_tcp_client or create_stdio_client, we should bring env configuration to command.

Hey, I think most debug adapters support this already by passing in an env prop through the launch or attach request. See the JS debugger config options. We already support passing in your own config values, so I don't think we need to add more configuration for this. Because it's on the debug adapter for getting this data and handling it how they want.

@jonahcui
Copy link

jonahcui commented Jul 4, 2024

HI, I have started a dlv(go dap server) to debug go program, but i need bring env to the dlv commend. I read the code DebugAdapterClient, i think when create_tcp_client or create_stdio_client, we should bring env configuration to command.

Hey, I think most debug adapters support this already by passing in an env prop through the launch or attach request. See the JS debugger config options. We already support passing in your own config values, so I don't think we need to add more configuration for this. Because it's on the debug adapter for getting this data and handling it how they want.

Ok, understand.... I will test it on js debugger and go delve and study your code.

@RemcoSmitsDev RemcoSmitsDev force-pushed the debugger branch 4 times, most recently from 7eacd30 to 3f8581a Compare July 5, 2024 14:54
@RemcoSmitsDev RemcoSmitsDev force-pushed the debugger branch 2 times, most recently from 8adc489 to 8d99f9b Compare July 12, 2024 20:01
@davidbuzz
Copy link
Contributor

davidbuzz commented Jul 15, 2024

for those of us trying to follow-along at home on this PR, it would be helpful of there was a sample tasks.json ( or wherever the debug settings are being stored if not there ) and any relevent settings.json we need enable, as I compiled and ran this PR, but was unable to get the same behaviour as either of the screen recordings.
for example: ctrl-shift-p[command palette] -> 'debug panel: open panel' gave me an empty lower panel with no start/stop/pause etc, and none of the other demonstrated command-palette/s seemed to do anything.

@RemcoSmitsDev
Copy link
Contributor Author

RemcoSmitsDev commented Jul 15, 2024

Hey @davidbuzz, sorry for not posting any examples of starting a debug adapter. I did this for a reason, because I'm not happy yet with the naming of the fields & structure of the task. But here is an example task to start a debug adapter:

If you want to follow a bit more about what we are working on, you can join the following channel: https://zed.dev/channel/zed-debugger-11370.

{
  "label": "Xdebug debug adapter",
  "command": "bun",
  "args": [
    "/Users/remcosmits/Documents/code/vscode-php-debug/out/phpDebug.js",
    "--server=8132"
  ],
  "task_type": "debug",
  "cwd": "/Users/remcosmits/Documents/code/symfony_demo",
  "debug_adapter": {
    "id": "xdebug",
    "port": 8132,
    "request_args": {
      "skipFiles": ["**/vendor/**"],
      "pathMappings": {
        "/Users/remcosmits/Documents/code/symfony_demo/public": "/Users/remcosmits/Documents/code/symfony_demo/public"
      },
      "localSourceRoot": "/Users/remcosmits/Documents/code/symfony_demo",
      "serverSourceRoot": "/Users/remcosmits/Documents/code/symfony_demo",
      "xdebugSettings": {
        "show_hidden": 1
      }
    }
  }
}

@RemcoSmitsDev RemcoSmitsDev force-pushed the debugger branch 2 times, most recently from d9461c3 to b6e677e Compare July 15, 2024 16:44
@davidbuzz
Copy link
Contributor

davidbuzz commented Jul 16, 2024

i think u mean this discord channel, but u were close.. https://discord.com/channels/869392257814519848/1255246362220691456 ... i pop in to the Zed discord occassionally. :-)

@RemcoSmitsDev
Copy link
Contributor Author

i think u mean this discord channel, but u were close.. https://discord.com/channels/869392257814519848/1255246362220691456 ... i pop in to the Zed discord occassionally. :-)

No, that's not what I mean. What do you mean by I'm close? It sounds a bit disparaging...

@davidbuzz
Copy link
Contributor

I was just trying to say that the link u gave starting with https://zed.dev doesn't work for me.

@RemcoSmitsDev
Copy link
Contributor Author

Ahh oké. it seems to work for other people. Also it's the same as the one that i posted in the discord channel. Does it still not work for you?

@davidbuzz
Copy link
Contributor

Ahh oké. it seems to work for other people. Also it's the same as the one that i posted in the discord channel. Does it still not work for you?

... im on linux. :-)

osiewicz and others added 24 commits February 19, 2025 12:12
Make exited the ultimate fallback so we disable all the UI buttons.
Co-authored-by: Anthony Eid <[email protected]>
Co-authored-by: Remco Smits <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
cla-signed The user has signed the Contributor License Agreement
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Microsoft Debug Adapter Protocol support Build and Debug support