Compartilhar via


Depurar despejos do Linux

Este artigo se aplica a: ✔️ SDK do .NET Core 3.0 e versões posteriores

Coletar despejos no Linux

Dica

Para perguntas frequentes sobre coleta de despejo, análise e outras ressalvas, consulte Despejos: Perguntas frequentes.

As duas maneiras recomendadas de coletar despejos no Linux são:

Analisar despejos no Linux

Depois que um despejo é coletado, ele pode ser analisado usando a ferramenta dotnet-dump com o comando dotnet-dump analyze. Essa etapa de análise precisa ser executada em um computador que tenha a mesma arquitetura e a distribuição do Linux que o ambiente em que o despejo foi capturado. A dotnet-dump ferramenta dá suporte à exibição de informações sobre código .NET, mas não é útil para entender problemas de código para outras linguagens, como C e C++.

Como alternativa, o LLDB pode ser usado para analisar despejos no Linux, o que permite a análise de código gerenciado e nativo. O LLDB usa a extensão SOS para depurar o código gerenciado. A dotnet-sos ferramenta da CLI pode ser usada para instalar o SOS, que tem muitos comandos úteis para depurar o código gerenciado. Para analisar despejos do .NET Core, o LLDB e o SOS exigem os seguintes binários do .NET Core do ambiente em que o despejo foi criado:

  1. libmscordaccore.so
  2. libcoreclr.so
  3. dotnet (o host usado para iniciar o aplicativo)

Na maioria dos casos, esses binários podem ser baixados usando a dotnet-symbol ferramenta. Se os binários necessários não puderem ser baixados com o dotnet-symbol, por exemplo, se uma versão privada do .NET Core criada a partir do código-fonte estiver em uso, pode ser necessário copiar os arquivos listados acima do ambiente em que o despejo foi criado. Se os arquivos não estiverem localizados ao lado do arquivo de despejo, você poderá usar o comando setclrpath <path> LLDB/SOS para definir o caminho do qual eles devem ser carregados e setsymbolserver -directory <path> definir o caminho para procurar arquivos de símbolo.

Depois que os arquivos necessários estiverem disponíveis, o despejo poderá ser carregado no LLDB por meio da especificação do host do dotnet como o executável a ser depurado:

lldb --core <dump-file> <host-program>

No comando anterior, <dump-file> é o caminho do despejo a ser analisado e <host-program> é o programa nativo que iniciou o aplicativo .NET Core. Normalmente, esse é o dotnet binário, a menos que o aplicativo seja autossuficiente, caso contrário, ele é o nome do aplicativo sem a extensão .dll.

Depois que o LLDB for iniciado, talvez seja necessário usar o setsymbolserver comando para apontar para o local correto do símbolo (setsymbolserver -ms para usar o servidor de símbolos da Microsoft ou setsymbolserver -directory <path> especificar um caminho local). Para carregar símbolos nativos, execute loadsymbols. Neste ponto, você pode usar os comandos do SOS para analisar o despejo.

Observação

O LLDB pode ser instalado com o comando sudo apt-get install lldb

Análise de despejos no Windows

Dumps coletados de um computador Linux também podem ser analisados em um computador Windows usando Visual Studio, Windbg ou a ferramenta dotnet-dump. Tanto o Visual Studio quanto o Windbg podem analisar código nativo e gerenciado, enquanto o dotnet-dump analisa apenas código gerenciado.

Observação

O Visual Studio versão 16.8 e posterior permite que você abra e analise despejos do Linux gerados no .NET Core 3.1.7 ou posterior.

  • Visual Studio – consulte o Guia de depuração de despejo do Visual Studio.
  • Windbg – Você pode depurar despejos do Linux no windbg usando as mesmas instruções que usaria para depurar um despejo no modo de usuário do Windows. Use a versão x64 do windbg para despejos coletados de um ambiente Linux x64 ou Arm64 e a versão x86 para despejos coletados de um ambiente Linux x86.
  • dotnet-dump – Visualizar o dump usando o comando dotnet-dump analyze. Use a versão x64 do windbg para despejos coletados de um ambiente Linux x64 ou Arm64 e a versão x86 para despejos coletados de um ambiente Linux x86.

Consulte também