使用 SSH 远程调试 Linux 上的 .NET Core

从 Visual Studio 2017 开始,可通过 SSH 附加到在 Linux 上运行的 .NET Core 进程。 本文介绍调试的设置方法和调试方法。

先决条件

在 Visual Studio 计算机上,需要安装“ASP.NET 和 Web 开发”工作负载或“.NET Core 跨平台开发”工作负载 。

在 Linux 服务器上,需要安装 SSH 服务器,可使用 curl 或 wget 解压缩并安装。 例如,在 Ubuntu 上,可以通过运行以下内容来实现此目的:

cmd
sudo apt-get install openssh-server unzip curl

生成并部署应用程序

准备应用程序以进行调试:

  • 生成应用程序时,请考虑使用“调试”配置。 调试零售编译代码(发布配置)比调试编译代码要困难得多。 如果需要使用“发布”配置,请先禁用“仅我的代码”。 若要禁用此设置,请选择“工具” > “选项” > “调试”,然后选择“启用仅我的代码” 。

  • 请确保项目配置为生成可移植 PDB(默认设置),并确保 PDB 与 DLL 处于同一位置。 若要在 Visual Studio 中配置此项目,请右键单击它,然后选择“属性” > “生成” > “高级” > “调试信息” 。

在调试之前,可以使用多种方法来部署应用。 例如,你可以:

  • 将源复制到目标计算机,并在 Linux 计算机上使用 dotnet build 进行生成。

  • 在 Windows 上生成应用,并将生成项目传输到 Linux 计算机。 (生成工件包含应用程序本身、它可能依赖的任何运行时库和 .deps.json 文件。)

附加调试器

配置计算机后,在 Linux 计算机上启动应用程序,然后准备好附加调试器。

  1. 在 Visual Studio 中,选择“调试” > “附加到进程…” 。

  2. 在“连接类型”列表中,选择“SSH” 。

  3. 将“连接目标”更改为目标计算机的 IP 地址或主机名。

  4. 查找要调试的进程。

    代码以唯一的进程名或名为 dotnet 的进程运行。 若要查找你感兴趣的进程,请查看“Title”列,该列显示了进程的命令行参数。

    在下面的示例中,你将在“附加到进程”对话框中显示的 SSH 传输上看到远程 Linux 计算机中的进程列表。

    附加到 Linux 进程

  5. 选择 “附加” 。

  6. 在显示的对话框中,选择要调试的代码类型。 选择“托管(.NET Core for Unix)”。

  7. 使用 Visual Studio 调试功能来调试应用。

    在下面的示例中,你将看到 Visual Studio 调试器在远程 Linux 计算机上运行的代码断点停止。

    命中断点

如果linux不能上网的话,在vs的控制台会报错,从中可以找到一些有用的信息

未能启动调试适配器“coreclr”。
Execution of command '/bin/sh "/root/.vs-debugger/GetVsDbg.sh" -v vs2019 -l "/root/.vs-debugger/vs2019" -a "/remote_debugger"' on remote system failed with return code: 1


初始化日志:
Determining user folder on remote system...
Checking for existing installation of debugging tools...
Downloading debugger launcher...
Creating debugger installation folder: /root/.vs-debugger
Copying debugger launcher to /root/.vs-debugger/GetVsDbg.sh
Ensuring script exists after copying...
Downloading debugger components...
Output: Info: Previous installation at '/root/.vs-debugger/vs2019' not found
Info: Using vsdbg version '16.8.11013.1'
Info: Creating install directory
Using arguments
    Version                    : 'vs2019'
    Location                   : '/root/.vs-debugger/vs2019'
    SkipDownloads              : 'false'
    LaunchVsDbgAfter           : 'false'
    RemoveExistingOnUpgrade    : 'false'
Info: Using Runtime ID 'linux-x64'
Downloading https://vsdebugger.azureedge.net/vsdbg-16-8-11013-1/vsdbg-linux-x64.tar.gz

ERROR: Could not download https://vsdebugger.azureedge.net/vsdbg-16-8-11013-1/vsdbg-linux-x64.tar.gz

Failed: Execution of command '/bin/sh "/root/.vs-debugger/GetVsDbg.sh" -v vs2019 -l "/root/.vs-debugger/vs2019" -a "/remote_debugger"' on remote system failed with return code: 1
程序“[17167] dotnet”已退出,返回值为 -1 (0xffffffff)。

 从上面的报错信息可以看出,linux会从这个地址下载调试工具:https://vsdebugger.azureedge.net/vsdbg-16-8-11013-1/vsdbg-linux-x64.tar.gz

找了一台能联网的linux主机,尝试上面的远程调试,会发现/root/.vs-debugger/vs2019目录下面下载一个名“vsdbg-linux-x64.tar”的文件,因为是从国外的地址下载的,速度会奇慢,漫长的等待之后,下载完成自动解压到当前目录,然后再用vs启动远程调试,第一次报错,再试,一切顺利,能正常进断点。

对比安装完后的/root/.vs-debugger/vs2019文件夹,和手动下载的vsdbg-linux-x64.tar.gz,就多了一个success.txt文件,应该是通过这个来标识远程调试工具已经安装完成,为了验证猜想,我把手动下载的vsdbg-linux-x64.tar.gz包复制到不能联网的linux主机上,手动新建了一个success.txt文件,然后远程调试,发现可以跳过重复下载的问题,但附加调试报错,暂时未能解决。

以下为success.txt的内容

16.8.11013.1


原文地址:https://www.cnblogs.com/xtjatswc/p/13826123.html