【问题标题】:VS Code debugger cannot "step" for .NET Console AppVS Code 调试器无法为 .NET 控制台应用程序“步进”
【发布时间】:2021-05-17 10:00:17
【问题描述】:

我正在使用 VS 代码编写一个简单的 .NET 控制台应用程序。下面看一下我的应用程序的入口点:

Program.cs:

using System;

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

我在Console.WriteLine("test") 的行上设置了一个断点,然后启动 VS Code 的调试器。一旦到达执行点,调试器就会突出显示我选择的行。伟大的。然后我按下“跳过”按钮。

预期行为:test 将被写入调试控制台,调试器将前进到下一行代码。

实际行为:test 未写入调试控制台。执行立即停止,控制台显示:The program '[3803] MyApp.dll' has exited with code 0 (0x0).

我重新启动了我的简单应用程序,没有进行任何更改。调试器再次停在Console.WriteLine("test")。这次我按 F5 继续运行。同样,没有任何内容写入控制台,我看到应用程序 has exited with code 0

我再次重新启动该应用程序。当调试器停在Console.WriteLine("test") 时,我取消设置我的断点并按 F5。 test 被写入控制台,然后是another test,应用程序完成(当然是with code 0)。我发现调试器会在稍后的断点处中断,但是我必须在到达每个断点时取消设置(然后继续运行/按 F5)...否则应用程序将停止运行我也看到了同样简单的exited with code 0 消息。取消设置断点对于“越过”/“进入”没有任何影响——这些命令似乎根本不起作用。

对于它的价值,我正在开发一台在 Apple M1 芯片上运行 macOS Big Sur 的 MacBook(我不知道这是否是有用的信息)。以下是有关我的工作区配置的更多详细信息:

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"
        }
    ]
}

如何让 VS Code 的调试器按预期工作?

【问题讨论】:

  • 我怀疑这里的任何人都有办法确定问题所在。您应该检查的第一件事是您正在使用什么构建配置。默认是有一个“调试”和一个“发布”。由于编译器进行了优化,尝试调试后者可能会导致一些奇怪的行为,就像您所看到的那样,这会导致程序中的逐行语句与调试时正在执行的指令不完全对应。
  • @PeterDuniho 这是个好主意。在 Visual Studio 中调试 WPF 应用程序时,我已经看到了您所说的内容。我最初在 Visual Studio for Mac 中制作了这个解决方案,并编辑了 .soln 和 .csproj 文件,直到我设法在 VS Code 中运行它......直到现在,我一直依赖 Visual Studio 来维护这些特定文件。我很可能以某种方式搞砸了一些事情。我明天再看看,我会带着我的发现回来。谢谢!
  • @PeterDuniho 不幸的是,构建配置问题是一条死胡同,但我想我已经确定 M1 芯片存在兼容性问题。我运行dotnet new console 从头开始​​,问题仍然存在。我在带有英特尔芯片的旧 Mac 上遵循了相同的过程,并且调试按预期工作。在这两种情况下,我的目标框架都是 .NET 5.0。系统架构是我知道我运行的两个测试之间存在的唯一区别。我怀疑在发布与 M1 芯片完全兼容的 SDK 之前,我将不得不使用我的旧 Mac。谢谢!

标签: c# .net visual-studio-code vscode-debugger


【解决方案1】:

我认为 .NET 5.0 SDK 与新的 Apple M1 芯片并不完全兼容。我在两台 Mac 上遵循以下流程:一台使用 Intel 芯片,另一台使用 M1 芯片:

  1. 安装.NET 5.0 SDK
  2. 运行 dotnet new console 以创建新的控制台应用程序。
  3. 创建一个文件.vscode/launch.json,打开它,然后单击“添加配置”按钮。选择.NET: Launch .NET Core Console App。根据项目的结构更新文件中的所有占位符文本。您还需要创建一个 .vscode/tasks.json 文件,就像我在原始帖子中包含的文件一样。
  4. 尝试在 VS Code 中调试项目。

使用此启动配置运行和调试应用程序在我的 Intel-chip-Mac 上按预期工作,但在我的 M1-chip-Mac 上却没有。看起来我将在我的旧 Mac 上工作,直到发布与 M1 兼容的 .NET SDK。

【讨论】:

    猜你喜欢
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多