Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O LLDB é um poderoso depurador de software livre que faz parte do projeto LLVM. Ao depurar aplicativos .NET no Linux, você pode usar o LLDB com as extensões do depurador .NET para inspecionar o estado do aplicativo gerenciado. O LLDB pode trabalhar com despejos e processos dinâmicos.
Instalar
Instalar o LLDB
As extensões do depurador do .NET exigem pelo menos LLDB 3.9, mas a versão 10.0 ou posterior é recomendada. As seções a seguir fornecem instruções para instalar o LLDB em distribuições populares do Linux.
AzureLinux 2.0 e posterior
Para instalar os pacotes do LLDB:
sudo tdnf install lldb
Para iniciar o LLDB:
lldb
Ubuntu 20.04 e posterior
Para instalar os pacotes do LLDB:
sudo apt-get update
sudo apt-get install lldb
Para iniciar o LLDB:
lldb
Alpino 3.9 e posterior
Para instalar os pacotes do LLDB:
apk update
apk add lldb py3-lldb
Para iniciar o LLDB:
lldb
Debian 9 e posterior
Para instalar os pacotes do LLDB:
sudo apt-get install lldb-3.9 python-lldb-3.9
Para iniciar o LLDB:
lldb-3.9
Fedora 29 e posterior
Para instalar os pacotes do LLDB:
sudo dnf install lldb python2-lldb
Para iniciar o LLDB:
lldb
RHEL 7.5 e posterior
Consulte LLDB no site do RedHat.
Instalar as extensões do depurador do .NET
Instale as extensões do depurador do .NET usando a ferramenta dotnet-debugger-extensions. O instalador cria um .lldbinit arquivo em seu diretório inicial que carrega automaticamente as extensões quando você inicia o LLDB.
Observação
A versão das extensões do depurador não precisa corresponder à versão do runtime do .NET. É recomendável usar a versão de extensão mais recente.
Observação
A instalação com dotnet-sos em vez de dotnet-debugger-extensions também funciona, mas instala apenas um subconjunto dos comandos de extensão.
Introdução ao LLDB
Este exemplo mostra como usar o LLDB para anexar a um aplicativo .NET pré-existente (dotnet webapp.dll) em execução no computador.
Use o
pscomando para localizar a ID do processo (PID) do aplicativo .NET que você deseja depurar.$ ps -ao pid,cmd PID CMD 697 -bash 229233 dotnet webapp.dll 229696 ps -ao pid,cmd ... other processes omitted for brevity ...Nesse caso, o PID da aplicação .NET a ser depurado é 229233.
Execute LLDB e anexe-se ao processo.
Inicie o LLDB usando o comando apropriado para sua distribuição (mostrado anteriormente na seção Instalar LLDB ). Geralmente, isso é apenas
lldb, mas algumas distribuições exigem um número de versão no nome, comolldb-3.9.$ lldb Current symbol store settings: -> Cache: /home/username/.dotnet/symbolcache -> Server: https://msdl.microsoft.com/download/symbols/ Timeout: 4 RetryCount: 0 (lldb)No
(lldb)prompt, execute o comando de anexação do processo.(lldb) process attach --pid 229233 Process 229233 stopped * thread #1, name = 'dotnet', stop reason = signal SIGSTOP frame #0: 0x00007f2ca7c11117 libc.so.6`___lldb_unnamed_symbol3457 + 231 libc.so.6`___lldb_unnamed_symbol3457: -> 0x7f2ca7c11117 <+231>: movl %r12d, %edi 0x7f2ca7c1111a <+234>: movq %rax, %rbx 0x7f2ca7c1111d <+237>: callq 0x7f2ca7c10a60 ; ___lldb_unnamed_symbol3445 0x7f2ca7c11122 <+242>: jmp 0x7f2ca7c11089 ; <+89> thread #2, name = 'dotnet-ust', stop reason = signal SIGSTOP frame #0: 0x00007f2ca7c9e88d libc.so.6`syscall + 29 libc.so.6`syscall: ... more output omitted ...O depurador agora está anexado e você pode usar comandos internos do LLDB e comandos de extensão do depurador .NET para inspecionar o estado do processo.
Observação
Se o LLDB gerar 'erro: falha na anexação: operação não permitida', isso significa que você não tem privilégios suficientes para depurar. A maneira mais confiável de resolver isso é sair do LLDB e reiniciar usando o sudo. Quando o LLDB com privilégios elevados não executa automaticamente o script .lldbinit normal, você pode fazer isso explicitamente usando o
--sourceargumento na linha de comando:sudo lldb --source ~/.lldbinit.Executar um comando de exemplo
O comando clrstack exibe o rastreamento de pilha do código .NET no thread selecionado no momento.
(lldb) clrstack OS Thread Id: 0x497 (1) Child SP IP Call Site 00007FFD0877D260 00007f2ca7c11117 [HelperMethodFrame_1OBJ: 00007ffd0877d260] System.Threading.Monitor.ObjWait(Int32, System.Object) 00007FFD0877D390 00007F2C2864AA0E System.Threading.Monitor.Wait(System.Object, Int32) 00007FFD0877D3A0 00007F2C28654625 System.Threading.ManualResetEventSlim.Wait(Int32, System.Threading.CancellationToken) 00007FFD0877D420 00007F2C286684A8 System.Threading.Tasks.Task.SpinThenBlockingWait(Int32, System.Threading.CancellationToken) 00007FFD0877D480 00007F2C2866832D System.Threading.Tasks.Task.InternalWaitCore(Int32, System.Threading.CancellationToken) 00007FFD0877D4D0 00007F2C286B2508 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task, System.Threading.Tasks.ConfigureAwaitOptions) 00007FFD0877D4F0 00007F2C29281B45 Microsoft.Extensions.Hosting.HostingAbstractionsHostExtensions.Run(Microsoft.Extensions.Hosting.IHost) 00007FFD0877D510 00007F2C29121A7D Program.<Main>$(System.String[]) [/home/username/app/Program.cs @ 25]
Próximas etapas
Para saber mais sobre os comandos disponíveis ao depurar aplicativos .NET com LLDB, consulte a documentação das extensões do depurador do .NET e do LLDB.
Consulte também
- LLDB para obter mais informações sobre o depurador LLDB.
- Extensões de depurador do .NET para uma referência dos comandos de extensão disponíveis.
- dotnet-symbol para obter mais detalhes sobre como instalar e usar a ferramenta de download de símbolos.