• 使用 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


  • 相关阅读:
    一起谈.NET技术,C#调试心经(续) 狼人:
    基于xmpp openfire smack开发之openfire介绍和部署[1]
    mysql学习笔记二
    使用jQuery实现的网页版的个人简历
    基于xmpp openfire smack开发之smack类库介绍和使用[2]
    基于色彩恒常( color constancy)特性的FrankleMcCann Retinex图像增强。
    The import org.cocos2dx.lib cannot be resolved
    C++编译器的递归深度与程序优化思考
    jquery实战视频教程_选项卡效果一
    编译器是怎样工作的?用lex和yacc 写一个计算器(2)
  • 原文地址:https://www.cnblogs.com/xtjatswc/p/13826123.html
Copyright © 2020-2023  润新知