diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..904b698 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,7 @@ +# Change Log + +## Unreleased +- First release to the [Visual Studio Code Marketplace](https://marketplace.visualstudio.com/items?itemName=eclipse-cdt.cdt-gdb-vscode) in addition to existing releases to the [Open VSX Registry](https://open-vsx.org/extension/eclipse-cdt/cdt-gdb-vscode). +- Updated extension logo. +- Updated user and repository documentation. +- Updated extension dependencies. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 46b8c24..aa15a12 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -13,9 +13,7 @@ the gdb support in the Eclipse C/C++ IDE (CDT). ## Build Instructions -See build instructions in the [Readme](README.md#building). Further information on building, -including CI information, download locations, etc can be found in the -[Wiki](https://github.com/eclipse-cdt/cdt-infra/wiki) +See build instructions in the [developer documentation](./DEVELOPMENT.md). Further information on building, including CI information, download locations, etc can be found in the [Wiki](https://github.com/eclipse-cdt/cdt-infra/wiki). ## Eclipse Contributor Agreement diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md new file mode 100644 index 0000000..e722e02 --- /dev/null +++ b/DEVELOPMENT.md @@ -0,0 +1,49 @@ +# Developing the VS Code Debug Extension for GDB + +This document provides instructions and hints for how to build and develop this extension. More information on contributions to this project can be found in the [contribution guidelines](/CONTRIBUTING.md). + +## Building + +### Building the extension + +We use yarn to as our package manager. To build, simply do + +``` +yarn +yarn build +``` + +You can also run the build in watch mode using + +``` +yarn watch +``` + +### Co-developing cdt-gdb-adapter + +If you are working on the cdt-gdb-adapter you can check it out to a different location and then link it in. + +From the cdt-gdb-adapter project run + +``` +yarn link +``` + +Then from this project run + +``` +yarn link cdt-gdb-adapter +``` + +You can set up a VS Code workspace that has both folders. Also make sure you have builds running in each folder to pick up updates (e.g. `yarn watch`). + +The way to debug cdt-gdb-adapter works with the same principle as the example Mock Debug Adapter provided by VSCode. +For detailed instructions please refer to [Development Setup for Mock Debug](https://code.visualstudio.com/api/extension-guides/debugger-extension#development-setup-for-mock-debug). + +The short step-by-step version is: + +1. Launch this extension with the `Extension` launch configuration ([cdt-gdb-vscode's launch.json](https://github.com/eclipse-cdt-cloud/cdt-gdb-vscode/blob/004a59f329136c2d5eb23e11e54b1f3f51b4d197/.vscode/launch.json#L8)) +2. Launch cdt-gdb-adapter in server mode with either `Server` or `Server (Target adapter)` depending on whether you want to use local debugging or target debugging, corresponding to `"type": "gdb"` and `"type": "gdbtarget"` respectively. ([cdt-gdb-adapter's launch.json](https://github.com/eclipse-cdt-cloud/cdt-gdb-adapter/blob/92bb15046fea82256742a69f0b240129a1949a76/.vscode/launch.json#L4-L21)) +3. Add a breakpoint somewhere useful, such as [`launchRequest`](https://github.com/eclipse-cdt-cloud/cdt-gdb-adapter/blob/6ba0de8e466f4953501181f53ecdfb14c7988973/src/desktop/GDBTargetDebugSession.ts#L94) +4. Add `"debugServer": 4711` to the launch configuration in the extension development host. The `4711` is the port number that cdt-gdb-adapter is listening on. +5. Debug the C/C++ program in the extension development host. diff --git a/README.md b/README.md index 69ccf75..65b619f 100644 --- a/README.md +++ b/README.md @@ -6,56 +6,117 @@ This is a Visual Studio Code extension that supports debugging using gdb and any This extension provides a number of features that integrate into the Visual Studio Code debug environment. This includes launch types, support for the standard debug views as well as a custom viewer for memory browsing. -## Launch Settings - -TODO +## Prerequisites + +External tools are expected to be present on your system depending on the intended use case. +* **Local GDB Debug**: A GDB installation is required on your system. +* **Remote GDB Debug**: A GDB installation is required on your system. In addition to that you must have either access to a running GDB server instance (`attach` use case), or a suitable GDB server variant must be installed to `launch` and connect to your debug target. + +## Launch Configurations + +The Visual Studio Debug Extension for GDB contributes two debugger types: +* `gdb`: Support for **Local GDB Debug**. Launch or attach to an already running application locally on your host machine using GDB. +* `gdbtarget`: Support for **Remote GDB Debug**. Launch or attach to an already running remote GDB server using GDB. + +Both come as `launch` and `attach` request types, each with a sophisticated set of configuration settings. + +### `gdb` Type + +Launch and attach configuration settings that can be used with the `gdb` debugger type for local GDB debug. + +| Setting | `launch` | `attach` | Type | Description | +|:---|:---:|:---:|:---:|:---| +| `gdb` | x | x | `string` | Path to GDB. This can be an absolute path or the name of an executable on your PATH environment variable.
Default: `gdb` | +| `cwd` | x | x | `string` | Current working directory for launching GDB.
Default: Directory of the debugged `program`. | +| `environment` | x | x | `object` | Environment variables to use when launching GDB, defined as a key-value pairs. Use `null` value to remove variable.
Example:
\"environment\": {
\"VARNAME\": \"value\",
\"PATH\": \"/new/item:${env:PATH}\",
\"REMOVEME\": null
}
| +| `program` | x | x | `string` | Path to the program to be debugged. For `launch` requests, this program is also launched.
Default: `${workspaceFolder}/${command:askProgramPath}`, which allows to interactively enter the full program path. | +| `arguments` | x | | `string` | Arguments for the program. | +| `processId` | | x | `string` | Process ID to attach to. | +| `gdbAsync` | x | x | `boolean` | Use `mi-async` mode for communication with GDB. Always `true` if `gdbNonStop` is `true`.
Default: `true` | +| `gdbNonStop` | x | x | `boolean` | Use `non-stop` mode for controlling multiple threads.
Default: `false` | +| `verbose` | x | x | `boolean` | Produce verbose log output. | +| `logFile` | x | x | `string` | Absolute path to the file to log interaction with GDB.| +| `openGdbConsole` | x | x | `boolean` | *(UNIX-only)* Open a GDB console in your IDE while debugging. | +| `initCommands` | x | x | `string[]` | List of GDB commands sent before attaching to inferior. | + + +### `gdbtarget` Type + +Launch and attach configuration settings that can be used with the `gdbtarget` debugger type for remote GDB debug connections. + +| Setting | `launch` | `attach` | Type | Description | +|:---|:---:|:---:|:---:|:---| +| `gdb` | x | x | `string` | Path to GDB. This can be an absolute path or the name of an executable on your PATH environment variable.
Default: `gdb` | +| `cwd` | x | x | `string` | Current working directory for launching GDB.
Default: Directory of the debugged `program`. | +| `environment` | x | x | `object` | Environment variables to use when launching GDB, defined as a key-value pairs. Use `null` value to remove variable.
Example:
\"environment\": {
\"VARNAME\": \"value\",
\"PATH\": \"/new/item:${env:PATH}\",
\"REMOVEME\": null
}
| +| `program` | x | x | `string` | Path to the program to be debugged. For `launch` requests, this program is also launched.
Default: `${workspaceFolder}/${command:askProgramPath}`, which allows to interactively enter the full program path.
**Note**: While `program` is marked as required, the debug adapter launches anyway for remote GDB connections. For example to inspect an embedded target system's memory and other hardware resources without debugging a program. | +| `gdbAsync` | x | x | `boolean` | Use `mi-async` mode for communication with GDB. Always `true` if `gdbNonStop` is `true`.
Default: `true` | +| `gdbNonStop` | x | x | `boolean` | Use `non-stop` mode for controlling multiple threads.
Default: `false` | +| `verbose` | x | x | `boolean` | Produce verbose log output. | +| `logFile` | x | x | `string` | Absolute path to the file to log interaction with GDB.| +| `openGdbConsole` | x | x | `boolean` | *(UNIX-only)* Open a GDB console in your IDE while debugging. | +| `initCommands` | x | x | `string[]` | List of GDB commands sent before attaching to inferior. | +| `preRunCommands` | x | x | `string[]` | List of GDB commands sent after loading image on target before resuming target. | +| `imageAndSymbols` | x | x | `object` | Additional settings for loading images to the target and symbols into the debugger. See section "`imageAndSymbols` object" for details. +| `target` | x | x | `object` | Additional settings to configure the remote GDB target. See section "`target` object" for details. | + +#### `imageAndSymbols` object + +Additional settings for loading images to the target and symbols into the debugger. This object can be used in `launch` and `attach` configurations for the `gdbtarget` debugger type for remote GDB connections. + +| Setting | `launch` | `attach` | Type | Description | +|:---|:---:|:---:|:---:|:---| +| `symbolFileName` | x | x | `string` | If specified, a symbol file to load at the given (optional) offset. Also see `symbolOffset`. | +| `symbolOffset` | x | x | `string` | If `symbolFileName` is specified, the offset added to symbol addresses when loaded. | +| `imageFileName` | x | x | `string` | If specified, an image file to load at the given (optional) offset. Also see `imageOffset`. | +| `imageOffset` | x | x | `string` | If `imageFileName` is specified, the offset used to load the image. | + +#### `target` object + +Additional settings for loading images to the target and symbols into the debugger. This object can be used in `launch` and `attach` configurations for the `gdbtarget` debugger type for remote GDB connections. + +| Setting | `launch` | `attach` | Type | Description | +|:---|:---:|:---:|:---:|:---| +| `type` | x | x | `string` | The kind of target debugging to do. This is passed to `-target-select`.
Default: `remote` | +| `parameters` | x | x | `string[]`| Target parameters for the type of target. Normally something like `localhost:12345`.
Default: `${host}:${port}`. | +| `host` | x | x | `string` | Target host to connect to. Ignored if `parameters` is set.
Default: `localhost` | +| `port` | x | x | `string` | Target port to connect to. Ignored if `parameters` is set.
Default: Value captured by `serverPortRegExp`, otherwise defaults to `2331` | +| `cwd` | x | | `string` | Specifies the working directory of the server.
Default: Working directory of GDB | +| `environment` | x | | `object` | Environment variables to use when launching server, defined as key-value pairs. Defaults to the environment used to launch GDB. Use `null` value to remove variable.
Example:
\"environment\": {
\"VARNAME\": \"value\",
\"PATH\": \"/new/item:${env:PATH}\",
\"REMOVEME\": null
}
| +| `server` | x | | `string` | The executable for the target server to launch (e.g. `gdbserver` or `JLinkGDBServerCLExe`). This can be an absolute path or the name of an executable on your PATH environment variable.
Default: `gdbserver` | +| `serverParameters` | x | | `string[]` | Command line arguments passed to server.
Default: `--once :0 ${args.program}` | +| `serverPortRegExp` | x | | `string` | Regular expression to extract `port` from by examining stdout/stderr of the GDB server. Once the server is launched, `port` will be set to this if unspecified. Defaults to matching a string like `Listening on port 41551` which is what `gdbserver` provides. Ignored if `port` or `parameters` is set. | +| `serverStartupDelay` | x | | `number` | Delay, in milliseconds, after startup but before continuing launch. If `serverPortRegExp` is provided, it is the delay after that regexp is seen. | +| `automaticallyKillServer` | x | | `boolean` | Automatically terminate the launched server when client issues a disconnect.
Default: `true` | +| `uart` | x | x | `object` | Settings related to displaying UART output in the debug console. | + +##### `uart` object + +Settings related to displaying UART output in the debug console. This object can be used in the `target` object of `launch` and `attach` configurations for the `gdbtarget` debugger type for remote GDB connections. + +| Setting | `launch` | `attach` | Type | Description | +|:---|:---:|:---:|:---:|:---| +| `serialPort` | x | x | `string` | Path to the serial port connected to the UART on the board. | +| `socketPort` | x | x | `string` | Target TCP port on the host machine to attach socket to print UART output.
Default: `3456` | +| `baudRate` | x | x | `number` | Baud Rate (in bits/s) of the serial port to be opened.
Default: `115200`.| +| `characterSize` | x | x | `number` | The number of bits in each character of data sent across the serial line.
Supported values: `5`, `6`, `7`, `8`
Default: `8` | +| `parity` | x | x | `string` | The type of parity check enabled with the transmitted data.
Supported values: `none`, `odd`, `even`, `mark`, `space`
Default: `none` - no parity bit sent | +| `stopBits` | x | x | `number` | The number of stop bits sent to allow the receiver to detect the end of characters and resynchronize with the character stream.
Supported values: `1`, `1.5`, `2`
Default: `1` | +| `handshakingMethod` | x | x | `string` | The handshaking method used for flow control across the serial line.
Supported values: `none`, `XON/XOFF`, `RTS/CTS`
Default: `none` - no handshaking | +| `eolCharacter` | x | x | `string` | The EOL character used to parse the UART output line-by-line.
Supported values: `LF`, `CRLF`
Default: `LF` | ## Memory Browser -TODO - -## Building - -### Building the extension - -We use yarn to as our package manager. To build, simply do - -``` -yarn -yarn build -``` - -You can also run the build in watch mode using - -``` -yarn watch -``` - -### Co-developing cdt-gdb-adapter - -If you are working on the cdt-gdb-adapter you can check it out to a different location and then link it in. - -From the cdt-gdb-adapter project run - -``` -yarn link -``` +The extension comes with a Memory Browser window. However, we have plans to deprecate and remove the window in favour of the Eclipse CDT Cloud [Memory Inspector](https://github.com/eclipse-cdt-cloud/vscode-memory-inspector) extension for Visual Studio Code which is available from the [Visual Studio Code Marketplace](https://marketplace.visualstudio.com/items?itemName=eclipse-cdt.memory-inspector) and the [Open VSX Registry](https://open-vsx.org/extension/eclipse-cdt/memory-inspector). -Then from this project run +Any feedback on these plans is welcomed in the discussion in GitHub issue [#110](https://github.com/eclipse-cdt-cloud/cdt-gdb-vscode/issues/110). -``` -yarn link cdt-gdb-adapter -``` +## Contributions -You can set up a VS Code workspace that has both folders. Also make sure you have builds running in each folder to pick up updates (e.g. `yarn watch`). +We welcome any feedback and contributions on [GitHub](https://github.com/eclipse-cdt-cloud/cdt-gdb-vscode). -The way to debug cdt-gdb-adapter works with the same principle as the example Mock Debug Adapter provided by VSCode. -For detailed instructions please refer to [Development Setup for Mock Debug](https://code.visualstudio.com/api/extension-guides/debugger-extension#development-setup-for-mock-debug). +Please raise [GitHub issues](https://github.com/eclipse-cdt-cloud/cdt-gdb-vscode/issues/new?template=Blank+issue) to submit feedback, defect reports, and enhancement requests. -The short step-by-step version is: +Check our [contribution guidelines](./CONTRIBUTING.md) for more information on how to contribute changes. And our [developer documentation](./DEVELOPMENT.md) for how to build and develop the extension. -1. Launch this extension with the `Extension` launch configuration ([cdt-gdb-vscode's launch.json](https://github.com/eclipse-cdt-cloud/cdt-gdb-vscode/blob/004a59f329136c2d5eb23e11e54b1f3f51b4d197/.vscode/launch.json#L8)) -2. Launch cdt-gdb-adapter in server mode with either `Server` or `Server (Target adapter)` depending on whether you want to use local debugging or target debugging, corresponding to `"type": "gdb"` and `"type": "gdbtarget"` respectively. ([cdt-gdb-adapter's launch.json](https://github.com/eclipse-cdt-cloud/cdt-gdb-adapter/blob/92bb15046fea82256742a69f0b240129a1949a76/.vscode/launch.json#L4-L21)) -3. Add a breakpoint somewhere useful, such as [`launchRequest`](https://github.com/eclipse-cdt-cloud/cdt-gdb-adapter/blob/6ba0de8e466f4953501181f53ecdfb14c7988973/src/desktop/GDBTargetDebugSession.ts#L94) -4. Add `"debugServer": 4711` to the launch configuration in the extension development host. The `4711` is the port number that cdt-gdb-adapter is listening on. -5. Debug the C/C++ program in the extension development host. +This open-source project is part of [Eclipse CDT Cloud](https://eclipse.dev/cdt-cloud/). diff --git a/package.json b/package.json index 7f73d51..3b5a7da 100644 --- a/package.json +++ b/package.json @@ -384,7 +384,7 @@ }, "serverPortRegExp": { "type": "string", - "description": "Regular expression to extract port from by examinging stdout/err of server. Once server is launched, port will be set to this if port is not set. Defaults to matching a string like 'Listening on port 41551' which is what gdbserver provides. Ignored if port or parameters is set", + "description": "Regular expression to extract port from by examining stdout/err of server. Once server is launched, port will be set to this if port is not set. Defaults to matching a string like 'Listening on port 41551' which is what gdbserver provides. Ignored if port or parameters is set", "default": "" }, "serverStartupDelay": {