我应该在哪个进程中附加Visual Studio Debugger来调试Kestrel应用程序?

时间:2018-06-11 22:12:37

标签: visual-studio asp.net-core kestrel-http-server

我正在使用dotnet run命令启动命令行并运行我的应用程序。这启动了Kestrel并启动了我的应用程序。

我应该如何确定连接调试器的过程,以便我可以调试Kestrel现在托管的网站?

我特别需要能够这样做 - 这意味着我不能使用标准的F5。

3 个答案:

答案 0 :(得分:5)

不幸的是,现在无法使用Visual Studio或.NET Core提供的工具来判断。但请注意,社区已经请求了此功能here,因此您可以在那里表达您的意见。

目前,最好的选择是按照to find out the id of the process given the application's port

步骤进行操作
  1. 运行==18266== HEAP SUMMARY: ==18266== in use at exit: 0 bytes in 0 blocks ==18266== total heap usage: 1 allocs, 1 frees, 64 bytes allocated
  2. 查找上面返回的流程的ID,为了更快查找,名称将为netstat -abon | findStr "127.0.0.1:{PORTNUMBER}"
  3. 如果您喜欢冒险,可能需要使用类似PowerShell的东西,它会直接返回端口号:

    dotnet.exe

答案 1 :(得分:2)

您可以print the pid to the console and use that to select from Ctrl-Alt-P

Console.WriteLine($"Running at pid {System.Diagnostics.Process.GetCurrentProcess().Id}");

答案 2 :(得分:0)

较旧的问题,但这是我们如何解决它。

从头开始,使用$ dotnet run将创建一个Kestrel实例,因此可以很容易地从Visual Studio附加到它。

但是,运行$ dotnet build && dotnet run将创建构建服务器的实例和Kestrel的实例。现在,很难知道要附加什么dotnet进程。此外,多次运行此命令可以创建其他进程。

我们的解决方案是使用$ dotnet build && dotnet build-server shutdown && dotnet run。这样将在构建后停止构建服务器,因此现在仅需附加一个dotnet进程。

此处有时可能会有其他解决方案:https://github.com/dotnet/cli/issues/9481