Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Usar depuradores

Esta página contiene información utilizando LLDB o BGF para el desarrollo del sistema operativo. Para el desarrollo de aplicaciones, vea Depurar su aplicación en su lugar, lo que se explica cómo utilizar la interfaz gráfica de usuario de Android Studio (basado en LLDB).

GDB está obsoleto y se eliminará pronto. Si está cambiando de BGF a LLDB, probablemente debería empezar por leer el Tutorial LLDB . Si usted es un usuario experto BGF, el mapa de mando BGF a LLDB es muy útil, mientras que la transición.

Prerrequisitos

Para usar un depurador:

  • Configurar el entorno de construcción con el habitual envsetup.sh comando.
  • Ejecutar el mismo lunch comando utilizado en la construcción.

Para obtener más ayuda con la configuración de su entorno, consulte configurar el entorno .

Depurar aplicaciones o procesos en ejecución

Para conectarse a una aplicación en ejecución o demonio nativa, el uso gdbclient.py con un PID. Por ejemplo, para depurar el proceso con PID 1234, ejecute esto en el host:

gdbclient.py -p 1234

El script configura el reenvío de puertos, inicia el código auxiliar de depuración remoto apropiado en el dispositivo, inicia el depurador en el host, lo configura para buscar símbolos y lo conecta al código auxiliar de depuración remota.

Depurar el inicio del proceso nativo

Para depurar un proceso como el que se inicia, el uso gdbclient.py con el -r opción. Por ejemplo, para depurar ls /bin , ejecute este en el host:

gdbclient.py -r /system/bin/ls /bin

A continuación, introduzca continue en el depurador de inmediato.

Inicio de la aplicación de depuración

A veces desea depurar una aplicación, ya que empieza, por ejemplo, cuando hay un accidente y desea desplazarse por el código para ver qué sucedió antes del accidente. Colocación de las obras en algunos casos, pero en otros casos es imposible porque la aplicación se bloquea antes de poder adjuntar. El logwrapper enfoque (utilizado para strace ) no siempre funciona ya que la aplicación podría no tener permisos para abrir un puerto, y gdbserver hereda esa restricción.

Para depurar el inicio de la aplicación, use las opciones de desarrollador en Configuración para indicarle a la aplicación que espere a que se adjunte un depurador de Java:

  1. Ir a Ajustes> Opciones de desarrollador> Seleccionar aplicación de depuración y elija su aplicación en la lista, haga clic en Esperar depurador.
  2. Iniciar la aplicación, ya sea desde el lanzador o mediante la línea de comandos para ejecutar:
    adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
    
  3. Espere a que la aplicación se cargue y aparezca un cuadro de diálogo que le indica que la aplicación está esperando un depurador.
  4. Adjuntar gdbserver / gdbclient normalmente, establecer puntos de interrupción, y luego continuar con el proceso.

Para permitir que la aplicación se ejecute, adjunte un 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 aplicaciones o procesos que fallan

Si quieres debuggerd de suspender los procesos han fallado de forma que puede adjuntar un depurador, establezca la propiedad adecuada:

  • Después de Android 11
    adb shell setprop debug.debuggerd.wait_for_debugger true
    
  • Android 11 e inferior
    adb shell setprop debug.debuggerd.wait_for_gdb true
    
  • Android 6.0 malvavisco y menor
    adb shell setprop debug.db.uid 999999
    

Al final de la salida de choque habitual, debuggerd ofrece copiar y pegar las instrucciones en Logcat que muestran cómo conectar el depurador al proceso de estrellado.

Depurar sin símbolos

Para ARM de 32 bits, si usted no tiene símbolos, gdb no puede determinar qué conjunto de instrucciones que está desmontando (ARM o el pulgar). Para especificar el conjunto de instrucciones elegido como predeterminado cuando falta la información del símbolo, establezca la siguiente propiedad:

set arm fallback-mode arm  # or thumb

Depurar con VS Code

LLDB admite la depuración de código de plataforma de código de Visual Studio . Puede usar la interfaz del depurador de VS Code en lugar de la interfaz CLI de LLDB para controlar y depurar el código nativo que se ejecuta en los dispositivos.

Antes de utilizar Código VS para la depuración, instalar la extensión CodeLLDB .

Para depurar código usando VS Code:

  1. Asegúrese de que todos los artefactos de construcción (tales como símbolos) necesarios para ejecutar gdbclient.py o lldbclient.py están presentes.
  2. Ejecute el siguiente comando:
    lldbclient.py --setup-forwarding
          vscode-lldb ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...

    Esto imprime un objeto JSON y lldbclient.py sigue funcionando. Se espera esto; no matan a la lldbclient.py programa.

    El -r bandera debe ser la última bandera si está presente debido a la forma en que se analizan los indicadores de la herramienta.

  3. En la pestaña de depuración en el Código VS, seleccione la configuración de complemento, a continuación, seleccione LLDB: inicio personalizados. Esto abre una launch.json archivo y añade un nuevo objeto JSON a una lista.
  4. Elimina la configuración del depurador recién agregada.
  5. Copiar el objeto JSON impreso por lldbclient.py y pegarlo en el objeto que acaba de eliminar. Guarde los cambios.
  6. Para volver a cargar la ventana para actualizar la lista depurador, presione Ctrl + Shift + P y el tipo reload window .
  7. Seleccione la nueva configuración del depurador y tirada. El depurador debería conectarse después de 10 a 30 segundos.
  8. Cuando estás depuración hacerlo, vaya a la ejecución del terminal lldbclient.py y pulse Intro para finalizar la lldbclient.py programa.