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 advertências, consulte Despejos: Perguntas Frequentes.
As duas maneiras recomendadas de coletar despejos no Linux são:
- Ferramenta de CLI do
dotnet-dump
- Variáveis de ambiente que coletam despejos quando há falhas
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 ferramenta dotnet-dump
oferece suporte à exibição de informações sobre o 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ódigos gerenciados e nativos. O LLDB usa a extensão SOS para depurar o código gerenciado. A ferramenta CLI do dotnet-sos
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:
- libmscordaccore.so
- libcoreclr.so
- dotnet (o host usado para iniciar o aplicativo)
Na maioria dos casos, esses binários podem ser baixados usando a ferramenta dotnet-symbol
. Se os binários necessários não puderem ser baixados dotnet-symbol
(por exemplo, se uma versão privada do .NET Core criada da origem estiver em uso), talvez seja 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>
do LLDB/SOS para definir o caminho do qual eles devem ser carregados e setsymbolserver -directory <path>
para definir o caminho em que os arquivos de símbolo devem ser procurados.
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 binário do dotnet
, a menos que o aplicativo seja autossuficiente e, nesse caso, ele é o nome do aplicativo sem a extensão .dll.
Quando o LLDB for iniciado, talvez seja necessário usar o comando setsymbolserver
para apontar ao local correto do símbolo (setsymbolserver -ms
para usar o servidor de símbolos da Microsoft ou setsymbolserver -directory <path>
para 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
Os despejos coletados de um computador Linux também podem ser analisados em um computador Windows usando o Visual Studio, Windbg ou a ferramenta dotnet-dump. O Visual Studio e o Windbg podem analisar o código nativo e gerenciado, enquanto o dotnet-dump analisa apenas o código gerenciado.
Observação
O Visual Studio 16.8 e versões posteriores permite abrir e analisar despejos do Linux gerados no .NET Core 3.1.7 ou versões posteriores.
- 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 – exibe o despejo 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.
Confira também
- dotnet-sos para obter mais detalhes de como instalar a extensão SOS.
- dotnet-symbol para obter mais detalhes de como instalar e usar a ferramenta de download de símbolos.
- Repositório de diagnóstico do .NET Core para obter mais detalhes sobre depuração, incluindo perguntas frequentes úteis.
- Como instalar o LLDB para obter instruções de como instalar o LLDB no Linux ou no Mac.
- Pratique e solucione problemas no Linux para ver um tutorial sobre depuração de despejos de falhas no Linux