I dettagli di questa pagina utilizzando LLDB per lo sviluppo del sistema operativo. Per lo sviluppo di app, vedi Eseguire il debug dell'app che spiega come utilizzare la GUI di Android Studio (basata su LLDB).
GDB non è più supportato o fornito. Se stai passando da GDB a LLDB, dovresti probabilmente inizia leggendo le Tutorial LLDB. Se sei un utente esperto di GDB, Mappa dei comandi da GDB a LLDB è molto utile durante la transizione.
Prerequisiti
Per utilizzare un debugger:
- Configura l'ambiente di build con il solito comando
envsetup.sh
. - Esegui lo stesso comando
lunch
che hai utilizzato durante la creazione. Tieni presente che l'elemento per il pranzo deve corrispondere esattamente al dispositivo di cui si esegue il debug. Se l'articolo per il pranzo non corrisponde al dispositivo collegato, verrà visualizzato un errore nel modulo:You used the wrong lunch: TARGET_PRODUCT (aosp_arm64) does not match attached device (xyzabc)
- Connetti il dispositivo alla macchina.
Per ulteriore assistenza sulla configurazione dell'ambiente, consulta Configura l'ambiente.
Debug di un file binario
Per eseguire il debug di un programma binario che hai creato sulla tua macchina, devi prima copiarlo sul dispositivo e quindi avviare il debugger. Ad esempio:
adb push test.exe /data/local/tmp/test.exe
lldbclient.py --port 5038 -r /data/local/tmp/test.exe
Debug di app o processi in esecuzione
Per connetterti a un'app in esecuzione o a un daemon nativo, usa
lldbclient.py
con un PID. Ad esempio, per eseguire il debug del processo con PID
1234, esegui questo comando sull'host:
lldbclient.py -p 1234
Lo script configura il port forwarding, avvia la sequenza stub di debug remoto sul dispositivo, avvia il debugger l'host, lo configura per la ricerca di simboli e connette allo stub di debug remoto.
Avvio del processo nativo del debug
Per eseguire il debug di un processo all'avvio, utilizza lldbclient.py
con -r
. Ad esempio, per eseguire il debug di ls /bin
, esegui questo comando sull'host:
lldbclient.py -r /system/bin/ls /bin
Quindi, inserisci continue
quando richiesto del debugger.
Esegui il debug dell'avvio dell'app
A volte potresti voler eseguire il debug di un'app all'avvio, ad esempio in caso di arresto anomalo
e vuoi analizzare il codice per vedere cosa è successo prima dell'arresto anomalo.
In alcuni casi funziona l'opzione Allegare, ma in altri casi lo è.
impossibile perché l'app ha un arresto anomalo prima di poter eseguire l'allegato. La
Approccio logwrapper
(utilizzato per strace
)
non funziona sempre perché l'app potrebbe non avere
autorizzazioni per aprire una porta e lldbserver
la eredita
delle risorse.
Per eseguire il debug dell'avvio dell'app, usa le Opzioni sviluppatore in Impostazioni per indicare l'app deve attendere il collegamento di un debugger Java:
- Vai a Impostazioni > Opzioni sviluppatore > Seleziona App di debug e scegli l'app dall'elenco, poi fai clic su Attendi debugger.
- Avvia l'app da Avvio app o utilizzando la riga di comando per eseguire:
adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
- Attendi il caricamento dell'app e viene visualizzata una finestra di dialogo che indica che l'app è in attesa del debugger.
- Allega
lldbserver
/lldbclient
normalmente, imposta punti di interruzione, quindi continua la procedura.
Per consentire l'esecuzione dell'app, collega un protocollo JDWP (Java Debug Wire Protocol) come debugger Java (jdb):
adb forward tcp:12345 jdwp:XXX # (Where XXX is the PID of the debugged process.)
jdb -attach localhost:12345
Debug di app o processi che si arrestano in modo anomalo
Se vuoi che debuggerd
sospendi i processi che hanno subito un arresto anomalo in modo da
collega un debugger, imposta la proprietà appropriata:
- Dopo Android 11
adb shell setprop debug.debuggerd.wait_for_debugger true
- Android 11 e versioni precedenti
adb shell setprop debug.debuggerd.wait_for_gdb true
- Android 6.0 Marshmallow e versioni precedenti
adb shell setprop debug.db.uid 999999
Alla fine del normale output di arresto anomalo, debuggerd
fornisce la funzione di copia e incolla
istruzioni in logcat che mostrano come connettere il debugger al processo che si è arrestato in modo anomalo.
Debug con VS Code
LLDB supporta il debug del codice della piattaforma su Codice di Visual Studio. Puoi utilizzare il frontend del debugger di VS Code anziché l'interfaccia dell'interfaccia a riga di comando LLDB per controllare e eseguire il debug del codice nativo in esecuzione sui dispositivi.
Prima di utilizzare VS Code per il debug, installa il Estensione CodeLLDB.
Per eseguire il debug del codice utilizzando VS Code:
- Assicurati che tutti gli artefatti della build (come i simboli) siano necessari per l'esecuzione
lldbclient.py
olldbclient.py
sono presenti. - In VS Code, premi Ctrl+Maiusc+P per eseguire un comando, cerca Debug:
Aggiungi configurazione..., quindi seleziona LLDB.
Viene aperto un file
launch.json
e viene aggiunto un nuovo oggetto JSON a un elenco. - Sostituisci la configurazione del debugger appena aggiunta con due righe di commento:
// #lldbclient-generated-begin
e// #lldbclient-generated-end
, quindi che l'elenco di configurazioni ha il seguente aspetto:"configurations": [ // #lldbclient-generated-begin // #lldbclient-generated-end ]
lldbclient.py
utilizza questi commenti per rilevare dove scrivere la configurazione. Se ci sono sono altri elementi dell'elenco, aggiungi le righe di commento alla fine, dopo le altre configurazioni. - Esegui questo comando nel terminale in cui hai eseguito
envsetup.sh
elunch
:lldbclient.py --setup-forwarding vscode-lldb \ --vscode-launch-file LAUNCH_JSON_PATH \ ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...
lldbclient.py
scrive la configurazione generata inlaunch.json
e continua a essere eseguito. Si tratta di un comportamento previsto. non terminare il programmalldbclient.py
. Se ometti--vscode-launch-file
, lo script stamperà lo snippet JSON che dovrai devi copiare e incollare manualmente inlaunch.json
.Il flag
-r
deve essere l'ultimo se presente a causa del modo in cui i flag vengono analizzati lo strumento. - Apri la barra laterale Esegui e debug. La nuova configurazione dovrebbe essere visualizzata nella
dell'elenco debugger. Premi Avvia debug (F5). Il debugger dovrebbe connettersi dopo
da 10 a 30 secondi.
Se la nuova configurazione non compare nella vista Esegui e debug, ricarica la finestra per aggiorna l'elenco del debugger: premi Ctrl+Maiusc+P e digita
reload window
. - Al termine del debug, vai al terminale in esecuzione
lldbclient.py
e premi Invio per terminarelldbclient.py
. Esecuzioni successive dello script genererebbero la configurazione tra i commenti#lldbclient-generated
e sostituire i contenuti precedenti, non manualmente.
Per aggiungere proprietà personalizzate alla configurazione di avvio generata, puoi utilizzare
--vscode-launch-props
flag. Ad esempio:
lldbclient.py --setup-forwarding vscode-lldb \
--vscode-launch-props \
'{"initCommands" : ["script print(\"Hello\")"], "preLaunchTask" : "Build"}' \
...
Con le proprietà di esempio VS Code eseguirebbe un'attività denominata Build
prima del debug e
aggiunge un nuovo passaggio di inizializzazione del debug ai passaggi generati dallo script. Puoi trovare
delle strutture disponibili nella
documentazione di VS Code e nel Manuale dell'utente del
.
Estensione CodeLLDB.