Visual Studio Code 的 .NET Core 调试器无法触发断点

6

我在尝试在Visual Studio Code中调试使用.NET Core编写的应用程序时遇到了问题。以下是设置:

我正在使用运行Debian 9(带有默认GUI)的虚拟机。我已安装.Net Core SDK 2.1和Visual Studio Code 1.30.0。安装了C# 1.17.1扩展。我已创建了一个简单的项目:

class MyProgram
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello You Angel!");
        ProcessStartInfo startInfo = new ProcessStartInfo() { FileName = "/bin/bash", Arguments = "-c nautilus /home/", }; 
        Process proc = new Process() { StartInfo = startInfo, };
        proc.Start();
    }
}

如果我运行程序,它会执行并产生正确的输出。 在调试窗口中,我按下了齿轮按钮来编辑launch.jason文件Debug window 这是它的样子:
{
 "version": "0.2.1",
 "configurations": [
    {
        "name": ".NET Core Launch (console)",
        "type": "coreclr",
        "request": "launch",
        "preLaunchTask": "build",
        // If you have changed target frameworks, make sure to update the program path.
        "program": "${workspaceFolder}/HelloWorld/bin/Debug/netcoreapp2.1/HelloWorld.dll",
        "args": [],
        "cwd": "${workspaceFolder}/HelloWorld",
        // For more information about the 'console' field, see https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md#console-terminal-window
        "console": "integratedTerminal",
        "stopAtEntry": false,
        "internalConsoleOptions": "openOnSessionStart",
        "externalConsole": false,
    },
    {
        "name": ".NET Core Attach",
        "type": "coreclr",
        "request": "attach",
        "processId": "${command:pickProcess}"
    }
 ,]
}

我在项目中设置了断点:Breakpoint,但当我点击绿色三角按钮时,断点没有被触发。实际上,我认为根本没有执行任何代码。 是否有什么东西我忽略了,以使应用程序处于调试模式? 请帮忙!

你尝试过清理/重新构建了吗? - jazb
是的,没有任何区别 :( 实际上,在代码中启动此进程是为了确保在按下绿色三角形按钮时未执行任何代码。 - Julian
我必须问一下 - 你在 Visual Studio 的调试模式下吗? - jazb
我不是使用Visual Studio,而是使用Visual Studio Code。如果在VS Code中有这样的设置,不幸的是我没有找到它。 - Julian
4个回答

9
我在不同的设置上遇到了相同的问题。我正在运行Windows 10,使用VSCode和dotnet sdk 2.2。
通过浏览gissues,我找到了一些答案,在这里这个链接,我认为解决了我的问题。
我还注意到要确保在要求将调试器附加到进程时选择正确的"c:/projectdir/bin/debug/projectname.dll"。
之后,VSCode成功地命中我的断点。
希望这有所帮助。

1
谢谢您的评论!但是我已经不在与这个问题相关的公司工作了,所以我无法进行确切的设置来验证这是否是解决方案。 :) 但无论如何,感谢您的努力! - Julian
当然可以!这可能不是一个万能解决方案,但我认为如果有人在未来遇到类似的情况,这可能会对他们有所帮助。祝编码愉快! - Tribalnecktie

5

1) 在终端中进入您的项目并输入

dotnet restore
dotnet clean
dotnet build

2) 检查您配置文件(launch.json)中“program”和“cwd”的路径。


前两个命令成功执行,但第三个命令出现问题 - 找不到与命令“dotnet-rebuild”匹配的可执行文件 - Julian
  1. 我该如何检查它们。如果您的意思是它们是否存在 - 答案是 - 是的,它们存在。我不确定{workspaceFolder}返回什么,但我尝试了绝对路径... /home/debianusr/HelloWorld/bin/Debug/....... 结果相同。
- Julian
Dotnet build - Maciej Pulikowski

2
如果有人在将类库项目“转换”为控制台应用程序时遇到问题,以下是我发现的症状和原因:
我错误地创建了一个类库,而实际上我想要的是一个控制台应用程序。在.NET Framework项目中,我曾经犯过同样的错误,所以我认为我只需将其转换即可,没有问题。因此,我改变了输出类型并给它一个启动对象。该项目运行了,但断点没有被命中。
我花了一段时间才找出原因;那是因为我最初创建的类库项目是.NET Standard项目。当我创建一个新项目(相同的代码)作为.NET Core(而不是.NET Standard)时,断点被命中了。
非常有趣的是,你实际上可以将.NET Standard类库项目切换为控制台应用程序,因为在UI中似乎无法创建这种设置。

0
我将我的项目文件从netcoreapp3.0切换到netcoreapp2.2,一切都构建得很好,但我的断点没有被触发。在删除bin和obj目录后,我收到了一个错误,指出找不到可执行的dll文件。结果发现我还需要更改我的launch.json文件。
在.vscode/launch.json中,请确保检查您的程序文件夹和可执行文件是否存在。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接