Skip to content

Commit e01e806

Browse files
author
Colin Robertson
committed
Acrolinx fix followup for PR2784
1 parent aaf0155 commit e01e806

File tree

1 file changed

+33
-32
lines changed

1 file changed

+33
-32
lines changed

docs/build/configure-cmake-debugging-sessions.md

Lines changed: 33 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: "Configure CMake debugging sessions in Visual Studio"
3-
description: "Describes how to use Visual Studio to configure CMake debugger settings"
4-
ms.date: "01/13/2020"
3+
description: "Describes how to use Visual Studio to configure CMake debugger settings."
4+
ms.date: "04/02/2020"
55
helpviewer_keywords: ["CMake debugging"]
66
---
77
# Configure CMake debugging sessions
@@ -26,9 +26,9 @@ Then, right-click on an executable and select **Debug**. This command automatica
2626

2727
## Customize debugger settings
2828

29-
You can customize the debugger settings for any executable CMake target in your project in a configuration file called *launch.vs.json*, located in a *.vs* folder in your project root. A launch configuration file is useful in most debugging scenarios, because you can configure and save your debugging setup details. There are three entry points to this file:
29+
You can customize the debugger settings for any executable CMake target in your project. They're found in a configuration file called *launch.vs.json*, located in a *`.vs`* folder in your project root. A launch configuration file is useful in most debugging scenarios, because you can configure and save your debugging setup details. There are three entry points to this file:
3030

31-
- **Debug Menu:** Select **Debug > Debug and Launch Settings for ${activeDebugTarget}** from the main menu to customize the debug configuration specific to your active debug target. If you don't have a debug target selected, this option will be grayed out.
31+
- **Debug Menu:** Select **Debug > Debug and Launch Settings for ${activeDebugTarget}** from the main menu to customize the debug configuration specific to your active debug target. If you don't have a debug target selected, this option is grayed out.
3232

3333
![Debug menu entry point](media/cmake-debug-menu.png "Debug menu entry point")
3434

@@ -40,11 +40,11 @@ You can customize the debugger settings for any executable CMake target in your
4040

4141
![Select a debugger dialog box](media/cmake-select-a-debugger.png "Select a debugger dialog box")
4242

43-
When you save the *launch.vs.json* file, Visual Studio creates an entry for the new configuration in the **Startup Item** dropdown. You can edit the *launch.vs.json* file to create multiple debug configurations, for any number of CMake targets.
43+
You can edit the *launch.vs.json* file to create debug configurations for any number of CMake targets. When you save the file, Visual Studio creates an entry for each new configuration in the **Startup Item** dropdown.
4444

4545
## Reference keys in CMakeSettings.json
4646

47-
To reference any key in a *CMakeSettings.json* file, preface it with `cmake.` in *launch.vs.json*. The following example shows a simple *launch.vs.json* file that pulls in the value of the `remoteCopySources` key in the *CMakeSettings.json* file for the currently selected configuration:
47+
To reference any key in a *CMakeSettings.json* file, prepend `cmake.` to it in *launch.vs.json*. The following example shows a simple *launch.vs.json* file that pulls in the value of the `remoteCopySources` key in the *CMakeSettings.json* file for the currently selected configuration:
4848

4949
```json
5050
{
@@ -62,15 +62,15 @@ To reference any key in a *CMakeSettings.json* file, preface it with `cmake.` in
6262
}
6363
```
6464

65-
**Environment variables** defined in CMakeSettings.json can also be used in launch.vs.json using the syntax `${env.VARIABLE_NAME}`. In Visual Studio 2019 version 16.4 and later, debug targets are automatically launched with the environment you specify in CMakeSettings.json. You can unset an environment variable by setting it to **null**.
65+
**Environment variables** defined in *CMakeSettings.json* can also be used in launch.vs.json using the syntax `${env.VARIABLE_NAME}`. In Visual Studio 2019 version 16.4 and later, debug targets are automatically launched using the environment you specify in *CMakeSettings.json*. You can unset an environment variable by setting it to **null**.
6666

