Esta página detalha usando o LLDB (link em inglês) para desenvolvimento de SO. Para desenvolvimento de apps, consulte Depurar seu app que explica como usar a GUI do Android Studio (baseada no LLDB).
O GDB não é mais compatível nem fornecido. Se você está mudando do GDB para o LLDB, recomendamos provavelmente comece lendo Tutorial do LLDB. Se você é um usuário especialista do GDB, o Mapa de comandos do GDB para o LLDB é muito útil durante a transição.
Pré-requisitos
Para usar um depurador:
- Configure o ambiente de build com o comando
envsetup.sh
normal. - Execute o mesmo comando
lunch
que você usou na criação. Observe que o item de almoço devem corresponder exatamente ao dispositivo que você está depurando. Se o item de almoço não corresponder ao dispositivo anexado, você receberá um erro do formulário:You used the wrong lunch: TARGET_PRODUCT (aosp_arm64) does not match attached device (xyzabc)
- Conecte seu dispositivo à máquina.
Para mais ajuda com a configuração do ambiente, consulte Configure o ambiente.
Depurar um binário
Para depurar um binário criado na sua máquina, primeiro copie o binário para o dispositivo. e, em seguida, inicie o depurador. Exemplo:
adb push test.exe /data/local/tmp/test.exe
lldbclient.py --port 5038 -r /data/local/tmp/test.exe
Depurar apps ou processos em execução
Para se conectar a um app em execução ou daemon nativo, use
lldbclient.py
com um PID. Por exemplo, para depurar o processo com PID
1234, execute isto no host:
lldbclient.py -p 1234
O script configura o encaminhamento de portas e inicia stub de depuração remota no dispositivo, inicia o depurador em o host, o configura para encontrar símbolos e o conecta ao stub de depuração remota.
Depurar a inicialização do processo nativo
Para depurar um processo quando ele é iniciado, use lldbclient.py
com o -r
.
é a melhor opção. Por exemplo, para depurar ls /bin
, execute o seguinte comando no host:
lldbclient.py -r /system/bin/ls /bin
Em seguida, digite continue
no prompt do depurador.
Depurar inicialização do app
Às vezes, você quer depurar um app assim que ele é iniciado, por exemplo, quando há uma falha
e você quiser analisar o código para ver o que aconteceu antes da falha.
Anexar funciona em alguns casos, mas, em outros,
impossível porque o aplicativo falha antes da anexação. A
Abordagem logwrapper
(usada para strace
)
nem sempre funciona porque o app pode não ter
para abrir uma porta, e lldbserver
herda essa
e a segunda é a restrição de recursos.
Para depurar a inicialização do app, use as opções do desenvolvedor nas Configurações para instruir o app aguardar a anexação de um depurador Java:
- Acesse Configurações > Opções do desenvolvedor > Selecione o app de depuração e escolha seu app na lista e clique em Espere pelo depurador.
- Inicie o app pelo acesso rápido ou usando a linha de comando para executar:
adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
- Aguarde o app carregar e uma caixa de diálogo aparecer informando que ele está aguardando um depurador.
- Anexe
lldbserver
/lldbclient
normalmente, defina e continue o processo.
Para permitir que o app seja executado, anexe um protocolo de depuração Java com fio (JDWP, na sigla em inglês). Depurador como o Java Debugger (jdb):
adb forward tcp:12345 jdwp:XXX # (Where XXX is the PID of the debugged process.)
jdb -attach localhost:12345
Depurar apps ou processos com falhas
Se quiser que o debuggerd
suspenda processos com falha para que você possa
anexar um depurador, defina a propriedade adequada:
- Depois do Android 11
adb shell setprop debug.debuggerd.wait_for_debugger true
- Android 11 e versões anteriores
adb shell setprop debug.debuggerd.wait_for_gdb true
- Android 6.0 Marshmallow e anterior
adb shell setprop debug.db.uid 999999
Ao final da saída de falha normal, o debuggerd
fornece o recurso de copiar e colar.
instruções no logcat mostrando como conectar o depurador ao processo com falha.
Depurar com o VS Code
O LLDB oferece suporte à depuração de código de plataforma em Visual Studio Code (link em inglês). É possível usar o front-end do depurador do VS Code em vez da interface da CLI do LLDB para controlar e depurar código nativo em execução nos dispositivos.
Antes de usar o VS Code para depuração, instale o Extensão CodeLLDB.
Para depurar o código usando o VS Code:
- Verifique se todos os artefatos de build (como símbolos) são necessários para execução
lldbclient.py
oulldbclient.py
estão presentes. - No VS Code, pressione Ctrl+Shift+P para executar um comando e pesquise Debug:
Adicionar configuração... e selecionar LLDB.
Isso abre um arquivo
launch.json
e adiciona um novo objeto JSON a uma lista. - Substitua a configuração do depurador recém-adicionada por duas linhas de comentários:
// #lldbclient-generated-begin
e// #lldbclient-generated-end
, portanto, a lista de configuração deve ficar assim:"configurations": [ // #lldbclient-generated-begin // #lldbclient-generated-end ]
O
lldbclient.py
usa esses comentários para detectar onde gravar a configuração. Se houver outros itens na lista, adicione as linhas de comentários ao final, após as outras configurações. - Execute o comando a seguir no terminal em que você executa
envsetup.sh
elunch
:lldbclient.py --setup-forwarding vscode-lldb \ --vscode-launch-file LAUNCH_JSON_PATH \ ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...
lldbclient.py
grava a configuração gerada emlaunch.json
e continua em execução. Isso já é esperado. Não encerre o programalldbclient.py
. Se você omitir o--vscode-launch-file
. O script vai imprimir o snippet JSON que você precisa copiar e colar manualmente nolaunch.json
.A flag
-r
precisa ser a última, se estiver presente, devido à forma como as sinalizações são analisadas. pela ferramenta. - Abra a barra lateral Run and Debug. A nova configuração deve aparecer na
lista de depuradores. Pressione Iniciar depuração (F5). O depurador será conectado depois
de 10 a 30 segundos.
Se a nova configuração não aparecer na visualização "Run and Debug", atualize a janela para: Atualize a lista de depuradores: pressione Ctrl+Shift+P e digite
reload window
- Quando terminar a depuração, acesse o terminal em execução.
lldbclient.py
e pressione Enter para finalizar alldbclient.py
. As execuções subsequentes do script gerariam a configuração entre os comentários#lldbclient-generated
e substituir o conteúdo antigo, você não precisará removê-los manualmente.
Para adicionar propriedades personalizadas à configuração de inicialização gerada, use o
sinalização --vscode-launch-props
. Por exemplo:
lldbclient.py --setup-forwarding vscode-lldb \
--vscode-launch-props \
'{"initCommands" : ["script print(\"Hello\")"], "preLaunchTask" : "Build"}' \
...
As propriedades do exemplo fariam o VS Code executar uma tarefa chamada Build
antes de depurar e
anexa uma nova etapa de inicialização de depuração às etapas geradas pelo script. É possível encontrar um
informações gerais das propriedades disponíveis no
na documentação do VS Code e no manual do usuário
Extensão CodeLLDB.