VS 代码调试器无法 "step" 用于 .NET 控制台应用程序
VS Code debugger cannot "step" for .NET Console App
我正在使用 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
消息。取消设置断点对“跳过”/“进入”没有影响 - 这些命令似乎根本不起作用。
我正在使用 MacBook 运行 苹果 M1 芯片上的 macOS Big Sur 工作(我不知道这是否有用)。以下是有关我的工作区配置的更多详细信息:
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 的调试器按预期工作?
我认为 .NET 5.0 SDK 与新的 Apple M1 芯片不完全兼容。我在两个 Mac 上遵循了以下过程:一个使用 Intel 芯片,另一个使用 M1 芯片:
- 安装 .NET 5.0 SDK.
- 运行
dotnet new console
创建一个新的控制台应用程序。
- 创建一个文件,
.vscode/launch.json
,打开它,然后单击“添加配置”按钮。 Select .NET: Launch .NET Core Console App
。根据项目结构更新文件中的所有占位符文本。您还需要创建一个 .vscode/tasks.json
文件,就像我在原始 post. 中包含的文件一样
- 尝试在 VS Code 中调试项目。
运行在我的 Intel-chip-Mac 上使用此启动配置运行和调试应用程序按预期工作,但在我的 M1-chip-Mac 上却没有。看来我会继续使用旧的 Mac,直到发布与 M1 兼容的 .NET SDK。
我正在使用 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
消息。取消设置断点对“跳过”/“进入”没有影响 - 这些命令似乎根本不起作用。
我正在使用 MacBook 运行 苹果 M1 芯片上的 macOS Big Sur 工作(我不知道这是否有用)。以下是有关我的工作区配置的更多详细信息:
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 的调试器按预期工作?
我认为 .NET 5.0 SDK 与新的 Apple M1 芯片不完全兼容。我在两个 Mac 上遵循了以下过程:一个使用 Intel 芯片,另一个使用 M1 芯片:
- 安装 .NET 5.0 SDK.
- 运行
dotnet new console
创建一个新的控制台应用程序。 - 创建一个文件,
.vscode/launch.json
,打开它,然后单击“添加配置”按钮。 Select.NET: Launch .NET Core Console App
。根据项目结构更新文件中的所有占位符文本。您还需要创建一个.vscode/tasks.json
文件,就像我在原始 post. 中包含的文件一样
- 尝试在 VS Code 中调试项目。
运行在我的 Intel-chip-Mac 上使用此启动配置运行和调试应用程序按预期工作,但在我的 M1-chip-Mac 上却没有。看来我会继续使用旧的 Mac,直到发布与 M1 兼容的 .NET SDK。