Depuración de .NET Core en Linux con SSH mediante la asociación a un proceso

A partir de Visual Studio 2017, puede crear asociaciones a los procesos de .NET Core y .NET 5+ que se ejecutan en una implementación de Linux local o remota a través de Secure Shell (SSH). En este artículo se describe cómo configurar la depuración y cómo depurar. Para conocer los escenarios de depuración con contenedores de Docker, consulte Asociación a procesos que se ejecutan en contenedores de Docker y el artículo sobre las herramientas de contenedor. Para depurar Linux en WSL 2 desde Visual Studio (sin asociar al proceso), vea Depuración de aplicaciones de .NET Core en WSL 2 con Visual Studio.

Nota

Para depurar Linux mientras se ejecuta en Azure Kubernetes Service (AKS), se recomienda Bridge a Kubernetes en lugar de adjuntar al proceso.

Requisitos previos

  • En el servidor Linux, debe instalar el servidor SSH, descomprimirlo e instalarlo con curl o wget. Por ejemplo, en Ubuntu puede hacerlo mediante la ejecución de:

    sudo apt-get install openssh-server unzip curl
    

    SFTP debe estar habilitado, así como SSH. La mayoría de las distribuciones SSH instalan y habilitan SFTP de forma predeterminada, pero no siempre es así.

  • En el servidor Linux, instale el entorno de ejecución de .NET en Linux y busque la página que coincida con la distribución de Linux (por ejemplo, Ubuntu). El SDK de .NET no es necesario.

  • Para obtener instrucciones completas sobre ASP.NET Core, consulte Hospedar ASP.NET Core en Linux con Nginx y Hospedar ASP.NET Core en Linux con Apache.

Preparación de la aplicación para la depuración

Para preparar la aplicación para su depuración:

  • Considere la posibilidad de usar una configuración de depuración al compilar la aplicación. Es mucho más difícil depurar el código compilado comercial (una configuración de versión) que el código compilado por depuración. Si necesita usar una configuración de versión, deshabilite primero Solo mi código. Para deshabilitar esta configuración, elija Herramientas>Opciones>Depuración y, a continuación, anule la selección de Habilitar Solo mi código.
  • Asegúrese de que el proyecto está configurado para generar archivos PDB portátiles (que es la configuración predeterminada) y compruebe que los PBD están en la misma ubicación que el archivo DLL. Para realizar esta configuración en Visual Studio, haga clic con el botón derecho en el proyecto y, a continuación, elija Propiedades>General>Símbolos de depuración.
  • Asegúrese de que el proyecto está configurado para generar archivos PDB portátiles (que es la configuración predeterminada) y compruebe que los PBD están en la misma ubicación que el archivo DLL. Para configurarlo en Visual Studio, haga clic con el botón derecho en el proyecto y, a continuación, elija Propiedades>Compilar>Configuración avanzada>Información de depuración.

Compilar e implementar la aplicación

Puede usar varios métodos para implementar la aplicación antes de la depuración. Por ejemplo, se puede:

  • Copiar orígenes en el equipo de destino y compilar con dotnet build en la máquina Linux.

  • Compilar la aplicación en Windows y transferir los artefactos de compilación a la máquina Linux. (Los artefactos de compilación se componen de la propia aplicación, los PDB portátiles, las bibliotecas en tiempo de ejecución de las que pueden depender y el archivo .deps.json).

Cuando se implemente la aplicación, inicie la aplicación.

Asociar el depurador

Cuando la aplicación se ejecuta en la máquina de Linux, está listo para asociar el depurador.

  1. En Visual Studio, seleccione Depurar>Asociar al proceso...

  2. En la lista Tipo de conexión, seleccione SSH.

  3. Cambie el Destino de conexión a la dirección IP o el nombre de host del equipo de destino.

    Si aún no ha proporcionado credenciales, se le pedirá que escriba una contraseña o un archivo de clave privada.

    No es necesario configurar ningún puerto, excepto aquel en el que se ejecuta el servidor SSH.

  4. Busque el proceso que desea depurar.

    El código se ejecuta en un nombre de proceso único o en un proceso denominado dotnet. Para encontrar el proceso que le interesa, consulte la columna Título, que muestra los argumentos de la línea de comandos para el proceso.

    En el ejemplo siguiente, verá una lista de procesos de un equipo Linux remoto a través de un transporte SSH mostrado en el cuadro de diálogo Asociar al proceso.

    Attach to Linux process

  5. Elija Asociar.

  6. En el cuadro de diálogo que aparece, seleccione el tipo de código que desea depurar. Elija Administrado (.NET Core para Unix) .

  7. Use las características de depuración de Visual Studio para depurar la aplicación.

    En el ejemplo siguiente, verá que el depurador de Visual Studio se detuvo en un punto de interrupción en el código que se ejecuta en una máquina remota de Linux.

    Hit a breakpoint