在Windows上远程调试Ubuntu-Arm上的.Netcore

在 Linux 上使用 SSH 通过附加到进程调试 .NET Core

自 Visual Studio 2017 起,可以通过 SSH 附加到在本地或远程 Linux 部署上运行的 .NET Core 进程。 本文介绍调试的设置方法和调试方法。 有关使用 Docker 容器的调试方案,请参阅附加到在 Docker 容器上运行的进程

先决条件

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

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

    cmd复制

    sudo apt-get install openssh-server unzip curl
    
  • 在 Linux 服务器上,在 Linux 上安装 .NET 运行时,并找到与 Linux 发行版(如 Ubuntu)匹配的页面。 .NET SDK 不是必需的。

  • 有关全面的 ASP.NET Core 说明,请参阅使用 Nginx 在 Linux 上托管 ASP.NET Core使用 Apache 在 Linux 上托管 ASP.NET Core

准备应用程序进行调试

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

  • 生成应用程序时,请考虑使用“调试”配置。 调试零售编译代码(发布配置)比调试编译代码要困难得多。 如果需要使用“发布”配置,请先禁用“仅我的代码”。 若要禁用此设置,请选择“工具” > “选项” > “调试”,然后选择“启用仅我的代码” 。
  • 请确保项目配置为生成可移植 PDB(默认设置),并确保 PDB 与 DLL 位于相同的位置。 若要在 Visual Studio 中配置此项目,请右键单击它,然后选择“属性” > “生成” > “高级” > “调试信息” 。

生成并部署应用程序

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

  • 将源复制到目标计算机,并在 Linux 计算机上使用 dotnet build 进行生成。
  • 在 Windows 上生成应用,然后将生成项目传输到 Linux 计算机。 (生成工件包含应用程序本身、可移植 PDB、它可能依赖的任何运行时库和 .deps.json 文件。)

在应用部署后,启动应用程序。

附加调试器

当应用程序在 Linux 计算机上运行时,就可以附加调试器了。

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

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

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

    如果你还没有提供凭据,系统会提示你输入密码和/或私钥文件。

    除了 SSH 服务器运行的端口外,不需要配置任何端口。

  4. 查找要调试的进程。

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

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

  5. 选择 “附加”

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

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

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

可能遇到的问题及解决

  • 由于GFW的原因linux端的~/vsdbg下载会失败,安装对应版本的clash

    1. 下载 https://github.com/Dreamacro/clash 的 release

    2. 下载配置文件

    3. 解压缩并运行 clash

    4. 设置 系统 或者 terminal 的代理为 clash 开放的代理端口(7890/7891)

  • 设置代理

    export http_proxy="http://127.0.0.1:7890"
    export https_proxy="http://127.0.0.1:7890"
    
  • 手动执行shell下载vsdbg

    # 下载GetVsDbg.sh
    curl -sSL https://aka.ms/getvsdbgsh | /bin/sh /dev/stdin -v latest -l ~/vsdbg
    
    # 使用GetVsDbg.sh下载vsdbg
    /bin/sh /root/.vs-debugger/GetVsDbg.sh -v vs2019 -l /root/.vs-debugger/vs2019 -a /remote_debugger
    Info: Previous installation at '/root/.vs-debugger/vs2019' not found
    Info: Using vsdbg version '16.9.20122.2'
    Using arguments
        Version                    : 'vs2019'
        Location                   : '/root/.vs-debugger/vs2019'
        SkipDownloads              : 'false'
        LaunchVsDbgAfter           : 'false'
        RemoveExistingOnUpgrade    : 'false'
    Info: Using Runtime ID 'linux-arm'
    Downloading https://vsdebugger.azureedge.net/vsdbg-16-9-20122-2/vsdbg-linux-arm.tar.gz
    Info: Successfully installed vsdbg at '/root/.vs-debugger/vs2019'
    

VS2019的调试效果

WSL中的.Net core的调试

与前面的方式类似,也是通过安装vsdbg,然后ssh连接,附加到相关的.Net core进程上面,然后在WSL需要注意的一点是ssh不可登录,需要重新安装后对配置文件做修改后,就能达到目的了

# 重新安装ssh-server
sudo apt-get remove openssh-server
sudo apt-get install openssh-server
# 在/etc/ssh/sshd_config中,更改PasswordAuthentication设置
sudo nano /etc/ssh/sshd_config
PasswordAuthentication yes
# 重启SSH服务器
sudo service ssh start
# 安装解压缩才能获取vsdbg
sudo apt-get install unzip
curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -v latest -l ~/vsdbg
posted @ 2021-02-20 11:28  非法关键字  阅读(460)  评论(0编辑  收藏  举报