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:
Defina pontos de interrupção no seu código Java ou Kotlin no ASfP.
Selecione Run > Attach Debugger to Android Process no menu.
Na caixa de diálogo Choose Process, verifique se o Debug type está definido como Java Only.
Selecione seu dispositivo na lista.
Escolha o processo de aplicativo específico que você quer depurar.
Clique em OK.
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++:
Verifique se há apenas um dispositivo ou emulador em execução.
Abra um terminal e execute
adb rootna raiz do seu checkout do AOSP:bash adb root
Defina pontos de interrupção no seu código C/C++ no ASfP.
Selecione Run > Attach Debugger to Android Process no menu.
Na caixa de diálogo Choose Process, mude o Debug type para Native Only ou Dual (Java + Native).
Marque a caixa Mostrar todos os processos para ver os processos do sistema.
Selecione seu dispositivo na lista.
Escolha o processo do sistema específico que você quer depurar, como
surfaceflingerousystem_server.Clique em OK.
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
Crie uma nova configuração de execução/depuração do Protocolo de adaptador de depuração:
- Selecione Run > Edit Configurations no menu.
- Clique no botão +.
- Selecione Protocolo do adaptador de depuração.
Na guia "Servidor", clique em Criar um novo servidor.
Na caixa de diálogo recém-aberta, clique em Escolher modelo e selecione CodeLLDB na lista.
Depois de selecionar o modelo CodeLLDB, o novo servidor será adicionado com uma configuração predefinida.
- Para ativar o rastreamento detalhado, selecione Detalhado no menu suspenso Rastreamento.
- Adicione uma variável de ambiente que especifique o caminho para o
lldb-servernos 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- Não altere a seção
<<insert base directory>>.
Depurar binários Rust no host
- Abra a guia Configuration na configuração de execução/depuração do protocolo de adaptador de depuração.
- Selecione Iniciar como o Modo de depuração.
- Atualize o Diretório de trabalho e selecione o Arquivo binário que você quer depurar.
- Clique em OK para salvar a configuração.
- 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)
Encontre o PID:identifique o ID do processo (PID) do aplicativo que você quer depurar no dispositivo Android.
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-servercorreto 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.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_ROOTeCLANG_VERSIONconforme 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- Navegue até o diretório da extensão CodeLLDB (padrão:
Configurar o cliente DAP do ASfP:
- Volte para a configuração de execução/depuração do protocolo do adaptador de depuração no ASfP.
- Selecione a guia Configuração.
- Defina o Modo de depuração como Anexar.
- Defina Endereço como
localhost. - Defina a Porta como
1234. - Cole a saída JSON do comando
lldbclient.py(etapa 2) no campo Parâmetros da DAP (JSON).
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 olldb-serverno dispositivo e o adaptador CodeLLDB no host.