6767
## Launch.vs.json reference
6868

6969
There are many *launch.vs.json* properties to support all your debugging scenarios. The following properties are common to all debug configurations, both remote and local:
7070

7171
- `projectTarget`: Specifies the CMake target to invoke when building the project. Visual Studio autopopulates this property if you enter *launch.vs.json* from the **Debug Menu** or **Targets View**. This value must match the name of an existing debug target listed in the **Startup Item** dropdown.
7272

73-
- `env`: Additional environment variables to add with the syntax:
73+
- `env`: Additional environment variables to add using the syntax:
7474

7575
```json
7676
"env": {
@@ -83,56 +83,56 @@ There are many *launch.vs.json* properties to support all your debugging scenari
8383

8484
## Launch.vs.json reference for remote projects and WSL
8585

86-
In Visual Studio 2019 version 16.6 we added a new debug configuration of `type: cppgdb` to simplify debugging on remote systems and WSL. Old debug configurations of `type: cppdbg` are still supported.
86+
In Visual Studio 2019 version 16.6, we added a new debug configuration of `type: cppgdb` to simplify debugging on remote systems and WSL. Old debug configurations of `type: cppdbg` are still supported.
8787

8888
### Configuration type `cppgdb`
8989

9090
- `name`: A friendly name to identify the configuration in the **Startup Item** dropdown.
91-
- `project`: Specifies the relative path to the project file. You shouldn't need to change this when debugging a CMake project.
92-
- `projectTarget`: Specifies the CMake target to invoke when building the project. Visual Studio autopopulates this property if you enter *launch.vs.json* from the **Debug Menu** or **Targets View**. This value must match the name of an existing debug target listed in the **Startup Item** dropdown.
93-
- `debuggerConfiguration`: Indicates which set of debugging default values to use. In Visual Studio 2019 version 16.6, the only valid option is **gdb**.
91+
- `project`: Specifies the relative path to the project file. Normally, you don't need to change this path when debugging a CMake project.
92+
- `projectTarget`: Specifies the CMake target to invoke when building the project. Visual Studio autopopulates this property if you enter *launch.vs.json* from the **Debug Menu** or **Targets View**. This target value must match the name of an existing debug target listed in the **Startup Item** dropdown.
93+
- `debuggerConfiguration`: Indicates which set of debugging default values to use. In Visual Studio 2019 version 16.6, the only valid option is `gdb`. Earlier versions also support `gdbserver`.
9494
- `args`: Command-line arguments passed on startup to the program being debugged.
9595
- `env`: Additional environment variables passed to the program being debugged. For example, `{"DISPLAY": "0.0"}`.
9696
- `processID`: Linux process ID to attach to. Only used when attaching to a remote process. For more information, see [Troubleshoot attaching to processes using GDB](https://github.com/Microsoft/MIEngine/wiki/Troubleshoot-attaching-to-processes-using-GDB).
9797

98-
#### Additional options allowed with the `gdb` configuration
98+
#### Additional options for the `gdb` configuration
9999

100100
- `program`: Defaults to `"${debugInfo.fullTargetPath}"`. The Unix path to the application to debug. Only required if different than the target executable in the build or deploy location.
101101
- `remoteMachineName`: Defaults to `"${debugInfo.remoteMachineName}"`. Name of the remote system that hosts the program to debug. Only required if different than the build system. Must have an existing entry in the [Connection Manager](../linux/connect-to-your-remote-linux-computer.md). Press **Ctrl+Space** to view a list of all existing remote connections.
102102
- `cwd`: Defaults to `"${debugInfo.defaultWorkingDirectory}"`. The Unix path to the directory on the remote system where `program` is run. The directory must exist.
103-
- `gdbpath`: Defaults to `/usr/bin/gdb`. Full Unix path to the gdb used to debug. Only required if using a custom version of gdb.
104-
- `preDebugCommand`: A Linux command to run immediately before invoking gdb. Gdb will not start until it completes. You can use this to run a script before the execution of gdb.
103+
- `gdbpath`: Defaults to `/usr/bin/gdb`. Full Unix path to the `gdb` used to debug. Only required if using a custom version of `gdb`.
104+
- `preDebugCommand`: A Linux command to run immediately before invoking `gdb`. `gdb` doesn't start until the command completes. You can use the option to run a script before the execution of `gdb`.
105105

106106
#### Deployment options
107107

108-
Use the following options to separate your build machine (defined in CMakeSettings.json) from your remote debug machine.
108+
Use the following options to separate your build machine (defined in CMakeSettings.json) from your remote debug machine.
109109

110110
- `remoteMachineName`: Remote debug machine. Only required if different than the build machine. Must have an existing entry in the [Connection Manager](../linux/connect-to-your-remote-linux-computer.md). Press **Ctrl+Space** to view a list of all existing remote connections.
111111
- `disableDeploy`: Defaults to `false`. Indicates whether build/debug separation is disabled. When `false`, this option allows build and debug to occur on two separate machines.
112-
- `deployDirectory`: Full Unix path to the directory on `remoteMachineName` that the executable will be copied to.
113-
- `deploy`: An array of advanced deployment settings. You only need to configure these settings when you want more granular control over the deployment process. By default, only the files necessary for the process to debug will be deployed to the remote debug machine.
114-
- `sourceMachine`: The machine from which the file or directory will be copied. Press **Ctrl+Space** to view a list of all the remote connections stored in the Connection Manager. When building natively on WSL this option will be ignored.
115-
- `targetMachine`: The machine to which the file or directory will be copied. Press **Ctrl+Space** to view a list of all the remote connections stored in the Connection Manager.
112+
- `deployDirectory`: Full Unix path to the directory on `remoteMachineName` that the executable gets copied to.
113+
- `deploy`: An array of advanced deployment settings. You only need to configure these settings when you want more granular control over the deployment process. By default, only the files necessary for the process to debug get deployed to the remote debug machine.
114+
- `sourceMachine`: The machine from which the file or directory is copied. Press **Ctrl+Space** to view a list of all the remote connections stored in the Connection Manager. When building natively on WSL, this option is ignored.
115+
- `targetMachine`: The machine to which the file or directory is copied. Press **Ctrl+Space** to view a list of all the remote connections stored in the Connection Manager.
116116
- `sourcePath`: The file or directory location on `sourceMachine`.
117117
- `targetPath`: The file or directory location on `targetMachine`.
118118
- `deploymentType`: A description of the deployment type. `LocalRemote` and `RemoteRemote` are supported. `LocalRemote` means copying from the local file system to the remote system specified by `remoteMachineName` in *launch.vs.json*. `RemoteRemote` means copying from the remote build system specified in *CMakeSettings.json* to the different remote system specified in *launch.vs.json*.
119119
- `executable`: Indicates whether the deployed file is an executable.
120120

121-
### Execute custom gdb commands
121+
### Execute custom `gdb` commands
122122

123-
Visual Studio supports executing custom gdb commands to interact directly with the underlying debugger. [Learn more](https://github.com/microsoft/MIEngine/wiki/Executing-custom-gdb-lldb-commands)
123+
Visual Studio supports executing custom `gdb` commands to interact with the underlying debugger directly. For more information, see [Executing custom `gdb` lldb commands](https://github.com/microsoft/MIEngine/wiki/Executing-custom-gdb-lldb-commands).
124124

125125
### Enable logging
126126

127-
Enable MIEngine logging to see what commands get sent to gdb, what output gdb returns, and how long each command takes. [Learn more](https://github.com/microsoft/MIEngine/wiki/Logging)
127+
Enable MIEngine logging to see what commands get sent to `gdb`, what output `gdb` returns, and how long each command takes. [Learn more](https://github.com/microsoft/MIEngine/wiki/Logging)
128128

129129
### Configuration type `cppdbg`
130130

131131
The following options can be used when debugging on a remote system or WSL using the `cppdbg` configuration type. In Visual Studio 2019 version 16.6 or later, configuration type `cppgdb` is recommended.
132132

133133
- `name`: A friendly name to identify the configuration in the **Startup Item** dropdown.
134134

135-
- `project`: Specifies the relative path to the project file. You shouldn't need to change this when debugging a CMake project.
135+
- `project`: Specifies the relative path to the project file. Normally, you don't need to change this value when debugging a CMake project.
136136

137137
- `projectTarget`: Specifies the CMake target to invoke when building the project. Visual Studio autopopulates this property if you enter *launch.vs.json* from the **Debug Menu** or **Targets View**. This value must match the name of an existing debug target listed in the **Startup Item** dropdown.
138138

@@ -161,7 +161,7 @@ The following options can be used when debugging on a remote system or WSL using
161161
]
162162
```
163163

