Este detalhes de página usando LLDB ou GDB para o desenvolvimento OS. Para o desenvolvimento de aplicativo, consulte Debug seu aplicativo em vez disso, o que explica como usar o Android Estúdio GUI (baseado em LLDB).
GDB está obsoleto e será removido em breve. Se você tiver migrado do GDB para LLDB, você provavelmente deve começar por ler o Tutorial LLDB . Se você é um usuário experiente GDB, o mapa de comando GDB para LLDB é muito útil transição enquanto.
Pré-requisitos
Para usar um depurador:
- Configure o ambiente de compilação com o habitual
envsetup.sh
comando. - Execute o mesmo
lunch
comando utilizado na construção.
Para obter mais ajuda com a configuração do ambiente, consulte configure o ambiente .
Depuração de aplicativos ou processos em execução
Para se conectar a um aplicativo em execução ou daemon nativa, uso gdbclient.py
com um PID. Por exemplo, para depurar o processo com PID 1234, execute-o no host:
gdbclient.py -p 1234
O script configura o encaminhamento de porta, inicia o stub de depuração remota apropriado no dispositivo, inicia o depurador no host, configura-o para localizar símbolos e conecta-o ao stub de depuração remota.
Depuração de inicialização do processo nativo
Para depurar um processo que se inicia, o uso gdbclient.py
com o -r
opção. Por exemplo, para depuração ls /bin
, executar este no host:
gdbclient.py -r /system/bin/ls /bin
Então, entre continue
no depurador de alerta.
Inicialização do aplicativo de depuração
Às vezes você quer depurar um aplicativo como ele começa, como quando há um acidente e você quer percorrer o código para ver o que aconteceu antes do acidente. Colocar obras em alguns casos, mas em outros casos é impossível porque o aplicativo trava antes de você pode anexar. O logwrapper
abordagem (usado para strace
) nem sempre funciona porque o aplicativo pode não ter permissões para abrir uma porta, e gdbserver
herda essa restrição.
Para depurar a inicialização do aplicativo, use as opções do desenvolvedor em Configurações para instruir o aplicativo a aguardar a conexão de um depurador Java:
- Vá para Configurações> Opções do desenvolvedor> Selecionar aplicativo de depuração e escolha a sua aplicação a partir da lista, em seguida, clique Aguarde depurador.
- Inicie a aplicação, a partir do lançador ou usando a linha de comando para executar:
adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
- Aguarde até que o aplicativo seja carregado e uma caixa de diálogo apareça informando que o aplicativo está esperando por um depurador.
- Anexar
gdbserver
/gdbclient
normalmente, pontos de interrupção conjunto, em seguida, continuar o processo.
Para permitir que o aplicativo seja executado, anexe um depurador Java Debug Wire Protocol (JDWP), como Java Debugger (jdb):
adb forward tcp:12345 jdwp:XXX # (Where XXX is the PID of the debugged process.)
jdb -attach localhost:12345
Depurar aplicativos ou processos que falham
Se você quiser debuggerd
para suspender processos com falhas para que você pode anexar um depurador, defina a propriedade adequada:
- Depois Android 11
adb shell setprop debug.debuggerd.wait_for_debugger true
- Android 11 e menor
adb shell setprop debug.debuggerd.wait_for_gdb true
- Android 6.0 Marshmallow e menor
adb shell setprop debug.db.uid 999999
No final da saída acidente de costume, debuggerd
fornece copiar e colar instruções em logcat mostrando como conectar o depurador para o processo caiu.
Depuração sem símbolos
Para 32-bit ARM, se você não tem símbolos, gdb
não pode determinar qual o conjunto de instruções é desmontar (ARM ou polegar). Para especificar o conjunto de instruções escolhido como padrão quando as informações do símbolo estão ausentes, defina a seguinte propriedade:
set arm fallback-mode arm # or thumb
Depuração com código VS
LLDB suporta a depuração de código plataforma de código Visual Estúdio . Você pode usar o frontend do depurador do VS Code em vez da interface LLDB CLI para controlar e depurar o código nativo em execução nos dispositivos.
Antes de usar o Código VS para depuração, instale a extensão CodeLLDB .
Para depurar código usando VS Code:
- Assegurar que todos os artefactos de construção (tais como símbolos) necessário para executar
gdbclient.py
oulldbclient.py
estão presentes. - Execute o seguinte comando:
lldbclient.py --setup-forwarding vscode-lldb ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...
Isto imprime um objeto JSON e
lldbclient.py
continua em execução. Isso é esperado; não matar olldbclient.py
programa.O
-r
bandeira deve ser a última bandeira se ele estiver presente devido à forma como bandeiras são analisados pela ferramenta. - Na guia depuração no código VS, selecione configuração add, em seguida, selecione LLDB: Lançamento personalizado. Isso abre uma
launch.json
arquivo e adiciona um novo objeto JSON para uma lista. - Exclua a configuração do depurador recém-adicionada.
- Copiar o objeto JSON impresso pelo
lldbclient.py
e colá-lo para o objeto que você acabou eliminado. Salve as alterações. - Para recarregar a janela para atualizar a lista depurador, pressione Ctrl + Shift + P e tipo
reload window
. - Selecione a nova configuração depurador e tiragem. O depurador deve se conectar após 10 a 30 segundos.
- Quando estiver pronto depuração, ir para o funcionamento do terminal
lldbclient.py
e pressione Enter para finalizar alldbclient.py
programa.