Depurar código da plataforma

O Android Studio for Platform (ASfP) oferece um depurador avançado que permite:

  • Selecione um dispositivo para depurar.
  • Definir pontos de interrupção no seu código Java, Kotlin, C/C++ e Rust.
  • Examinar as variáveis e avaliar as expressões no tempo de execução.

Antes de usar o depurador, atualize o build em um dispositivo ou emulador.

Depuração do processo do app (Java/Kotlin)

Para depurar um processo de aplicativo Java ou Kotlin:

  1. Defina pontos de interrupção no seu código Java ou Kotlin no ASfP.

  2. Selecione Run > Attach Debugger to Android Process no menu.

  3. Na caixa de diálogo Choose Process, verifique se o Debug type está definido como Java Only.

  4. Selecione seu dispositivo na lista.

  5. Escolha o processo de aplicativo específico que você quer depurar.

  6. Clique em OK.

  7. Interaja com o aplicativo no dispositivo para atingir os pontos de interrupção.

Depuração de processos do sistema (C/C++)

Para depurar um processo do sistema escrito em C ou C++:

  1. Verifique se há apenas um dispositivo ou emulador em execução.

  2. Abra um terminal e execute adb root na raiz do seu checkout do AOSP: bash adb root

  1. Defina pontos de interrupção no seu código C/C++ no ASfP.

  2. Selecione Run > Attach Debugger to Android Process no menu.

  3. Na caixa de diálogo Choose Process, mude o Debug type para Native Only ou Dual (Java + Native).

  4. Marque a caixa Mostrar todos os processos para ver os processos do sistema.

  5. Selecione seu dispositivo na lista.

  6. Escolha o processo do sistema específico que você quer depurar, como surfaceflinger ou system_server.

  7. Clique em OK.

  8. Interaja com o dispositivo para atingir os pontos de interrupção.

Depuração do Rust

O ASfP oferece suporte à depuração do Rust usando o protocolo de adaptador de depuração (DAP, na sigla em inglês) com o LLDB. Esta seção descreve como configurar o CodeLLDB como um servidor de adaptador de depuração e depurar código Rust no host e em um dispositivo Android.

Configurar o CodeLLDB como um servidor de adaptador de depuração

  1. Crie uma nova configuração de execução/depuração do Protocolo de adaptador de depuração:

    1. Selecione Run > Edit Configurations no menu.
    2. Clique no botão +.
    3. Selecione Protocolo do adaptador de depuração.
  2. Na guia "Servidor", clique em Criar um novo servidor.

  3. Na caixa de diálogo recém-aberta, clique em Escolher modelo e selecione CodeLLDB na lista.

  4. Depois de selecionar o modelo CodeLLDB, o novo servidor será adicionado com uma configuração predefinida.

    1. Para ativar o rastreamento detalhado, selecione Detalhado no menu suspenso Rastreamento.
    2. Adicione uma variável de ambiente que especifique o caminho para o lldb-server nos binários pré-criados de origem do Android:
        LLDB_DEBUGSERVER_PATH=REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/runtimes_ndk_cxx/x86_64/lldb-server
        ```
    
    Replace `REPO_ROOT` with the absolute path to your Android source checkout.
    To find `CLANG_VERSION`, run the `get_clang_version.py` script from the root of
    your Android source tree:
    
    ```bash
        ./build/soong/scripts/get_clang_version.py
    
    1. Não altere a seção <<insert base directory>>.

Depurar binários Rust no host

  1. Abra a guia Configuration na configuração de execução/depuração do protocolo de adaptador de depuração.
  2. Selecione Iniciar como o Modo de depuração.
  3. Atualize o Diretório de trabalho e selecione o Arquivo binário que você quer depurar.
  4. Clique em OK para salvar a configuração.
  5. Clique no ícone Depurar ao lado da configuração para iniciar a sessão de depuração.

Na primeira vez que você executar esse comando, o CodeLLDB será baixado. Os rastreamentos da DAP vão aparecer no console. Os pontos de interrupção definidos no código Rust serão atingidos conforme o esperado.

Depurar binários Rust em um dispositivo Android (modo de anexação)

  1. Encontre o PID:identifique o ID do processo (PID) do aplicativo que você quer depurar no dispositivo Android.

  2. Inicie o lldb-server no dispositivo:na raiz do checkout da árvore de origem do Android, execute o script lldbclient.py, substituindo <PID> pelo ID do processo:

    lldbclient.py --setup-forwarding vscode-lldb -p <PID>
    

    Esse script envia o lldb-server correto para o dispositivo, inicia e configura o encaminhamento de porta (porta do host 5039 para o dispositivo) e gera a configuração JSON do DAP necessária para as próximas etapas. Mantenha esse terminal aberto.

  3. Inicie o adaptador de depuração CodeLLDB no host:

    • Navegue até o diretório da extensão CodeLLDB (padrão: ~/.lsp4ij/dap/codelldb/extension/adapter).
    • Defina as variáveis de ambiente necessárias e inicie o servidor de adaptador, substituindo REPO_ROOT e CLANG_VERSION conforme determinado na configuração do servidor:
        # Sets PYTHONHOME env variable
        export PYTHONHOME=REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/python3
    
        # Tell the dynamic linker where to find python libs
        export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/python3/lib
    
        # Starts the CodeLLDB Debugger Adapter server on port 1234
        ./codelldb --liblldb REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/lib/liblldb.so --port 1234
    
  4. Configurar o cliente DAP do ASfP:

    1. Volte para a configuração de execução/depuração do protocolo do adaptador de depuração no ASfP.
    2. Selecione a guia Configuração.
    3. Defina o Modo de depuração como Anexar.
    4. Defina Endereço como localhost.
    5. Defina a Porta como 1234.
    6. Cole a saída JSON do comando lldbclient.py (etapa 2) no campo Parâmetros da DAP (JSON).
  5. Clique em Depurar para iniciar a sessão de depuração.

Solução de problemas

  • Se você encontrar o erro error: Connection shut down by remote side while waiting for reply to initial handshake packet, encerre a sessão de depuração atual e reinicie o lldb-server no dispositivo e o adaptador CodeLLDB no host.