O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Usando depuradores

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:

  1. 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.
  2. 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
    
  3. Aguarde até que o aplicativo seja carregado e uma caixa de diálogo apareça informando que o aplicativo está esperando por um depurador.
  4. 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:

  1. Assegurar que todos os artefactos de construção (tais como símbolos) necessário para executar gdbclient.py ou lldbclient.py estão presentes.
  2. 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 o lldbclient.py programa.

    O -r bandeira deve ser a última bandeira se ele estiver presente devido à forma como bandeiras são analisados pela ferramenta.

  3. 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.
  4. Exclua a configuração do depurador recém-adicionada.
  5. Copiar o objeto JSON impresso pelo lldbclient.py e colá-lo para o objeto que você acabou eliminado. Salve as alterações.
  6. Para recarregar a janela para atualizar a lista depurador, pressione Ctrl + Shift + P e tipo reload window .
  7. Selecione a nova configuração depurador e tiragem. O depurador deve se conectar após 10 a 30 segundos.
  8. Quando estiver pronto depuração, ir para o funcionamento do terminal lldbclient.py e pressione Enter para finalizar a lldbclient.py programa.