繁体   English   中英

用于将调试器附加到在 Linux 上的 .NET Core 中运行的远程进程的 Visual Studio 扩展

[英]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);

有两个问题:

  1. 对 GetProcesses() 的调用会打开一个对话框,我需要在其中输入 Linux 用户名并按 Enter,如何在代码中指定用户名以避免出现该对话框?
  2. 即使选定的进程看起来是正确的(process.ProcessID 与我在 Linux 中看到的匹配,如果我运行 ps 命令),当我调用 Attach2() 时我得到一个异常。 异常消息是“来自 HRESULT 的异常:0x8971001E”

我觉得我真的很接近让这个工作,关于如何完成它的任何建议?

我还通过将传递给 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM