[英]Visual Studio Extension to attach debugger to remote process running in .NET Core on Linux
我正在使用 Visual Studio 2019 开发在嵌入式 Linux 上运行的 .NET Core 3 应用程序。 我能够在 Visual Studio 2019 中构建代码。如果我手动将二进制文件复制到 Linux 机器,然后启动在那里运行的应用程序,那么我就可以在 Linux 中通过 SSH 将 Visual Studio 调试器附加到远程进程并调试应用。 这确实有效,但部署它、启动它并为每个调试会话手动附加调试器很乏味。 我在 Visual Studio Code 中有一个可以运行的脚本,但我想使用 Visual Studio Professional。
我正在尝试编写一个 Visual Studio 扩展,以便我可以在 Visual Studio 中按一个键来构建、部署、启动应用程序,然后连接到调试器。 然后我会与我的团队分享扩展。 除了附加调试器之外,它几乎可以正常工作。
在扩展中,我可以列出 Linux 机器中运行的进程,并使用以下代码选择我的应用程序:
EnvDTE100.Debugger5 debugger = (EnvDTE100.Debugger5)dte.Debugger;
EnvDTE80.Transport transport = debugger.Transports.Item("SSH");
EnvDTE80.Engine engine = transport.Engines.Item("Managed (.NET Core for Unix)");
EnvDTE80.Process2 process = (EnvDTE80.Process2)debugger.GetProcesses(transport, "192.168.11.1").Item("app");
process.Attach2(debugger);
有两个问题:
我觉得我真的很接近让这个工作,关于如何完成它的任何建议?
我还通过将传递给 Attach2() 的参数从调试器更改为引擎来解决第二个问题,如下所示:
EnvDTE100.Debugger5 debugger = (EnvDTE100.Debugger5)dte.Debugger;
EnvDTE80.Transport transport = debugger.Transports.Item("SSH");
EnvDTE80.Engine engine = transport.Engines.Item("Managed (.NET Core for Unix)");
EnvDTE80.Process2 process = (EnvDTE80.Process2)debugger.GetProcesses(transport, "root@192.168.11.1").Item("app");
process.Attach2(engine);
我发现了如何添加用户名,而不是密码:
在GetProcess()
,将transportQualifier
设置为$"{userName}@{hostName}"
。
第一次窗口仍会弹出并要求输入密码。 但在那之后,VisualStudio 存储了包括密码在内的连接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.