在 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
。
- 使用 dotnet-install 脚本安装,操作类似于依赖于框架的部署。 请务必添加
本文的其余部分介绍如何从开发计算机远程调试单板计算机上的 .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。
在 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"
}
},
请注意以下内容:
program
是dotnet 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
进程。 否则,该进程的名称将与应用的可执行文件相同。