通过


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

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

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

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

使用 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(在本地会话中或通过 SSH)的 Bash 控制台中,运行以下命令。 此命令在设备上下载并安装Visual Studio远程调试器:

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

在 Visual Studio Code 中设置 launch.json

在开发计算机上,将启动配置添加到项目的 launch.json。 如果项目没有 launch.json 文件, 通过切换到 Run 选项卡添加一个,选择 在对话框中创建 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"
        }
    },

请注意以下内容:

  • program 是由 dotnet publish 创建的可执行文件。
  • cwd 是在设备上启动应用时要使用的工作目录。
  • pipeProgram 是本地计算机上的 SSH 客户端的路径。
  • pipeArgs 是要传递给 SSH 客户端的参数。 请务必指定密码参数,并确保用户 pi 按照格式 <user>@<hostname>

部署应用

请按照 将 .NET 应用部署到 ARM 单板计算机中的说明部署该应用程序。 确保部署路径与 cwd 配置中的参数中指定的路径相同。

启动调试器

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

在 Windows 上通过 Visual Studio 进行调试

Visual Studio可以通过 SSH 调试远程设备上的.NET应用。 设备上不需要专用配置。 有关使用 Visual Studio 远程调试.NET的详细信息,请参阅 使用 SSH 在 Linux 上执行调试.NET

请务必选择 dotnet 过程,如果您正在调试依赖于框架的部署。 否则,进程将命名为与应用的可执行程序相同。