You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/core/tutorials/debugging-with-visual-studio-code.md
+87-32Lines changed: 87 additions & 32 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,51 +1,76 @@
1
1
---
2
2
title: Debug a .NET console application using Visual Studio Code
3
3
description: Learn how to debug a .NET console app using Visual Studio Code.
4
-
ms.date: 10/23/2025
4
+
ms.date: 01/27/2026
5
+
zone_pivot_groups: code-editor-set-one
5
6
---
6
7
# Tutorial: Debug a .NET console application using Visual Studio Code
7
8
9
+
::: zone pivot="vscode"
10
+
8
11
This tutorial introduces the debugging tools available in Visual Studio Code for working with .NET apps.
9
12
13
+
::: zone-end
14
+
15
+
::: zone pivot="codespaces"
16
+
17
+
This tutorial introduces the debugging tools available in GitHub Codespaces for working with .NET apps.
18
+
19
+
::: zone-end
20
+
10
21
## Prerequisites
11
22
12
23
This tutorial works with the console app that you create in [Create a .NET console application using Visual Studio Code](with-visual-studio-code.md).
13
24
14
-
## Use Debug build configuration
15
-
16
-
*Debug* and *Release* are .NET's built-in build configurations. You use the Debug build configuration for debugging and the Release configuration for the final release distribution.
25
+
## Set a breakpoint
17
26
18
-
In the Debug configuration, a program compiles with full symbolic debug information and no optimization. Optimization complicates debugging, because the relationship between source code and generated instructions is more complex. The release configuration of a program has no symbolic debug information and is fully optimized.
27
+
A *breakpoint* temporarily interrupts the execution of the application before the line with the breakpoint is run.
19
28
20
-
By default, Visual Studio Code launch settings use the Debug build configuration, so you don't need to change it before debugging.
29
+
::: zone pivot="vscode"
21
30
22
31
1. Start Visual Studio Code.
23
32
24
33
1. Open the folder of the project that you created in [Create a .NET console application using Visual Studio Code](with-visual-studio-code.md).
25
34
26
-
## Set a breakpoint
27
-
28
-
A *breakpoint* temporarily interrupts the execution of the application before the line with the breakpoint is run.
29
-
30
35
1. Open the *Program.cs* file.
31
36
32
37
1. Set a *breakpoint* on the line that displays the name, date, and time, by clicking in the left margin of the code window. The left margin is to the left of the line numbers. Other ways to set a breakpoint are by pressing <kbd>F9</kbd> or choosing **Run** > **Toggle Breakpoint** from the menu while the line of code is selected.
33
38
34
39
Visual Studio Code indicates the line on which the breakpoint is set by displaying a red dot in the left margin.
1. Open your GitHub Codespace that you created in [Create a .NET console application using Visual Studio Code](with-visual-studio-code.md).
48
+
49
+
1. Open the *HelloWorld.cs* file.
50
+
51
+
1. Set a *breakpoint* on the line that displays the name, date, and time, by clicking in the left margin of the code window. The left margin is to the left of the line numbers. You can also set a breakpoint are by pressing <kbd>F9</kbd> while the line of code is selected.
*Debug* and *Release* are .NET's built-in build configurations. You use the Debug build configuration for debugging and the Release configuration for the final release distribution.
60
+
61
+
::: zone pivot="vscode"
62
+
63
+
By default, Visual Studio Code launch settings use the Debug build configuration, so you don't need to change it before debugging.
64
+
40
65
1. Open the Debug view by selecting the Debugging icon on the left side menu.
41
66
42
-
:::image type="content" source="media/debugging-with-visual-studio-code/select-debug-pane-net6.png" alt-text="Open the Debug tab in Visual Studio Code":::
67
+
:::image type="content" source="media/debugging-with-visual-studio-code/select-debug-pane.png" alt-text="Open the Debug tab in Visual Studio Code":::
43
68
44
69
1. Select **Run and Debug**. If asked, select **C#** and then select **C#: Launch startup project**. Other ways to start the program in debugging mode are by pressing <kbd>F5</kbd> or choosing **Run** > **Start Debugging** from the menu.
1. If asked to **Select Launch Configuration**, select **C#: HelloWorld HelloWorld**.
73
+
1. If asked to **Select Launch Configuration**, select **C#: Debug Active File**.
49
74
50
75
1. Select the **Debug Console** tab to see the "What is your name?" prompt that the program displays before waiting for a response.
51
76
@@ -55,7 +80,29 @@ A *breakpoint* temporarily interrupts the execution of the application before th
55
80
56
81
Program execution stops when it reaches the breakpoint and before the `Console.WriteLine` method runs. The **Locals** section of the **Variables** window displays the values of variables that are defined in the currently running method.
By default, GitHub Codespaces uses the Debug build configuration, so you don't need to change it before debugging.
90
+
91
+
1. Open the Debug view by selecting the Debugging icon on the left side menu.
92
+
93
+
:::image type="content" source="media/debugging-with-visual-studio-code/codespaces-select-debug-pane.png" alt-text="Open the Debug tab in Visual Studio Code":::
94
+
95
+
1. Select **Run and Debug**. If asked, select **C#** as the debugger and then select **C#: Debug Active File** as the Launch Configuration.
96
+
97
+
1. Select the **Debug Console** tab to see the "What is your name?" prompt that the program displays before waiting for a response.
98
+
99
+
1. Enter a string in the **Debug Console** window in response to the prompt for a name, and then press <kbd>Enter</kbd>.
100
+
101
+
Program execution stops when it reaches the breakpoint and before the `Console.WriteLine` method runs. The **Locals** section of the **Variables** window displays the values of variables that are defined in the currently running method.
1. Enter `currentDate = DateTime.Parse("2019-11-16T17:25:00Z").ToUniversalTime()` at the bottom of the **Debug Console** window and press <kbd>Enter</kbd>.
117
+
1. Enter `currentDate = DateTime.Parse("2026-01-28T20:54:00Z").ToUniversalTime()` at the bottom of the **Debug Console** window and press <kbd>Enter</kbd>.
71
118
72
119
The **Variables** window displays the new values of the `name` and `currentDate` variables.
73
120
@@ -77,7 +124,7 @@ The **Debug Console** window lets you interact with the application you're debug
77
124
78
125
The values displayed in the console window correspond to the changes you made in the **Debug Console**.
79
126
80
-
:::image type="content" source="media/debugging-with-visual-studio-code/changed-variable-values.png" alt-text="Terminal showing the entered values":::
127
+
:::image type="content" source="media/debugging-with-visual-studio-code/codespaces-changed-variable-values.png" alt-text="Terminal showing the entered values":::
81
128
82
129
1. Press <kbd>Enter</kbd> to exit the application and stop debugging.
83
130
@@ -87,15 +134,15 @@ The program displays the string that the user enters. What happens if the user d
87
134
88
135
1. Right-click (<kbd>Ctrl</kbd>-click on macOS) on the red dot that represents the breakpoint. In the context menu, select **Edit Breakpoint** to open a dialog that lets you enter a conditional expression.
1. Select `Expression` in the drop-down, enter the following conditional expression, and press <kbd>Enter</kbd>.
93
140
94
141
```csharp
95
142
String.IsNullOrEmpty(name)
96
143
```
97
144
98
-
:::image type="content" source="media/debugging-with-visual-studio-code/conditional-expression-net6.png" alt-text="Enter a conditional expression":::
145
+
:::image type="content" source="media/debugging-with-visual-studio-code/conditional-expression.png" alt-text="Enter a conditional expression":::
99
146
100
147
Each time the breakpoint is hit, the debugger calls the `String.IsNullOrEmpty(name)` method, and it breaks on this line only if the method call returns `true`.
101
148
@@ -127,45 +174,43 @@ The program displays the string that the user enters. What happens if the user d
127
174
128
175
Visual Studio Code also allows you to step line by line through a program and monitor its execution. Ordinarily, you'd set a breakpoint and follow program flow through a small part of your program code. Since this program is small, you can step through the entire program.
129
176
130
-
1. Set a breakpoint on the opening curly brace of the `Main` method.
177
+
1. Set a breakpoint on the line of code that displays the "What is your name?" prompt.
131
178
132
179
1. Press <kbd>F5</kbd> to start debugging.
133
180
134
181
Visual Studio Code highlights the breakpoint line.
135
182
136
183
At this point, the **Variables** window shows that the `args` array is empty, and `name` and `currentDate` have default values.
137
184
138
-
1. Select **Run** > **Step Into** or press <kbd>F11</kbd>.
185
+
1. Select **Step Into** from the Debug toolbar or press <kbd>F11</kbd>.
1. Select **Run** > **Step Into** or press <kbd>F11</kbd>.
145
-
146
-
Visual Studio Code runs the `Console.WriteLine` for the name prompt and highlights the next line of execution. The next line is the `Console.ReadLine` for the `name`. The **Variables** window is unchanged, and the **Terminal** tab shows the "What is your name?" prompt.
191
+
1. Visual Studio Code runs the `Console.WriteLine` for the name prompt and highlights the next line of execution. The next line is the `Console.ReadLine` for the `name`. The **Variables** window is unchanged, and the **Terminal** tab shows the "What is your name?" prompt.
147
192
148
-
1. Select **Run** > **Step Into** or press <kbd>F11</kbd>.
193
+
1. Select **Step Into** or press <kbd>F11</kbd>.
149
194
150
-
Visual Studio highlights the `name` variable assignment. The **Variables** window shows that `name` is still `null`.
195
+
Visual Studio Code highlights the `name` variable assignment. The **Variables** window shows that `name` is still `null`.
151
196
152
197
1. Respond to the prompt by entering a string in the Terminal tab and pressing <kbd>Enter</kbd>.
153
198
154
199
The **Debug Console** tab might not display the string you enter while you're entering it, but the <xref:System.Console.ReadLine%2A?displayProperty=nameWithType> method will capture your input.
155
200
156
-
1. Select **Run** > **Step Into** or press <kbd>F11</kbd>.
201
+
1. Select **Step Into** or press <kbd>F11</kbd>.
157
202
158
203
Visual Studio Code highlights the `currentDate` variable assignment. The **Variables** window shows the value returned by the call to the <xref:System.Console.ReadLine%2A?displayProperty=nameWithType> method. The **Terminal** tab displays the string you entered at the prompt.
159
204
160
-
1. Select **Run** > **Step Into** or press <kbd>F11</kbd>.
205
+
1. Select **Step Into** or press <kbd>F11</kbd>.
161
206
162
207
The **Variables** window shows the value of the `currentDate` variable after the assignment from the <xref:System.DateTime.Now?displayProperty=nameWithType> property.
163
208
164
-
1. Select **Run** > **Step Into** or press <kbd>F11</kbd>.
209
+
1. Select **Step Into** or press <kbd>F11</kbd>.
165
210
166
211
Visual Studio Code calls the <xref:System.Console.WriteLine(System.String,System.Object,System.Object)?displayProperty=nameWithType> method. The console window displays the formatted string.
167
212
168
-
1. Select **Run** > **Step Out** or press <kbd>Shift</kbd>+<kbd>F11</kbd>.
213
+
1. Select **Step Out** or press <kbd>Shift</kbd>+<kbd>F11</kbd>.
@@ -177,15 +222,25 @@ Visual Studio Code also allows you to step line by line through a program and mo
177
222
178
223
Once you've tested the Debug version of your application, you should also compile and test the Release version. The Release version incorporates compiler optimizations that can affect the behavior of an application. For example, compiler optimizations that are designed to improve performance can create race conditions in multithreaded applications.
179
224
225
+
::: zone pivot="vscode"
226
+
180
227
To build and test the Release version of your console application, open the **Terminal** and run the following command:
181
228
182
229
```dotnetcli
183
230
dotnet run --configuration Release
184
231
```
185
232
186
-
## Additional resources
233
+
::: zone-end
234
+
235
+
::: zone pivot="codespaces"
236
+
237
+
To build and test the Release version of your console application, run the following command in the terminal:
238
+
239
+
```dotnetcli
240
+
dotnet run --configuration Release HelloWorld.cs
241
+
```
187
242
188
-
-[Debugging in Visual Studio Code](https://code.visualstudio.com/docs/editor/debugging)
0 commit comments