我正在开发一个自定义的dotnet cli工具,如此处所述。我已经开始使用它,并可以使用 dotnet run
运行我的控制台应用程序,但在尝试调试时,它会直接跳过我的断点。从VS运行时它是有效的,但我想能够尝试通过传递各种参数来玩耍,而从应用程序参数框中进行操作并不实用。您有什么想法?
我正在开发一个自定义的dotnet cli工具,如此处所述。我已经开始使用它,并可以使用 dotnet run
运行我的控制台应用程序,但在尝试调试时,它会直接跳过我的断点。从VS运行时它是有效的,但我想能够尝试通过传递各种参数来玩耍,而从应用程序参数框中进行操作并不实用。您有什么想法?
Debugger.Launch
这是一个函数,它将弹出一个窗口,您可以在其中附加 Visual Studio 调试器。请参阅:Debugger.Launch。这有一个理论上的缺点(不适用于您),即它只能在 Visual Studio 中使用,例如在 Rider 中无法使用,因为 API 不开放。(但是,在此窗口弹出时,您可以将 Rider 附加到进程中)
在程序的前几秒钟等待。您可以向 cli 传递一个参数,指示它应该等待 x 秒钟,以便您可以附加调试器。
public static void Main(string[] args)
{
if(args[0] == "waitfordebugger")
{
Thread.Sleep(10000); // Wait 10 Seconds
}
// Do stuff here
然后,您可以这样调用程序:dotnet run -- waitfordebugger
Debugger.Launch()
并使用标志 dotnet run --waitfordebugger
执行。然而,没有触发断点。日志告诉我已经通过了该位置,但是VS没有任何橙色闪烁的提示。连接到进程是唯一的解决方法吗?不确定如何做到这一点... - Konrad Viltersten就我所知,不幸的是最好的方法是将它们作为参数传递。
您可以通过在Visual Studio中单击Run按钮旁边的箭头并选择“项目调试属性”来执行此操作。从那里,您可以转到“应用程序参数”并输入要传递的参数。例如,像--list all
这样的内容会传递一个长度为两个的数组,其中索引0是--list
,索引1是all
。
如果有人想出一种更少侵入性的方法,请告诉我!
编辑:您也可以使用dotnet run
从命令提示符/ PowerShell执行,并在VS中附加到相关进程(调试>附加到进程)
Debugger.Launch
https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.debugger.launch?view=netcore-3.1。 - MatthewlaunchSettings.json
并在其中直接更改参数。 - poke