在 ARM 单板计算机上调试 .NET 应用

调试在基于 ARM 的 SBC(如 Raspberry Pi)上运行的 .NET 应用带来了独特的挑战。 如果需要,可以在设备上安装 Visual Studio Code 和 .NET SDK,并在本地进行开发。 但是,设备的性能使得在本地进行编码和调试的效果不理想。 此外,适用于 C# 的 Visual Studio Code 扩展与 32 位 ARM 操作系统不兼容。 因此,仅 64 位系统支持 ARM 设备上的 Visual Studio Code 中的 IntelliSense 和调试等功能。

出于这些原因,强烈建议在开发计算机上开发应用,然后将应用部署到设备进行远程调试。 如果要在设备上进行本地开发和调试,需要满足以下条件:

  • 具有桌面环境的 64 位 OS(如 Raspberry Pi OS [64 位])。
  • Visual Studio Code(具有 C# 扩展)。
  • .NET SDK 6.0 或更高版本。
    • 使用 dotnet-install 脚本安装,操作类似于依赖于框架的部署。 请务必添加 DOTNET_ROOT 环境变量并将 .dotnet 目录添加到 $PATH

本文的其余部分介绍如何从开发计算机远程调试单板计算机上的 .NET 应用。

重要

截至本文撰写时,在 linux-arm 环境中远程调试 .NET 7 应用是不可靠的,并且可能导致进程过早退出。 我们正在调查此问题。 面向 linux-arm 的 .NET 6 应用和面向 linux-arm64 的 .NET 7 应用不受影响。

从 Visual Studio Code(跨平台)调试

在 Visual Studio Code 的单板计算机上调试 .NET,需要在 SBC 上以及项目的 launch.json 文件中执行配置步骤。

在 SBC 上启用 SSH

远程调试需要 SSH。 若要在 Raspberry Pi 上启用 SSH,请参阅 Raspberry Pi 文档中的“启用 SSH”。 确保已配置无密码 SSH

重要

此示例要求在设备上配置无密码 SSH,因为 OpenSSH 不支持在命令行上传递密码。 如果需要使用密码,请考虑将 Plink 工具替换为 ssh

在 SBC 上安装 Visual Studio 远程调试器

在 SBC 上的 Bash 控制台中(在本地会话中或通过 SSH)运行以下命令。 此命令在设备上下载并安装 Visual Studio 远程调试器:

curl -sSL https://aka.ms/getvsdbgsh | /bin/sh /dev/stdin -v latest -l ~/vsdbg

在 Visual Studio Code 中安装 launch.json 文件

在开发计算机上,将启动配置添加到项目的 launch.js 文件中。 如果项目没有 launch.json 文件,请添加一个文件,方法是切换到“运行”选项卡,选择“创建 launch.json 文件”,然后在对话框中选择“.NET”或“.NET Core” 。

launch.json 中的新配置应如以下各项之一所示:

"configurations": [
    {
        "name": ".NET Remote Launch - Self-contained",
        "type": "coreclr",
        "request": "launch",
        "program": "~/sample/sample",
        "args": [],
        "cwd": "~/sample",
        "stopAtEntry": false,
        "console": "internalConsole",
        "pipeTransport": {
            "pipeCwd": "${workspaceRoot}",
            "pipeProgram": "ssh",
            "pipeArgs": [
                "pi@raspberrypi"
            ],
            "debuggerPath": "~/vsdbg/vsdbg"
        }
    },

请注意以下内容:

  • programdotnet publish 创建的可执行文件。
  • cwd 是在设备上启动应用时使用的工作目录。
  • pipeProgram 是本地计算机上 SSH 客户端的路径。
  • pipeArgs 是要传递到 SSH 客户端的参数。 请确保指定 password 参数,以及格式为 <user>@<hostname>pi 用户。

部署应用

按照将 .Net 应用部署到 ARM 单板计算机中的说明来部署应用。 确保部署路径与 launch.js 配置内 cwd 参数中指定的路径相同。

启动调试程序

在 Visual Studio Code 中的“运行和调试”选项卡上,选择添加到 launch.json 的配置,然后选择“开始调试”。 应用在设备上启动。 调试器可用于设置断点、检查局部变量等。

在 Windows 上从 Visual Studio 进行调试

Visual Studio 可通过 SSH 在远程设备上调试 .NET 应用。 设备上无需进行专用配置。 若要详细了解如何使用 Visual Studio 远程调试 .NET,请参阅在 Linux 上使用 SSH 远程调试 .Net

如果要调试依赖于框架的部署,请务必选择 dotnet 进程。 否则,该进程的名称将与应用的可执行文件相同。