164-
- `pipeArgs`: An array of command-line arguments passed to the pipe program to configure the connection. The pipe program is used to relay standard input/output between Visual Studio and gdb. Most of this array **does not need to be customized** when debugging CMake projects. The exception is the `${debuggerCommand}`. which launches gdb on the remote system and can be modified to:
164+
- `pipeArgs`: An array of command-line arguments passed to the pipe program to configure the connection. The pipe program is used to relay standard input/output between Visual Studio and `gdb`. Most of this array **doesn't need to be customized** when debugging CMake projects. The exception is the `${debuggerCommand}`, which launches `gdb` on the remote system. It can be modified to:
165165

166166
- Export the value of the environment variable DISPLAY on your Linux system. In the following example, this value is `:1`.
167167

@@ -177,7 +177,7 @@ The following options can be used when debugging on a remote system or WSL using
177177
],
178178
```
179179

180-
- Run a script before the execution of gdb. Ensure execute permissions are set on your script.
180+
- Run a script before the execution of `gdb`. Ensure execute permissions are set on your script.
181181

182182
```json
183183
"pipeArgs": [
@@ -193,18 +193,19 @@ The following options can be used when debugging on a remote system or WSL using
193193

194194
- `stopOnEntry`: A boolean that specifies whether to break as soon as the process is launched. The default is false.
195195

196-
- `visualizerFile`: A [.natvis file](/visualstudio/debugger/create-custom-views-of-native-objects) to use when debugging this process. This option is incompatible with gdb pretty printing. Also set `showDisplayString` when you set this property.
196+
- `visualizerFile`: A [.natvis file](/visualstudio/debugger/create-custom-views-of-native-objects) to use when debugging this process. This option is incompatible with `gdb` pretty printing. Also set `showDisplayString` when you set this property.
197197

198198
- `showDisplayString`: A boolean that enables the display string when a `visualizerFile` is specified. Setting this option to `true` can cause slower performance during debugging.
199199

200-
- `setupCommands`: One or more gdb command(s) to execute, to set up the underlying debugger.
200+
- `setupCommands`: One or more `gdb` command(s) to execute, to set up the underlying debugger.
201+
202+
- `miDebuggerPath`: The full path to `gdb`. When unspecified, Visual Studio searches PATH first for the debugger.
201203

202-
- `miDebuggerPath`: The full path to gdb. When unspecified, Visual Studio searches PATH first for the debugger.
204+
- Finally, all of the deployment options defined for the `cppgdb` configuration type can be used by the `cppdbg` configuration type as well.
203205

204-
- Finally, all of the deployment options defined for the `cppgdb` configuration type can be used with the `cppdbg` configuration type as well.
206+
### Debug using `gdbserver`
205207

206-
### Debugging with gdbserver
207-
You can configure the `cppdbg` configuration to debug with gdbserver. More details and a sample launch configuration can be found [here](https://devblogs.microsoft.com/cppblog/debugging-linux-cmake-projects-with-gdbserver/).
208+
You can configure the `cppdbg` configuration to debug using `gdbserver`. You can find more details and a sample launch configuration in the Microsoft C++ Team Blog post [Debugging Linux CMake Projects with `gdbserver`](https://devblogs.microsoft.com/cppblog/debugging-linux-cmake-projects-with-gdbserver/).
208209

209210
::: moniker-end
210211

0 commit comments

Comments
 (0)