使用ARM上的.NET Core在Windows上使用VS Code远程调试到Raspberry Pi

   原文

我一直在玩Elecrow的“CrowPi”。这是一款出色的Raspberrry Pi STEM套件 ,完全独立于小盒子中。它包括一个触摸屏和TON传感器,LCD,矩阵显示器,传感器,蜂鸣器,面包板等。

注意:我和#CrowPi交谈 人们和他们给了我一张约70美元的亚马逊优惠券!优惠券为8EMCVI56,有效期至1月31日,在结账时加入。高级套件是https://amzn.to/2SVtXl2 #ref和包括一切,触摸屏,键盘,鼠标,电源,SNES控制器,电机,等我将很快做了全面审查。简短回顾一下,真是太棒了。

我正在检查新的开源.NET Core System.Device.Gpio的每日构建, 它允许我使用C#与Raspberry Pi上的通用输入/输出引脚(GPIO)通信。但是,我的“ 开发人员的内循环 ”有些手动。开发人员的内部循环是我们所做的“编写代码,运行代码,更改代码”循环。如果您发现自己键入了重复命令来部署或测试代码但不编写新代码,那么您将需要尝试优化内部循环并将其降低到一次击键(在自动测试的情况下为零)。

Rasbperry Pi Debugging with VS Code在我的例子中 ,我在我的Windows机器上用Visual Studio Code编写代码,在本地构建代码,然后运行“publish.bat”,将生成的二进制文件scp(安全复制)到Raspberry Pi。然后在另一个ssh进入Pi的命令提示符中,我将chmod生成的二进制文件并运行它。这是乏味和烦人的,但是程序员有时我们会停止注意它并且只是忍受重复动作。

一个好的(一种笑话,但不是真的)程序员经验法则是 - 如果你做了两次,自动化它

我希望不仅能够自动部署,而且理想情况下我还能够远程地交互式调试我的C#/ .NET Core代码。这意味着我正在Windows机器上的Visual Studio Code中编写C#,我点击“F5”开始调试会话,我的应用程序被编译,发布,运行,并且我连接到在Raspberry Pi上运行的远程调试器,AND我进入了一个设置了断点的调试会话。全部只需一次按键。这是本地应用程序的常见做法,但对于远程应用程序 - 以及跨越两个CPU架构的应用程序 - 它可能需要一些设置。

从这里的说明开始: https//github.com/OmniSharp/omnisharp-vscode/wiki/Attaching-to-remote-processes and here: https//github.com/OmniSharp/omnisharp-vscode/wiki/Remote-Debugging -On-Linux-Arm和Jose Perez Rodriguez在工作中的一点帮助,这就是我想出来的。

设置从Windows上的Visual代码到运行C#和.NET Core的Raspberry Pi的远程调试

首先,我假设你的Windows机器和Raspberry Pi上都有.NET Core 。您还在Windows计算机上安装了Visual Studio Code ,并且已经安装了C#扩展。

在树莓派上

我正在从Windows 10进入我的Pi.Windows 10现在包含ssh开箱即用,但你也可以从WSL(Windows的Solaris子系统)获取 ssh。

  1. 通过运行以下命令在Pi上安装VS远程调试器:
    curl -sSL https://aka.ms/getvsdbgsh | / bin / sh / dev / stdin -v latest -l~ / vsdbg
  2. 要进行调试,您需要以root身份运行程序,因此我们还需要能够以root身份远程启动程序。为此,我们需要首先为pi中的root用户设置密码,您可以通过运行来执行以下操作:
    sudo passwd root
  3. 然后我们需要使用root启用ssh连接,运行:
    sudo nano / etc / ssh / sshd_config
    并添加一行:
    PermitRootLogin是的
  4. 重新启动pi: sudo reboot

VSDbg看起来像这样安装:

pi@crowpi:~/Desktop/rpitest$ curl -sSL https://aka.ms/getvsdbgsh | /bin/sh /dev/stdin -v latest -l ~/vsdbg

