Depura el código de la plataforma

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:

  1. Establece puntos de interrupción en tu código Java o Kotlin dentro de ASfP.

  2. En el menú, selecciona Run > Attach Debugger to Android Process.

  3. En el diálogo Choose Process, asegúrate de que el Debug type esté configurado como Java Only.

  4. Selecciona tu dispositivo en la lista.

  5. Elige el proceso de aplicación específico que deseas depurar.

  6. Haz clic en OK.

  7. 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:

  1. Verifica que solo se esté ejecutando un dispositivo o emulador.

  2. Abre una terminal y ejecuta adb root desde la raíz de la confirmación de AOSP: bash adb root

  1. Establece puntos de interrupción en tu código C/C++ dentro de ASfP.

  2. En el menú, selecciona Run > Attach Debugger to Android Process.

  3. En el diálogo Choose Process, cambia el Debug type a Native Only o Dual (Java + Native).

  4. Marca la casilla Show all processes para ver los procesos del sistema.

  5. Selecciona tu dispositivo en la lista.

  6. Elige el proceso específico del sistema que deseas depurar (como surfaceflinger o system_server).

  7. Haz clic en OK.

  8. 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

  1. Crea una nueva configuración de ejecución y depuración de Debug Adapter Protocol:

    1. Selecciona Run > Edit Configurations en el menú.
    2. Haz clic en el botón +.
    3. Selecciona Debug Adapter Protocol.
  2. En la pestaña del servidor, haz clic en create a new server.

  3. En el diálogo recién abierto, haz clic en Choose template y selecciona CodeLLDB en la lista.

  4. Después de seleccionar la plantilla CodeLLDB, se agrega el nuevo servidor con una configuración predefinida.

    1. Para habilitar el registro detallado, selecciona Detallado en el menú desplegable Registro.
    2. Agrega una variable de entorno que especifique la ruta de acceso a lldb-server en 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
    
    1. No alteres la sección <<insert base directory>>.

Cómo depurar archivos binarios de Rust en el host

  1. Abre la pestaña Configuration en la configuración de ejecución o depuración del Protocolo del adaptador de depuración.
  2. Selecciona Launch como el Modo de depuración.
  3. Actualiza el Directorio de trabajo y selecciona el Archivo binario que deseas depurar.
  4. Haz clic en Aceptar para guardar la configuración.
  5. 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)

  1. Busca el PID: Identifica el ID de proceso (PID) de la aplicación que deseas depurar en el dispositivo Android.

  2. 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.py y reemplaza <PID> por el ID del proceso:

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

    Esta secuencia de comandos envía el lldb-server correcto 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.

  3. 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_ROOT y CLANG_VERSION segú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
    
  4. Configura el cliente DAP de ASfP:

    1. Vuelve a la configuración de ejecución y depuración del protocolo del adaptador de depuración en ASfP.
    2. Selecciona la pestaña Configuración.
    3. Establece Debug Mode en Attach.
    4. Establece Dirección en localhost.
    5. Configura el Puerto como 1234.
    6. Pega el resultado JSON del comando lldbclient.py (paso 2) en el campo Parámetros de DAP (JSON).
  5. 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 reinicia lldb-server en el dispositivo y el adaptador de CodeLLDB en el host.