- 
                Notifications
    
You must be signed in to change notification settings  - Fork 727
 
Remote Debugging On Linux Arm
The extension supports remote debugging netcoreapp 2.1 on linux-arm. Debugging does not support netcoreapp 2.0. The extension has been tested against Raspbian 8 and 9. Please let us know if you run into issues with other distributions.
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-armbuild 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 hhttps://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 v2.1 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/publishto yourlinux-armdevice.- To test run your application, on 
linux-arm, run the entrypointMyConsoleApp.dllwithdotnet.$ ~/dotnet/dotnet MyConsoleApp.dll 
 - To test run your application, on 
 
Reference the sample launch.json below.
- The 
"program"field is set to thedotnetexecutable and the first"args"item is the application.dllrelative to the current working directory ("cwd") onlinux-arm. - Update the fields under 
"pipeArgs"to include the IP address of thelinux-armdevice 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",
                "[email protected]"
            ],
            "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",
                    "[email protected]"
                ],
                "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 v2.1 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. - 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-armdevice 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",
                "[email protected]"
            ],
            "debuggerPath": "~/vsdbg/vsdbg"
            }
    }See Framework Dependent sample above for the appropriate pipeTransport section for Windows.
Documentation
- Change Log
 - Main repo documentation.
 - Branches and Releases
 - Installing Pre-Releases
 - Installing without internet connectivity
 
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
 
Developer Guide