Skip to content

Commit 45b06e0

Browse files
committed
src/goDebugFactory.ts: direct users to use 'debugServer' for remote
In order to prevent users from accidentally stumbling upon trying to connect to a dlv dap instance, disable support for specifying host and port for a delve dap server. Users can still connect to a running server by specifying 'debugServer'. Update documentation to use the preferred "debugServer" instead of "port". Change-Id: I51c4c5c6212a5f5d823d93a85ec040d44956ca9f Reviewed-on: https://go-review.googlesource.com/c/vscode-go/+/340329 Trust: Suzy Mueller <[email protected]> Run-TryBot: Suzy Mueller <[email protected]> TryBot-Result: kokoro <[email protected]> Reviewed-by: Hyang-Ah Hana Kim <[email protected]>
1 parent 90fee6f commit 45b06e0

File tree

4 files changed

+15
-56
lines changed

4 files changed

+15
-56
lines changed

docs/debugging.md

+5-49
Original file line numberDiff line numberDiff line change
@@ -245,12 +245,12 @@ Here is the list of attributes specific to Go debugging.
245245
| `dlvFlags` | Extra flags for `dlv`. See `dlv help` for the full list of supported. Flags such as `--log-output`, `--log`, `--log-dest`, `--api-version`, `--output`, `--backend` already have corresponding properties in the debug configuration, and flags such as `--listen` and `--headless` are used internally. If they are specified in `dlvFlags`, they may be ignored or cause an error.<br/> | <center>_same as Launch_</center>|
246246
| `env` | Environment variables passed to the program.<br/> | <center>_n/a_</center> |
247247
| `envFile` | Absolute path to a file containing environment variable definitions. Multiple files can be specified by provided an array of absolute paths<br/>(Default: `${workspaceFolder}/.env`)<br/> | <center>_n/a_</center> |
248-
| `host` | The host name of the machine the delve debugger will be listening on. In `dlv-dap` mode, the extension will look for a delve DAP server running on the specified host:port so users are responsible for starting the server.<br/>(Default: `"127.0.0.1"`)<br/> | <center>_same as Launch_</center>|
248+
| `host` | The host name of the machine the delve debugger will be listening on.<br/>(Default: `"127.0.0.1"`)<br/> | <center>_same as Launch_</center>|
249249
| `logDest` | dlv's `--log-dest` flag. See `dlv log` for details. Number argument is not allowed. Supported only in `dlv-dap` mode, and on Linux and Mac OS.<br/> | dlv's `--log-dest` flag. See `dlv log` for details. Number argument is not allowed. Supported only in `dlv-dap` mode and on Linux and Mac OS.<br/> |
250250
| `logOutput` | Comma separated list of components that should produce debug output. Maps to dlv's `--log-output` flag. Check `dlv log` for details.<br/><p>Allowed Values: `"debugger"`, `"gdbwire"`, `"lldbout"`, `"debuglineerr"`, `"rpc"`, `"dap"`<br/>(Default: `"debugger"`)<br/> | <center>_same as Launch_</center>|
251251
| `mode` | One of `auto`, `debug`, `test`, `exec`. In `auto` mode, the extension will choose either `debug` or `test` depending on active editor window.<br/><p>Allowed Values: `"auto"`, `"debug"`, `"test"`, `"exec"`<br/>(Default: `auto`)<br/> | Indicates local or remote debugging. Local maps to the `dlv attach` command, remote maps to `connect`. `remote` is not supported in `dlv-dap` mode currently. Use `host` and `port` instead.<br/><p>Allowed Values: `"local"`, `"remote"`<br/>(Default: `local`)<br/> |
252252
| `output` | Output path for the binary of the debugee.<br/>(Default: `"debug"`)<br/> | <center>_n/a_</center> |
253-
| `port` | The port that the delve debugger will be listening on. In `dlv-dap` mode, the extension will look for a delve DAP server running on the specified host:port so users are responsible for starting the server.<br/>(Default: `2345`)<br/> | <center>_same as Launch_</center>|
253+
| `port` | The port that the delve debugger will be listening on.<br/>(Default: `2345`)<br/> | <center>_same as Launch_</center>|
254254
| `processId` | <center>_n/a_</center> | <br/><p><b>Option 1:</b> Use process picker to select a process to attach, or Process ID as integer.<br/><p>Allowed Values: `"${command:pickProcess}"`, `"${command:pickGoProcess}"`<br/><br/><p><b>Option 2:</b> Attach to a process by name. If more than one process matches the name, use the process picker to select a process.<br/><br/><p><b>Option 3:</b> The numeric ID of the process to be debugged. If 0, use the process picker to select a process.<br/><br/>(Default: `0`)<br/> |
255255
| `program` | Path to the program folder (or any go file within that folder) when in `debug` or `test` mode, and to the pre-built binary file to debug in `exec` mode. If it is not an absolute path, the extension interpretes it as a workspace relative path.<br/>(Default: `"${workspaceFolder}"`)<br/> | <center>_n/a_</center> |
256256
| `remotePath` | <center>_n/a_</center> | (Deprecated) *Use `substitutePath` instead.*<br/>The path to the source code on the remote machine, when the remote path is different from the local machine. If specified, becomes the first entry in substitutePath.<br/>(Default: `""`)<br/> |
@@ -349,58 +349,14 @@ If you want to explicitly specify the location of the delve binary, use the `go.
349349

350350
> If you are able to use the [Remote Development](https://aka.ms/vscode-remote/download/extension) extensions and VS Code’s universal [remote development capabilities](https://code.visualstudio.com/docs/remote/remote-overview), that is the recommended way to debug Go programs remotely. Check out [Getting started](https://code.visualstudio.com/docs/remote/remote-overview#_getting-started) section and [Remote tutorials](https://code.visualstudio.com/docs/remote/remote-overview#_remote-tutorials) to learn more.
351351
352-
Remote debugging is the debug mode intended to work with a debugger and target running on a different machine or a container. Support for remote debugging using Delve’s native DAP implementation is still a work-in-progress. This section describes a current temporary workaround and its limitations. If the following workaround is not working for your case, please file an issue and help us understand remote debugging use cases better.
353-
354-
<p align="center"><img src="images/remote-debugging.png" alt="Remote Debugging"> </p>
355-
356-
When using the dlv-dap mode, the delve instance running remotely needs to be able to process DAP requests, instead of the traditional JSON-RPC, used with an external `dlv --headless` server. The following command starts a Delve DAP server on port 12345 that is ready to accept a request from an editor such as VS Code for launching or attaching to a target.
357-
358-
```
359-
$ dlv-dap dap --listen=:12345
360-
```
361-
362-
Use the following `launch` configuration to tell `dlv-dap` to execute a binary precompiled with `-gcflags='all=-N -l'`:
363-
364-
```json5
365-
{
366-
"name": "Connect to server (DAP)",
367-
"type": "go",
368-
"debugAdapter": "dlv-dap",
369-
"request": "launch",
370-
"port": 12345,
371-
"host": "127.0.0.1",
372-
"mode": "exec",
373-
"program": "/absolute/path/to/remote/workspace/program/executable",
374-
"substitutePath": [
375-
{ "from": ${workspaceFolder}, "to": "/path/to/remote/workspace" },
376-
...
377-
]
378-
}
379-
```
380-
381-
Or have the binary compiled by dlv-dap by modifying the above configuration to use:
382-
383-
```json5
384-
"mode": "debug",
385-
"program": "/absolute/path/to/remote/workspace/package",
386-
```
387-
388-
When seeing the `"port"` attribute being used in the launch request, Go extension will assume a Delve DAP server is started externally and accessible through the specified `host:port` and tell VS Code to connect to it directly. The `program` attribute must point to the absolute path to the package or binary to debug in the remote host’s file system even when `substitutePath` is specified.
389-
390-
⚠️ Limitations
391-
* Unlike `dlv <debug|exec|attach> --headless` commands traditionally used for remote debugging scenarios, Delve’s new `dap` sub command does not launch or attach to the debuggee process until it receives a Launch/Attach request. We understand this limitation, and we are currently working on addressing this limitation.
392-
* Anyone who can connect to the Delve DAP server’s host:port can exploit it to run arbitrary programs.
393-
* When using `"attach"` requests, you will need to specify the `processId` since
394-
[the processId resolution feature](#attach) cannot gather process information running remotely.
395-
* Delve DAP does not support `--allow-multiclient` or `--continue` flags yet, which means after a debug session ends, the dlv-dap process will exit.
396-
* If you use `debug` or `test` mode `launch` requests, Delve builds the target binary. Delve tries to build the target from the directory where the `dlv` (or `dlv-dap`) process is running, so make sure to run the `dlv-dap` command from the directory you’d run the `go build` or `go test` command.
352+
🚧 Remote debugging is the debug mode intended to work with a debugger and target running on a different machine or a container. Support for remote debugging using Delve’s native DAP implementation is still a work-in-progress. Please fall back to the `legacy` debug adapter.
397353

398354
### Running Debugee Externally
399355

400356
Sometimes you’d like to launch the program for debugging outside VS Code (e.g., as a workaround of the missing `console` support), there are currently two options.
401357

402358
* Compile and run the program from the external terminal and use [the "attach" configuration](#attach).
403-
* Use ["Remote Debugging"](#remote-debugging); run `dlv-dap dap --listen=:<port>` from the external terminal, and set the `"port"` attribute in your launch configuration.
359+
* Launch the server externally; run `dlv-dap dap --listen=:<port>` from the external terminal, and set the `"debugServer": <port>` attribute in your launch configuration.
404360

405361
## Reporting Issues
406362

@@ -463,7 +419,7 @@ $ dlv-dap dap --listen=:12345 --log --log-output=dap
463419
"request": "launch",
464420
"debugAdapter": "dlv-dap",
465421
...
466-
"port": 12345
422+
"debugServer": 12345,
467423
}
468424
```
469425

