简体   繁体   中英

VS Code debugger cannot “step” for .NET Console App

I'm using VS code to write a simple .NET console application. Here's a look at my app's entry point:

Program.cs :

using System;

namespace MyApp
{
  class Program
  {
    public static void Main(string[] args)
    {
      Console.WriteLine("test");
      Console.WriteLine("another test");
    }
  }
}

I set a breakpoint on the line that reads, Console.WriteLine("test") , and start VS Code's debugger. The debugger highlights the line I've selected once it reaches that point in execution. Great. Then I press the "step over" button.

Expected behavior: test will be written to the debug console and the debugger will advance to the next line of code.

Actual behavior: test is not written to the debug console. Execution stops immediately and the console reads: The program '[3803] MyApp.dll' has exited with code 0 (0x0).

I re-launch my simple application without changing anything. The debugger once again stops at Console.WriteLine("test") . This time I press F5 to continue running. Again, nothing is written to the console and I am shown that the app has exited with code 0 .

I re-launch the app, again. When the debugger stops at Console.WriteLine("test") , I un-set my breakpoint and press F5. test is written to the console, followed by another test , and the application finishes ( with code 0 , of course). I've found that the debugger will break at a later breakpoint, but I must un-set each breakpoint as it is reached (and then continue running / press F5)... otherwise the application stops running and I'm shown the same, simple exited with code 0 message. Un-setting a breakpoint makes no difference for "stepping over" / "stepping into" - those commands do not seem to work at all.

For what it's worth, I'm working on a MacBook running macOS Big Sur on an Apple M1 chip (I have no idea if this is useful information). Here is more detailed information about my workspace configuration:

MyApp.soln :


Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.808.8
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MyApp", "MyApp\MyApp.csproj", "{D12824DE-83AF-4C7B-B5C2-C6CB1B9554C6}"
EndProject
Global
  GlobalSection(SolutionConfigurationPlatforms) = preSolution
    Debug|anycpu = Debug|anycpu
    Release|anycpu = Release|anycpu
  EndGlobalSection
  GlobalSection(ProjectConfigurationPlatforms) = postSolution
    {D12824DE-83AF-4C7B-B5C2-C6CB1B9554C6}.Debug|anycpu.ActiveCfg = Debug|anycpu
    {D12824DE-83AF-4C7B-B5C2-C6CB1B9554C6}.Debug|anycpu.Build.0 = Debug|anycpu
    {D12824DE-83AF-4C7B-B5C2-C6CB1B9554C6}.Release|anycpu.ActiveCfg = Release|anycpu
    {D12824DE-83AF-4C7B-B5C2-C6CB1B9554C6}.Release|anycpu.Build.0 = Release|anycpu
  EndGlobalSection
  GlobalSection(SolutionProperties) = preSolution
    HideSolutionNode = FALSE
  EndGlobalSection
  GlobalSection(ExtensibilityGlobals) = postSolution
    SolutionGuid = {8A94F55D-F55A-450C-A412-10554B4B7799}
  EndGlobalSection
EndGlobal

MyApp.csproj :

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>

</Project>

launch.json :

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": ".NET Core Launch (console)",
      "type": "coreclr",
      "request": "launch",
      "preLaunchTask": "build",
      "program": "${workspaceFolder}/MyApp/bin/Debug/net5.0/MyApp.dll",
      "args": [],
      "cwd": "${workspaceFolder}/MyApp/bin/Debug/net5.0",
      "stopAtEntry": false,
      "console": "internalConsole"
    }
  ]
}

tasks.json :

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "command": "dotnet",
            "type": "process",
            "args": [
                "build",
                "${workspaceFolder}/MyApp/MyApp.csproj",
                "/property:GenerateFullPaths=true",
                "/consoleloggerparameters:NoSummary"
            ],
            "problemMatcher": "$msCompile"
        },
        {
            "label": "publish",
            "command": "dotnet",
            "type": "process",
            "args": [
                "publish",
                "${workspaceFolder}/MyApp/MyApp.csproj",
                "/property:GenerateFullPaths=true",
                "/consoleloggerparameters:NoSummary"
            ],
            "problemMatcher": "$msCompile"
        },
        {
            "label": "watch",
            "command": "dotnet",
            "type": "process",
            "args": [
                "watch",
                "run",
                "${workspaceFolder}/MyApp/MyApp.csproj",
                "/property:GenerateFullPaths=true",
                "/consoleloggerparameters:NoSummary"
            ],
            "problemMatcher": "$msCompile"
        }
    ]
}

How can I get VS Code's debugger to work as expected?

I believe that the .NET 5.0 SDK is not fully compatible with the new Apple M1 chip. I followed the process below on two Macs: one with an Intel chip and the other with an M1 chip:

  1. Install the .NET 5.0 SDK .
  2. Run dotnet new console to create a new console application.
  3. Create a file, .vscode/launch.json , open it, and click the "Add Configuration" button. Select .NET: Launch .NET Core Console App . Update all placeholder-text in the file according to the structure of your project. You'll also need to create a .vscode/tasks.json file like the one that I included in my original post.
  4. Attempt to debug the project in VS Code.

Running and debugging the application with this launch configuration works as expected on my Intel-chip-Mac, but not on my M1-chip-Mac. Looks like I'll be working from my old Mac until an M1-compatible .NET SDK is released.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM