Depuración de aplicaciones .NET en Raspberry Pi

La depuración de aplicaciones .NET que se ejecutan en dispositivos IoT basados en ARM como Raspberry Pi supone un desafío único. Es posible desarrollar aplicaciones .NET en dispositivos ARM. Pero OmniSharp, que es necesario para depurar aplicaciones .NET fuera de Visual Studio, no es compatible con los dispositivos ARM. Como resultado, las aplicaciones se deben depurar de forma remota desde una plataforma compatible.

Depuración desde Visual Studio Code (multiplataforma)

Para la depuración de .NET en Raspberry Pi desde Visual Studio Code se necesitan pasos de configuración en Raspberry Pi y en el archivo launch.json del proyecto.

Habilitación de SSH en Raspberry Pi

SSH es necesario para la depuración remota. Para habilitar SSH, consulte Habilitación de SSH en la documentación de Raspberry Pi.

Instalación de Visual Studio Remote Debugger en Raspberry Pi

Desde una consola de Bash en Raspberry Pi (de forma local o mediante SSH), ejecute el comando que se indica a continuación. Este comando permite descargar e instalar Visual Studio Remote Debugger en Raspberry Pi:

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

Configuración de launch.json en Visual Studio Code

En el equipo de desarrollo, agregue una configuración de inicio al archivo launch.json del proyecto. Si el proyecto no tiene un archivo launch.json, agregue uno; para ello, cambie a la pestaña Ejecutar, seleccione create a launch.json file (Crear un archivo launch.json) y después .NET o .NET Core en el cuadro de diálogo.

La nueva configuración de launch.json debe ser similar a la siguiente:

"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": "C:\\Program Files\\PuTTY\\PLINK.EXE",
            "pipeArgs": [
                "-pw", "raspberry",
                "pi@raspberrypi"
            ],
            "debuggerPath": "~/vsdbg/vsdbg"
            }
        },

Tenga en cuenta lo siguiente:

  • program es el archivo ejecutable que ha creado dotnet publish.
  • cwd es el directorio de trabajo que se va a usar al iniciar la aplicación en Pi.
  • pipeProgram es la ruta de acceso a un cliente SSH en la máquina local.
  • pipeArgs son los parámetros que se van a pasar al cliente SSH. Asegúrese de especificar el parámetro de contraseña, así como el usuario pi en el formato <user>@<hostname>.

Importante

En los ejemplos anteriores, se usa plink, un componente del cliente SSH PuTTY. En su lugar se puede usar OpenSSH, que se incluye en las versiones recientes de Windows y Linux. Pero OpenSSH no admite el envío de contraseñas como un parámetro de la línea de comandos. Para usar OpenSSH, configure el dispositivo Raspberry Pi para el acceso SSH sin contraseña.

Implementar la aplicación

Implemente la aplicación como se describe en Implementación de aplicaciones .NET en Raspberry Pi. Asegúrese de que la ruta de acceso de implementación es la misma que se ha especificado en el parámetro cwd de la configuración de launch.json.

Inicio del depurador

En la pestaña Ejecutar, seleccione la configuración que agregó a launch.json y seleccione Iniciar depuración. La aplicación se inicia en Raspberry Pi. El depurador se puede usar para establecer puntos de interrupción, inspeccionar variables locales y mucho más.

Referencias

Depuración remota en Linux ARM (documentación de OmniSharp)

Depuración desde Visual Studio en Windows

Visual Studio puede depurar aplicaciones .NET en dispositivos remotos mediante SSH. No se necesita ninguna configuración adicional en el dispositivo. Para obtener más información sobre el uso de Visual Studio para depurar .NET de forma remota, vea Depuración remota de .NET en Linux con SSH.