如何在使用 dotnet run 时调试 .NET Core 控制台应用程序

Pau*_*ito 11 c# debugging asp.net-core

因此,我正在开发一个自定义 dotnet cli 工具,如此处所述。我正在开始使用它,并且可以使用运行我的控制台应用程序dotnet run,但在尝试调试时它会直接超出我的断点。从 VS 运行时它确实有效,但我希望能够传递各种参数,而从应用程序参数框中执行此操作并不实际。有什么想法吗?

Lin*_*ink 6

您有多种选择:

  1. Debugger.Launch 该功能将弹出一个窗口,您可以在其中附加 Visual Studio 调试器。请参阅:调试器.Launch。这有一个理论上的缺点(不适用于您),它只能在 Visual Studio 中使用,而不能在 Rider 中使用,因为 API 未开放。(但是当这个窗口弹出时,您可以将 Rider 添加到进程中)

  2. 在程序中的前几秒“等待”您可以将一个参数传递给 cli,指示它应该等待 x 秒,以便您可以附加调试器。

public static void Main(string[] args)
{
    if(args[0] == "waitfordebugger")
    {
        Thread.Sleep(10000); // Wait 10 Seconds
    }

    // Do stuff here
Run Code Online (Sandbox Code Playgroud)

然后你可以这样调用你的程序:dotnet run -- waitfordebugger


Pau*_*ito 3

就其价值而言,不幸的是,最好的方法似乎是将它们作为参数传递。

您可以通过单击 Visual Studio 中“运行”按钮旁边的箭头并选择“项目调试属性”来完成此操作。从那里,您可以转到“应用程序参数”并输入所需的参数。例如,类似的内容--list all会传入一个长度为 2 的数组,其中索引 0 为--list,索引 1 为all

如果有人想出一种侵入性较小的方法,请告诉我!

编辑dotnet run:您还可以通过使用并附加到 VS 中的关联进程(调试>附加到进程)从命令提示符/powershell 执行此操作