Android Studio for Platform (ASfP) proporciona un potente depurador que te permite hacer lo siguiente:
- Selecciona un dispositivo en el que depurar.
- Establecer interrupciones en tu código Java, Kotlin, C/C++ y Rust
- Examinar variables y evaluar expresiones en el tiempo de ejecución
Antes de usar el depurador, debes escribir la compilación en la memoria flash de un dispositivo o emulador.
Depuración del proceso de la app (Java/Kotlin)
Para depurar un proceso de aplicación de Java o Kotlin, haz lo siguiente:
Establece puntos de interrupción en tu código Java o Kotlin dentro de ASfP.
En el menú, selecciona Run > Attach Debugger to Android Process.
En el diálogo Choose Process, asegúrate de que el Debug type esté configurado como Java Only.
Selecciona tu dispositivo en la lista.
Elige el proceso de aplicación específico que deseas depurar.
Haz clic en OK.
Interactúa con la aplicación en tu dispositivo para alcanzar los puntos de interrupción.
Depuración de procesos del sistema (C/C++)
Para depurar un proceso del sistema escrito en C o C++, haz lo siguiente:
Verifica que solo se esté ejecutando un dispositivo o emulador.
Abre una terminal y ejecuta
adb rootdesde la raíz de la confirmación de AOSP:bash adb root
Establece puntos de interrupción en tu código C/C++ dentro de ASfP.
En el menú, selecciona Run > Attach Debugger to Android Process.
En el diálogo Choose Process, cambia el Debug type a Native Only o Dual (Java + Native).
Marca la casilla Show all processes para ver los procesos del sistema.
Selecciona tu dispositivo en la lista.
Elige el proceso específico del sistema que deseas depurar (como
surfaceflingerosystem_server).Haz clic en OK.
Interactúa con el dispositivo para alcanzar los puntos de interrupción.
Depuración de Rust
ASfP admite la depuración de Rust con el Protocolo de adaptador de depuración (DAP) con LLDB. En esta sección, se describe cómo configurar CodeLLDB como un servidor de adaptador de depuración y depurar código de Rust en el host y en un dispositivo Android.
Configura CodeLLDB como un servidor de adaptador de depuración
Crea una nueva configuración de ejecución y depuración de Debug Adapter Protocol:
- Selecciona Run > Edit Configurations en el menú.
- Haz clic en el botón +.
- Selecciona Debug Adapter Protocol.
En la pestaña del servidor, haz clic en create a new server.
En el diálogo recién abierto, haz clic en Choose template y selecciona CodeLLDB en la lista.
Después de seleccionar la plantilla CodeLLDB, se agrega el nuevo servidor con una configuración predefinida.
- Para habilitar el registro detallado, selecciona Detallado en el menú desplegable Registro.
- Agrega una variable de entorno que especifique la ruta de acceso a
lldb-serveren tus compilaciones previas de la fuente de 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- No alteres la sección
<<insert base directory>>.
Cómo depurar archivos binarios de Rust en el host
- Abre la pestaña Configuration en la configuración de ejecución o depuración del Protocolo del adaptador de depuración.
- Selecciona Launch como el Modo de depuración.
- Actualiza el Directorio de trabajo y selecciona el Archivo binario que deseas depurar.
- Haz clic en Aceptar para guardar la configuración.
- Para iniciar la sesión de depuración, haz clic en el ícono Debug junto a la configuración.
La primera vez que ejecutes este comando, se descargará CodeLLDB. Deberías ver los registros de DAP en la consola. Los puntos de interrupción establecidos en tu código de Rust deberían alcanzarse según lo previsto.
Cómo depurar archivos binarios de Rust en un dispositivo Android (modo de asociación)
Busca el PID: Identifica el ID de proceso (PID) de la aplicación que deseas depurar en el dispositivo Android.
Inicia lldb-server en el dispositivo: Desde la raíz de la implementación del árbol de origen de Android, ejecuta la secuencia de comandos
lldbclient.pyy reemplaza<PID>por el ID del proceso:lldbclient.py --setup-forwarding vscode-lldb -p <PID>Esta secuencia de comandos envía el
lldb-servercorrecto al dispositivo, lo inicia, configura el reenvío de puertos (puerto de host 5039 al dispositivo) y genera la configuración JSON de DAP necesaria para los próximos pasos. Mantén esta terminal abierta.Inicia el adaptador de depuración CodeLLDB en el host:
- Navega al directorio de la extensión CodeLLDB (predeterminado:
~/.lsp4ij/dap/codelldb/extension/adapter). - Establece las variables de entorno requeridas y, luego, inicia el servidor del adaptador. Reemplaza
REPO_ROOTyCLANG_VERSIONsegún lo determinado en la configuración del 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- Navega al directorio de la extensión CodeLLDB (predeterminado:
Configura el cliente DAP de ASfP:
- Vuelve a la configuración de ejecución y depuración del protocolo del adaptador de depuración en ASfP.
- Selecciona la pestaña Configuración.
- Establece Debug Mode en Attach.
- Establece Dirección en
localhost. - Configura el Puerto como
1234. - Pega el resultado JSON del comando
lldbclient.py(paso 2) en el campo Parámetros de DAP (JSON).
Haz clic en Depurar para iniciar la sesión de depuración.
Solución de problemas
- Si ves el error
error: Connection shut down by remote side while waiting for reply to initial handshake packet, finaliza la sesión de depuración actual y reinicialldb-serveren el dispositivo y el adaptador de CodeLLDB en el host.