Depurar o .NET Core no Linux usando o SSH anexando a um processo

A partir do Visual Studio 2017, você pode anexar processos do .NET Core e do .NET 5+ em execução em uma implantação local ou remota do Linux por SSH (Secure Shell). Este artigo descreve como configurar a depuração e como depurar. Para cenários de depuração usando contêineres do Docker, confira os artigos Anexar a um processo em execução em um contêiner do Docker e Ferramentas de contêiner. Para depurar o Linux no WSL 2 do Visual Studio (sem anexação ao processo), confira Depurar aplicativos .NET Core no WSL 2 com o Visual Studio.

Observação

Para depurar o Linux em execução no AKS (Serviço de Kubernetes do Azure), é recomendado usar a Bridge to Kubernetes em vez de anexar ao processo.

Pré-requisitos

  • No servidor Linux, é necessário instalar o servidor SSH, descompactar e instalar com curl ou wget. Por exemplo, no Ubuntu, você pode fazer isso executando:

    sudo apt-get install openssh-server unzip curl
    

    O SFTP deve estar habilitado, bem como o SSH. A maioria das distribuições SSH instala e habilita o SFTP por padrão, mas nem sempre é o caso.

  • No servidor Linux, instale o runtime do .NET no Linux e localize a página que corresponde à distribuição do Linux (como o Ubuntu). Não é necessário o SDK do .NET.

  • Para obter instruções abrangentes do ASP.NET Core, confira Hospedar ASP.NET Core no Linux com Nginx e Hospedar ASP.NET Core no Linux com Apache.

Preparar o aplicativo para depuração

Para preparar o aplicativo para depuração:

  • Considere usar uma Configuração de depuração ao compilar o aplicativo. É muito mais difícil depurar o código compilado no varejo (uma Configuração de versão) do que o código compilado por depuração. Se você precisar usar uma Configuração de versão, primeiro desabilite o Apenas Meu Código. Para desabilitar essa configuração, escolha Ferramentas>Opções>Depuração e desmarque Habilitar Apenas Meu Código.
  • Verifique se o projeto está configurado para produzir PDBs portáteis (que é a configuração padrão) e verifique se os PDBs estão no mesmo local que a DLL. Para configurar isso no Visual Studio, clique com o botão direito do mouse no projeto e escolha Propriedades>Geral>Símbolos de depuração.
  • Verifique se o projeto está configurado para produzir PDBs portáteis (que é a configuração padrão) e verifique se os PDBs estão no mesmo local que a DLL. Para configurar isso no Visual Studio, clique com o botão direito do mouse no projeto e escolha Propriedades>Compilar>Avançado>Informações de Depuração.

Compilar e implantar o aplicativo

Você pode usar vários métodos para implantar o aplicativo antes da depuração. Por exemplo, você pode:

  • Copie as fontes no computador de destino e compile com dotnet build no computador Linux.

  • Compile o aplicativo no Windows e transfira os artefatos de compilação no computador Linux. (Os artefatos de compilação consistem no próprio aplicativo, nos PDBs portáteis, nas bibliotecas de runtime das quais ele pode depender e no arquivo .deps.json.)

Quando o aplicativo for implantado, inicie o aplicativo.

Anexar o depurador

Assim que o aplicativo estiver em execução no computador Linux, você estará pronto para anexar o depurador.

  1. No Visual Studio, escolha Depurar>Anexar ao Processo....

  2. Na lista Tipo de Conexão, selecione SSH.

  3. Altere o Destino de Conexão para o endereço IP ou o nome do host do computador de destino.

    Se você ainda não forneceu credenciais, será solicitado que insira a senha e/ou o arquivo de chave privada. Para obter mais informações sobre como usar um arquivo de chave privada, consulte Configurar uma conexão remota.

    Não há requisitos de porta para configurar, exceto a porta na qual o servidor SSH está sendo executado.

  4. Localize o processo que você deseja depurar.

    O código é executado no nome de processo exclusivo ou no processo chamado dotnet. Para localizar o processo no qual você está interessado, verifique a coluna Título, que mostra os argumentos de linha de comando para o processo.

    No exemplo a seguir, você verá a lista de processos do computador Linux remoto no transporte SSH exibido na caixa de diálogo Anexar ao Processo.

    Captura de tela do processo Anexar ao Linux.

    Captura de tela do processo Anexar ao Linux.

  5. Selecione Anexar.

    Na caixa de diálogo exibida, selecione o tipo de código que você deseja depurar. Escolha Gerenciado (.NET Core para Unix).

  6. Use os recursos de depuração do Visual Studio para depurar o aplicativo.

    No exemplo a seguir, você verá o depurador do Visual Studio parado em um ponto de interrupção no código em execução no computador Linux remoto.

    Captura de tela da ocorrência de um ponto de interrupção.

    Captura de tela da ocorrência de um ponto de interrupção.