-
Notifications
You must be signed in to change notification settings - Fork 673
Remote Debugging On Linux Arm
The extension supports remote debugging netcoreapp 2.1 or newer on linux-arm
. The extension has been tested against Raspbian 8 and 9
. Please let us know if you run into issues with other distributions.
As of netcoreapp 3.0, linux-arm64
is also supported. When following these instructions for arm64, be sure to replace linux-arm
with linux-arm64
.
If you run into any problems, please file an issue and note in the text that this is related to linux-arm
.
Choose one of the following deployment methods:
-
Framework Dependent Deployment: Compile the application locally. Deploy the binary to
linux-arm
. Requires the .NET Core Runtime to be installed onlinux-arm
. -
Self Contained Deployment: Compile and publish the application locally. Deploy the standalone application to
linux-arm
.
See microsoft.com for links to the SDK and instructions.
- Install the native dependencies of .NET Core. On Raspbian, this should only mean installing Curl and unzip if it they aren't already installed (
sudo apt-get install curl
). - Run the following command on
linux-arm
(installs to ~/vsdbg):
curl -sSL https://aka.ms/getvsdbgsh | bash /dev/stdin -r linux-arm -v latest -l ~/vsdbg
Framework-dependent deployments are when the application is deployed without a copy of .NET Core itself, so the application depends on the shared .NET Core Framework being installed. See docs.microsoft.com for more information.
-
On the target computer, install a
linux-arm
build of the .NET Core runtime. As of this editing the latest 2.1 version can be found at https://dotnetcli.blob.core.windows.net/dotnet/Runtime/2.1.3/dotnet-runtime-2.1.3-linux-arm.tar.gz. See the arm docker file to find the latest version number.Example (installs to ~/dotnet):
mkdir ~/dotnet & curl -sSL https://dotnetcli.blob.core.windows.net/dotnet/Runtime/2.1.3/dotnet-runtime-2.1.3-linux-arm.tar.gz | tar xvzf /dev/stdin -C ~/dotnet
On the IDE computer:
- Run
dotnet new console -n MyConsoleApp
. This will create a new netcoreapp console application calledMyConsoleApp
.
On the IDE computer:
- In your application's root folder, run
dotnet publish
- Copy all the files under
bin/Debug/netcoreapp2.1/publish
to yourlinux-arm
device (replace '2.1' with whatever framework you are targeting).- To test run your application, on
linux-arm
, run the entrypointMyConsoleApp.dll
withdotnet
.$ ~/dotnet/dotnet MyConsoleApp.dll
- To test run your application, on
Reference the sample launch.json
below.
- The
"program"
field is set to thedotnet
executable and the first"args"
item is the application.dll
relative to the current working directory ("cwd"
) onlinux-arm
. - Update the fields under
"pipeArgs"
to include the IP address of thelinux-arm
device and the ssh keyfile. - The
"debuggerPath"
points to the location where you installed the debugger to onlinux-arm
.
{
"name": ".NET Core Remote Launch - Framework Dependent (console)",
"type": "coreclr",
"request": "launch",
"program": "~/dotnet/dotnet",
"args": [
"./MyConsoleApp.dll"
],
"cwd": "~/MyConsoleApp",
"stopAtEntry": false,
"console": "internalConsole",
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "/usr/bin/ssh",
"pipeArgs": [
"-T", "-i", "mysshkeyfile",
"pi@10.10.10.10"
],
"debuggerPath": "~/vsdbg/vsdbg"
}
}
This launch.json requires that PuTTY is installed. You must convert your ssh keyfile to a format that PuTTY understands with puttygen. See How to convert SSH keypairs generated using PuttyGen(Windows) into key-pairs used by ssh-agent and KeyChain(Linux) for tips.
{
"name": ".NET Core Remote Launch - Framework Dependent (console)",
"type": "coreclr",
"request": "launch",
"program": "~/dotnet/dotnet",
"args": ["./dotnetapp.dll"],
"cwd": "~/dotnet-core-app",
"stopAtEntry": false,
"console": "internalConsole",
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "c:\\Program Files\\PuTTY\\plink.exe",
"pipeArgs": [
"-i",
"mysshkeyfile.ppk",
"pi@10.10.10.10"
],
"debuggerPath": "~/vsdbg/vsdbg"
}
}
It is likely that other tools than PuTTY can be used. They have not been tested.
We are researching if WSL (ssh) can be used to avoid needing to install PuTTY (or similar tool).
Self-contained deployments are when all of an applications' dependencies are carried with the deployment. So the only thing that must be installed on the target computer is the native dependencies of .NET Core. See docs.microsoft.com for more information.
On the IDE computer:
- Run
dotnet new console -n MyConsoleApp
. This will create a new netcoreapp console application calledMyConsoleApp
.
On the IDE computer:
- Run
dotnet publish -r linux-arm
- Copy all the files under
bin/Debug/netcoreapp2.1/linux-arm/publish/
tolinux-arm
(replace '2.1' with whatever framework you are targeting). - Test your application by running the standalone executable
MyConsoleApp
.$ ./MyConsoleApp
Reference the sample launch.json
below.
- The
"program"
field is the standalone executable relative to the current working directory ("cwd"
) onlinux-arm
. - Update the fields under
"pipeArgs"
to include the IP address of thelinux-arm
device and the ssh keyfile. - The
"debuggerPath"
points to the location where you installed the debugger to onlinux-arm
.
{
"name": ".NET Core Remote Launch - Standalone Application (console)",
"type": "coreclr",
"request": "launch",
"program": "MyConsoleApp",
"args": [],
"cwd": "~/MyConsoleApp",
"stopAtEntry": false,
"console": "internalConsole",
"pipeTransport": {
"pipeCwd": "${workspaceRoot}",
"pipeProgram": "/usr/bin/ssh",
"pipeArgs": [
"-T", "-i", "mysshkeyfile",
"pi@10.10.10.10"
],
"debuggerPath": "~/vsdbg/vsdbg"
}
}
See Framework Dependent sample above for the appropriate pipeTransport
section for Windows.
Configuration
- Configuring Snap installs of dotnet-sdk
- Configuring Arch Linux for Unity development
- Configuring Arch Linux for Razor development
- Installing the .NET Core Debugger on Arch Linux
Debugger
- Overview
- launch.json Help
- Feature List
- Enable Logging
- Portable PDBs
- Troubleshoot Breakpoints
- Attaching to remote processes
- Remote Debugging On Linux-Arm
- Windows Subsystem for Linux
- Diagnosting 'Debug adapter process has terminated unexpectedly'
- Testing libicu compatibility on Linux
- Debugging into the .NET Runtime itself
- Debugging x64 processes on an arm64 computer
Documentation
- Change Log
- Branches and Releases
- Installing Beta Releases
- Installing without internet connectivity
- Linux Support
- Run/Debug Unit Tests
- Troubleshooting: 'The .NET Core SDK cannot be located.' errors
Developer Guide