package.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -618,12 +618,12 @@
618618
},
619619
"port": {
620620
"type": "number",
621-
"description": "The port that the delve debugger will be listening on. In `dlv-dap` mode, the extension will look for a delve DAP server running on the specified host:port so users are responsible for starting the server.",
621+
"description": "The port that the delve debugger will be listening on.",
622622
"default": 2345
623623
},
624624
"host": {
625625
"type": "string",
626-
"description": "The host name of the machine the delve debugger will be listening on. In `dlv-dap` mode, the extension will look for a delve DAP server running on the specified host:port so users are responsible for starting the server.",
626+
"description": "The host name of the machine the delve debugger will be listening on.",
627627
"default": "127.0.0.1"
628628
},
629629
"trace": {
@@ -810,12 +810,12 @@
810810
},
811811
"port": {
812812
"type": "number",
813-
"description": "The port that the delve debugger will be listening on. In `dlv-dap` mode, the extension will look for a delve DAP server running on the specified host:port so users are responsible for starting the server.",
813+
"description": "The port that the delve debugger will be listening on.",
814814
"default": 2345
815815
},
816816
"host": {
817817
"type": "string",
818-
"description": "The host name of the machine the delve debugger will be listening on. In `dlv-dap` mode, the extension will look for a delve DAP server running on the specified host:port so users are responsible for starting the server.",
818+
"description": "The host name of the machine the delve debugger will be listening on.",
819819
"default": "127.0.0.1"
820820
},
821821
"substitutePath": {

src/goDebugConfiguration.ts

+6
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,12 @@ export class GoDebugConfigurationProvider implements vscode.DebugConfigurationPr
157157
// for local mode, default to dlv-dap.
158158
debugConfiguration['debugAdapter'] = debugConfiguration['mode'] !== 'remote' ? 'dlv-dap' : 'legacy';
159159
}
160+
if (debugConfiguration['debugAdapter'] === 'dlv-dap' && debugConfiguration['port']) {
161+
this.showWarning(
162+
'ignorePortInDlvDapWarning',
163+
"`port` is ignored with the 'dlv-dap' debugAdapter, which does not yet support remote debugging. Please file an issue if you have a use case that requires port."
164+
);
165+
}
160166
if (debugConfiguration['debugAdapter'] === 'dlv-dap' && debugConfiguration['mode'] === 'remote') {
161167
this.showWarning(
162168
'ignoreDlvDAPInRemoteModeWarning',

src/goDebugFactory.ts

-3
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,6 @@ export class GoDebugAdapterDescriptorFactory implements vscode.DebugAdapterDescr
3838
private async createDebugAdapterDescriptorDlvDap(
3939
configuration: vscode.DebugConfiguration
4040
): Promise<vscode.ProviderResult<vscode.DebugAdapterDescriptor>> {
41-
if (configuration.port) {
42-
return new vscode.DebugAdapterServer(configuration.port, configuration.host ?? '127.0.0.1');
43-
}
4441
const logger = new TimestampedLogger(configuration.trace, this.outputChannel);
4542
const d = new DelveDAPOutputAdapter(configuration, logger);
4643
return new vscode.DebugAdapterInlineImplementation(d);

0 commit comments

Comments
 (0)