Info: Creating install directory
Using arguments
Version : 'latest'
Location : '/home/pi/vsdbg'
SkipDownloads : 'false'
LaunchVsDbgAfter : 'false'
RemoveExistingOnUpgrade : 'false'
Info: Using vsdbg version '16.0.11220.2'
Info: Previous installation at '/home/pi/vsdbg' not found
Info: Using Runtime ID 'linux-arm'
Downloading https://vsdebugger.azureedge.net/vsdbg-16-0-11220-2/vsdbg-linux-arm.zip
Info: Successfully installed vsdbg at '/home/pi/vsdbg'

此时我已经安装了vsdbg。您可以在此处阅读有关MI调试引擎的信息。 “Visual Studio MI调试引擎(”MIEngine“)提供了一个开源的Visual Studio Debugger扩展,可以与支持MI的调试器一起使用,例如gdb,lldb和clrdbg。”

在Windows机器上

请注意,有六种方法可以做到这一点。因为在我的Windows机器上安装了带有“ choco install putty ”的putty之后,我的publish.bat就像这样了。我是pushd和popd的忠实粉丝,我会告诉你这些,他们没有被使用或知道。

dotnet publish -r linux-arm /p:ShowLinkerSizeComparison=true 

pushd .\bin\Debug\netcoreapp2.1\linux-arm\publish
pscp -pw raspberry -v -r .\* pi@crowpi.lan:/home/pi/Desktop/rpitest
popd

在Windows上,我想在我的.vscode文件夹中添加两个东西。我需要一个具有“启动目标”的launch.json,我需要在tasks.json中执行一些任务来支持它。我自己添加了“发布”任务。我的发布任务调用了publish.bat。如果我愿意,它也可以做上面的事情。请注意,我发布了“dependsOn”构建版本,并删除/清除了problemMatcher。如果您愿意,可以编写一个regEx来检测发布是否失败。

{

"version": "2.0.0",
"tasks": [
{
"label": "build",
"command": "dotnet",
"type": "process",
"args": [
"build",
"${workspaceFolder}/rpitest.csproj"
],
"problemMatcher": "$msCompile"
},
{
"label": "publish",
"type": "shell",
"dependsOn": "build",
"presentation": {
"reveal": "always",
"panel": "new"
},
"options": {
"cwd": "${workspaceFolder}"
},
"windows": {
"command": "${cwd}\\publish.bat"
},
"problemMatcher": []
}
]
}

然后在我的launch.json中,我有这个来启动远程控制台。这可能有点令人困惑,因为它混合了Windows本地的路径和Raspberry Pi本地的路径。例如,pipeProgram使用Putty的Plink的Chocolatey安装。但是程序和args和cwd都是Raspberry Pi的远程(或本地)。

"configurations": [

{
"name": ".NET Core Launch (remote console)",
"type": "coreclr",
"request": "launch",
"preLaunchTask": "build",
"program": "/home/pi/dotnet/dotnet",
"args": ["/home/pi/Desktop/rpitest/rpitest.dll"],
"cwd": "/home/pi/Desktop/rpitest",
"stopAtEntry": false,
"console": "internalConsole",
"pipeTransport": {
"pipeCwd": "${workspaceFolder}",
"pipeProgram": "${env:ChocolateyInstall}\\bin\\PLINK.EXE",
"pipeArgs": [
"-pw",
"raspberry",
"root@crowpi.lan"
],
"debuggerPath": "/home/pi/vsdbg/vsdbg"
}
}

请注意,调试器路径与我们安装vsdbg的位置对齐。

Remote debugging with VS Code on Windows to a Raspberry Pi using .NET Core

值得指出的是,虽然我在为C#做这个,但它不是C#特有的。您可以使用这些构建块在任何环境中使用VS Code设置远程调试。

结果是我的开发人员的内循环现在只是按F5!你会做出什么改进?


赞助商:使用Assembly Explorer,Git子模块,SQL语言注入,集成性能分析器和更高级的Unity支持预览最新的JetBrains Rider


©2018 Scott Hanselman。版权所有。