Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 95 additions & 13 deletions docs/core/tutorials/debugging-with-visual-studio-code.md
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).
Expand All @@ -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.
Expand All @@ -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.
Copy link
Contributor

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)?


:::image type="content" source="media/debugging-with-visual-studio-code/codespaces-breakpoint-set.png" alt-text="Breakpoint set":::
Copy link
Contributor

Choose a reason for hiding this comment

The 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":::
Expand All @@ -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.
Copy link
Contributor

Choose a reason for hiding this comment

The 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.
Expand All @@ -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.

Expand Down Expand Up @@ -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":::

Expand All @@ -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

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading