En esta página, se detalla el uso de LLDB para el desarrollo de SO. Para el desarrollo de aplicaciones, consulta Cómo depurar tu app en su lugar, en la que se explica cómo usar la GUI de Android Studio (basada en LLDB).
Ya no se admite ni proporciona GDB. Si cambias de GDB a LLDB, deberías probablemente empieces por leer Instructivo de LLDB. Si eres un usuario experto de GDB, la Mapa de comandos de GDB a LLDB es muy útil durante la transición.
Requisitos previos
Para usar un depurador, sigue estos pasos:
- Configura el entorno de compilación con el comando
envsetup.sh
habitual. - Ejecuta el mismo comando
lunch
que usaste cuando compilaste. Ten en cuenta que el plato del almuerzo debe coincidir exactamente con el dispositivo que estás depurando. Si el elemento del almuerzo no coincide con el dispositivo adjunto, recibirás un mensaje de error del siguiente formato:You used the wrong lunch: TARGET_PRODUCT (aosp_arm64) does not match attached device (xyzabc)
- Conecta tu dispositivo a la máquina.
Para obtener más ayuda con la configuración de tu entorno, consulta Configura el entorno.
Depura un objeto binario
Para depurar un objeto binario que compilaste en tu máquina, primero debes copiarlo en el dispositivo y, luego, inicia el depurador. Por ejemplo:
adb push test.exe /data/local/tmp/test.exe
lldbclient.py --port 5038 -r /data/local/tmp/test.exe
Depura procesos o apps en ejecución
Para conectarte a una app en ejecución o un daemon nativo, usa
lldbclient.py
con un PID. Por ejemplo, para depurar el proceso con PID
1234, ejecuta esto en el host:
lldbclient.py -p 1234
La secuencia de comandos configura la redirección de puertos, inicia stub de depuración remota en el dispositivo, inicia el depurador en al host, lo configura para buscar símbolos y conecta en el stub de depuración remota.
Cómo depurar el inicio de un proceso nativo
Para depurar un proceso cuando se inicia, usa lldbclient.py
con -r
.
de 12 a 1 con la nueva opción de compresión. Por ejemplo, para depurar ls /bin
, ejecuta lo siguiente en el host:
lldbclient.py -r /system/bin/ls /bin
Luego, ingresa continue
en el símbolo del sistema del depurador.
Cómo depurar el inicio de una app
Es posible que quieras depurar una app durante el inicio, por ejemplo, cuando se produce una falla.
y quieres revisar el código para ver qué sucedió antes de la falla.
Adjuntar funciona en algunos casos, pero en otros es
imposible porque la aplicación falla antes de que puedas adjuntarla. El
Enfoque de logwrapper
(se usa para strace
)
no siempre funciona,
ya que es posible que la app no tenga
permisos para abrir un puerto, y lldbserver
hereda ese
restricción.
Para depurar el inicio de una app, usa las opciones para desarrolladores en Configuración para indicar que la app espere a que se adjunte un depurador de Java:
- Ve a Configuración > Opciones para desarrolladores > Selecciona la app de depuración y elige tu app en la lista y, luego, haz clic en Wait for debugger.
- Inicia la app, ya sea desde el selector o usando la línea de comandos para ejecutar lo siguiente:
adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
- Espera a que se cargue la app y aparezca un diálogo que indique que la app está a la espera de un depurador.
- Conecta
lldbserver
/lldbclient
normalmente, configurado puntos de interrupción y, luego, continúa el proceso.
Para permitir que se ejecute la app, adjunta un 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
Cómo depurar apps o procesos que fallan
Si quieres que debuggerd
suspenda los procesos con fallas para poder
adjuntar un depurador, establece la propiedad adecuada:
- Después de Android 11
adb shell setprop debug.debuggerd.wait_for_debugger true
- Android 11 y versiones anteriores
adb shell setprop debug.debuggerd.wait_for_gdb true
- Android 6.0 Marshmallow y versiones anteriores
adb shell setprop debug.db.uid 999999
Al final del resultado habitual de la falla, debuggerd
proporciona la función de copiar y pegar.
Instrucciones en logcat que muestran cómo conectar el depurador al proceso con fallas
Depura con VS Code
LLDB admite la depuración del código de la plataforma en Visual Studio Code Puedes usar el frontend del depurador de VS Code en lugar de la interfaz de la CLI de LLDB para controlar y depurar el código nativo que se ejecuta en los dispositivos.
Antes de usar VS Code para la depuración, instala el CodeLLDB.
Para depurar el código con VS Code, haz lo siguiente:
- Asegúrate de que todos los artefactos de compilación (como los símbolos) necesarios para ejecutarse
lldbclient.py
olldbclient.py
están presentes. - En VS Code, presiona Ctrl + Mayúsculas + P para ejecutar un comando. Busca Debug:
Agregar configuración... y, luego, selecciona LLDB.
Se abrirá un archivo
launch.json
y se agregará un objeto JSON nuevo a una lista. - Reemplaza la configuración del depurador recientemente agregada por dos líneas de comentarios:
// #lldbclient-generated-begin
y// #lldbclient-generated-end
, entonces que tu lista de configuración se ve así:"configurations": [ // #lldbclient-generated-begin // #lldbclient-generated-end ]
lldbclient.py
usa estos comentarios para detectar dónde escribir la configuración. Si si hay otros elementos de la lista, agrega las líneas de comentarios al final después de las demás configuraciones. - Ejecuta el siguiente comando en la terminal donde ejecutaste
envsetup.sh
ylunch
lldbclient.py --setup-forwarding vscode-lldb \ --vscode-launch-file LAUNCH_JSON_PATH \ ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...
lldbclient.py
escribe la configuración generada enlaunch.json
y siga funcionando. Esta situación es esperable; no finalices el programalldbclient.py
. Si omite el--vscode-launch-file
; la secuencia de comandos imprimirá el fragmento JSON que debes copiar y pegar manualmente enlaunch.json
.La marca
-r
debe ser la última si está presente debido a cómo se analizan las marcas. la herramienta. - Abre la barra lateral Run and Debug; la nueva configuración debería aparecer en el
depurador. Presiona Iniciar depuración (F5). El depurador debería conectarse después de
10 a 30 segundos.
Si no aparece la configuración nueva en la vista Run and Debug, vuelve a cargar la ventana para Actualiza la lista del depurador. Presiona Ctrl+Shift+P y escribe
reload window
- Cuando termines la depuración, ve a la terminal
lldbclient.py
y presiona Intro para finalizar lalldbclient.py
. Las ejecuciones posteriores de la secuencia de comandos generarían la configuración. entre los comentarios de#lldbclient-generated
y reemplaza el contenido antiguo, necesitas quitarlos manualmente.
Para agregar propiedades personalizadas a la configuración de lanzamiento generada, puedes usar el
--vscode-launch-props
. Por ejemplo:
lldbclient.py --setup-forwarding vscode-lldb \
--vscode-launch-props \
'{"initCommands" : ["script print(\"Hello\")"], "preLaunchTask" : "Build"}' \
...
Las propiedades de ejemplo harían que VS Code ejecute una tarea llamada Build
antes de la depuración y
agrega un nuevo paso de inicialización de depuración a los pasos que genera la secuencia de comandos. Puedes encontrar
de las propiedades disponibles en la
documentación de VS Code y el Manual de instrucciones de la
CodeLLDB.