-
Notifications
You must be signed in to change notification settings - Fork 6.1k
Update create .NET console app tutorial series to include sign-file apps with Codespaces #51321
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
base: main
Are you sure you want to change the base?
Changes from all commits
cecaf9a
0b3be36
cdc10c1
5141a85
7eaba44
0765d89
fc11e82
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,12 +1,23 @@ | ||
| --- | ||
| title: Debug a .NET console application using Visual Studio Code | ||
| description: Learn how to debug a .NET console app using Visual Studio Code. | ||
| ms.date: 10/23/2025 | ||
| ms.date: 01/27/2026 | ||
| zone_pivot_groups: code-editor-set-one | ||
| --- | ||
| # Tutorial: Debug a .NET console application using Visual Studio Code | ||
|
|
||
| ::: zone pivot="vscode" | ||
|
|
||
| This tutorial introduces the debugging tools available in Visual Studio Code for working with .NET apps. | ||
|
|
||
| ::: zone-end | ||
|
|
||
| ::: zone pivot="codespaces" | ||
|
|
||
| This tutorial introduces the debugging tools available in GitHub Codespaces for working with .NET apps. | ||
|
|
||
| ::: zone-end | ||
|
|
||
| ## Prerequisites | ||
|
|
||
| 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). | ||
|
|
@@ -17,16 +28,30 @@ This tutorial works with the console app that you create in [Create a .NET conso | |
|
|
||
| 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. | ||
|
|
||
| ::: zone pivot="vscode" | ||
|
|
||
| By default, Visual Studio Code launch settings use the Debug build configuration, so you don't need to change it before debugging. | ||
|
|
||
| 1. Start Visual Studio Code. | ||
|
|
||
| 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). | ||
|
|
||
| ::: zone-end | ||
|
|
||
| ::: zone pivot="codespaces" | ||
|
|
||
| By default, GitHub Codespaces uses the Debug build configuration, so you don't need to change it before debugging. | ||
|
|
||
| 1. Open your GitHub Codespace that you created in [Create a .NET console application using Visual Studio Code](with-visual-studio-code.md). | ||
|
|
||
| ::: zone-end | ||
|
|
||
| ## Set a breakpoint | ||
|
|
||
| A *breakpoint* temporarily interrupts the execution of the application before the line with the breakpoint is run. | ||
|
|
||
| ::: zone pivot="vscode" | ||
|
|
||
| 1. Open the *Program.cs* file. | ||
|
|
||
| 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. | ||
|
|
@@ -35,8 +60,22 @@ A *breakpoint* temporarily interrupts the execution of the application before th | |
|
|
||
| :::image type="content" source="media/debugging-with-visual-studio-code/breakpoint-set-net6.png" alt-text="Breakpoint set"::: | ||
|
|
||
| ::: zone-end | ||
|
|
||
| ::: zone pivot="codespaces" | ||
|
|
||
| 1. Open the *HelloWorld.cs* file. | ||
|
|
||
| 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. | ||
|
|
||
| :::image type="content" source="media/debugging-with-visual-studio-code/codespaces-breakpoint-set.png" alt-text="Breakpoint set"::: | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Most of the images for the codespace pivots use a non-standard syntax coloring that makes it really hard to read. |
||
|
|
||
| ::: zone-end | ||
|
|
||
| ## Start debugging | ||
|
|
||
| ::: zone pivot="vscode" | ||
|
|
||
| 1. Open the Debug view by selecting the Debugging icon on the left side menu. | ||
|
|
||
| :::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"::: | ||
|
|
@@ -57,6 +96,26 @@ A *breakpoint* temporarily interrupts the execution of the application before th | |
|
|
||
| :::image type="content" source="media/debugging-with-visual-studio-code/breakpoint-hit-net6.png" alt-text="Breakpoint hit, showing Locals"::: | ||
|
|
||
| ::: zone-end | ||
|
|
||
| ::: zone pivot="codespaces" | ||
|
|
||
| 1. Open the Debug view by selecting the Debugging icon on the left side menu. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You can do inline images. I may not know what the Debugging icon looks like, especially if I'm new. |
||
|
|
||
| :::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"::: | ||
|
|
||
| 1. Select **Run and Debug**. If asked, select **C#** as the debugger and then select **C#: Debug Active File** as the Launch Configuration. | ||
|
|
||
| 1. Select the **Debug Console** tab to see the "What is your name?" prompt that the program displays before waiting for a response. | ||
|
|
||
| 1. Enter a string in the **Debug Console** window in response to the prompt for a name, and then press <kbd>Enter</kbd>. | ||
|
|
||
| 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. | ||
|
|
||
| :::image type="content" source="media/debugging-with-visual-studio-code/codespaces-breakpoint-hit.png" alt-text="Breakpoint hit, showing Locals"::: | ||
|
|
||
| ::: zone-end | ||
|
|
||
| ## Use the Debug Console | ||
|
|
||
| The **Debug Console** window lets you interact with the application you're debugging. You can change the value of variables to see how it affects your program. | ||
|
|
@@ -77,7 +136,7 @@ The **Debug Console** window lets you interact with the application you're debug | |
|
|
||
| The values displayed in the console window correspond to the changes you made in the **Debug Console**. | ||
|
|
||
| :::image type="content" source="media/debugging-with-visual-studio-code/changed-variable-values.png" alt-text="Terminal showing the entered values"::: | ||
| :::image type="content" source="media/debugging-with-visual-studio-code/codespaces-changed-variable-values.png" alt-text="Terminal showing the entered values"::: | ||
|
|
||
| 1. Press <kbd>Enter</kbd> to exit the application and stop debugging. | ||
|
|
||
|
|
@@ -127,45 +186,43 @@ The program displays the string that the user enters. What happens if the user d | |
|
|
||
| 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. | ||
|
|
||
| 1. Set a breakpoint on the opening curly brace of the `Main` method. | ||
| 1. Set a breakpoint on the line of code that displays the "What is your name?" prompt. | ||
|
|
||
| 1. Press <kbd>F5</kbd> to start debugging. | ||
|
|
||
| Visual Studio Code highlights the breakpoint line. | ||
|
|
||
| At this point, the **Variables** window shows that the `args` array is empty, and `name` and `currentDate` have default values. | ||
|
|
||
| 1. Select **Run** > **Step Into** or press <kbd>F11</kbd>. | ||
| 1. Select **Step Into** from the Debug toolbar or press <kbd>F11</kbd>. | ||
|
|
||
| :::image type="content" source="media/debugging-with-visual-studio-code/step-into.png" alt-text="Step-Into button"::: | ||
|
|
||
| Visual Studio Code highlights the next line. | ||
|
|
||
| 1. Select **Run** > **Step Into** or press <kbd>F11</kbd>. | ||
| 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. | ||
|
|
||
| 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. | ||
| 1. Select **Step Into** or press <kbd>F11</kbd>. | ||
|
|
||
| 1. Select **Run** > **Step Into** or press <kbd>F11</kbd>. | ||
|
|
||
| Visual Studio highlights the `name` variable assignment. The **Variables** window shows that `name` is still `null`. | ||
| Visual Studio Code highlights the `name` variable assignment. The **Variables** window shows that `name` is still `null`. | ||
|
|
||
| 1. Respond to the prompt by entering a string in the Terminal tab and pressing <kbd>Enter</kbd>. | ||
|
|
||
| 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. | ||
|
|
||
| 1. Select **Run** > **Step Into** or press <kbd>F11</kbd>. | ||
| 1. Select **Step Into** or press <kbd>F11</kbd>. | ||
|
|
||
| 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. | ||
|
|
||
| 1. Select **Run** > **Step Into** or press <kbd>F11</kbd>. | ||
| 1. Select **Step Into** or press <kbd>F11</kbd>. | ||
|
|
||
| The **Variables** window shows the value of the `currentDate` variable after the assignment from the <xref:System.DateTime.Now?displayProperty=nameWithType> property. | ||
|
|
||
| 1. Select **Run** > **Step Into** or press <kbd>F11</kbd>. | ||
| 1. Select **Step Into** or press <kbd>F11</kbd>. | ||
|
|
||
| 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. | ||
|
|
||
| 1. Select **Run** > **Step Out** or press <kbd>Shift</kbd>+<kbd>F11</kbd>. | ||
| 1. Select **Step Out** or press <kbd>Shift</kbd>+<kbd>F11</kbd>. | ||
|
|
||
| :::image type="content" source="media/debugging-with-visual-studio-code/step-out.png" alt-text="Step-Out button"::: | ||
|
|
||
|
|
@@ -177,15 +234,40 @@ Visual Studio Code also allows you to step line by line through a program and mo | |
|
|
||
| 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. | ||
|
|
||
| ::: zone pivot="vscode" | ||
|
|
||
| To build and test the Release version of your console application, open the **Terminal** and run the following command: | ||
|
|
||
| ```dotnetcli | ||
| dotnet run --configuration Release | ||
| ``` | ||
|
|
||
| ::: zone-end | ||
|
|
||
| ::: zone pivot="codespaces" | ||
|
|
||
| To build and test the Release version of your console application, run the following command in the terminal: | ||
|
|
||
| ```dotnetcli | ||
| dotnet run --configuration Release HelloWorld.cs | ||
| ``` | ||
|
|
||
| ::: zone-end | ||
|
|
||
| ## Additional resources | ||
|
|
||
| ::: zone pivot="vscode" | ||
|
|
||
| - [Debugging in Visual Studio Code](https://code.visualstudio.com/docs/editor/debugging) | ||
|
|
||
| ::: zone-end | ||
|
|
||
| ::: zone pivot="codespaces" | ||
|
|
||
| - [Debugging in Visual Studio Code](https://code.visualstudio.com/docs/editor/debugging) | ||
| - [GitHub Codespaces documentation](https://docs.github.com/codespaces) | ||
|
|
||
| ::: zone-end | ||
|
|
||
| ## Next steps | ||
|
|
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Don't all of the other examples used in the VSCode pivot work (keyboard and menu)?