Queste pagine contengono informazioni utilizzando LLDB o GDB per lo sviluppo del sistema operativo. Per lo sviluppo di applicazioni, vedere Debug vostra applicazione , invece, che spiega come utilizzare lo Studio GUI Android (basato su LLDB).
GDB è deprecato e verrà rimosso a breve. Se stai passando da GDB a LLDB, probabilmente si dovrebbe iniziare leggendo il LLDB Tutorial . Se sei un utente esperto di GDB, il GDB per LLDB comando map è molto utile durante la transizione.
Prerequisiti
Per utilizzare un debugger:
- Impostare l'ambiente di compilazione con il solito
envsetup.sh
comando. - Eseguire lo stesso
lunch
di comando si è utilizzato nella costruzione.
Per ulteriori informazioni su come impostare il proprio ambiente, vedere impostare l'ambiente .
Debug di app o processi in esecuzione
Per connettersi a un'applicazione in esecuzione o demone nativo, uso gdbclient.py
con un PID. Ad esempio, per eseguire il debug del processo con PID 1234, eseguirlo sull'host:
gdbclient.py -p 1234
Lo script imposta il port forwarding, avvia lo stub di debug remoto appropriato sul dispositivo, avvia il debugger sull'host, lo configura per trovare i simboli e lo connette allo stub di debug remoto.
Debug dell'avvio del processo nativo
Per eseguire il debug di un processo che si comincia, l'uso gdbclient.py
con il -r
opzione. Ad esempio, per eseguire il debug ls /bin
, eseguire questo sull'host:
gdbclient.py -r /system/bin/ls /bin
Quindi, immettere continue
al debugger del messaggio.
Debug dell'avvio dell'app
A volte si desidera eseguire il debug di un'applicazione che si comincia, come ad esempio quando c'è un incidente e si desidera eseguire il codice per vedere cosa è successo prima dello schianto. Collegamento opere, in alcuni casi, ma in altri casi è impossibile perché l'applicazione si blocca prima di poter allegare. Il logwrapper
approccio (usato per strace
) non sempre funziona perché l'applicazione potrebbe non avere le autorizzazioni per aprire una porta, e gdbserver
eredita tale restrizione.
Per eseguire il debug dell'avvio dell'app, utilizza le opzioni sviluppatore in Impostazioni per indicare all'app di attendere il collegamento di un debugger Java:
- Vai a Impostazioni> Opzioni sviluppatore> Selezionare il debug app e scegliere la vostra applicazione dalla lista, quindi fare clic su Attendere debugger.
- Avviare l'applicazione, sia dal lanciatore o utilizzando la riga di comando per eseguire:
adb shell am start -a android.intent.action.MAIN -n APP_NAME/.APP_ACTIVITY
- Attendi che l'app venga caricata e venga visualizzata una finestra di dialogo che ti informa che l'app è in attesa di un debugger.
- Attribuiscono
gdbserver
/gdbclient
normalmente, impostare i punti di interruzione, quindi continuare il processo.
Per consentire l'esecuzione dell'app, collega un debugger Java Debug Wire Protocol (JDWP) come Java Debugger (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 bloccano
Se si desidera debuggerd
sospendere processo interrotto in modo da poter collegare un debugger, impostare la proprietà appropriata:
- Dopo Android 11
adb shell setprop debug.debuggerd.wait_for_debugger true
- Android 11 e inferiore
adb shell setprop debug.debuggerd.wait_for_gdb true
- Android 6.0 Marshmallow e inferiore
adb shell setprop debug.db.uid 999999
Alla fine della solita uscita schianto, debuggerd
fornisce copiare e incollare le istruzioni in logcat che mostrano come collegare il debugger al processo si è schiantato.
Debug senza simboli
Per 32 bit ARM, se non si dispone di simboli, gdb
non può determinare quale set di istruzioni è lo smontaggio (ARM o pollice). Per specificare il set di istruzioni scelto come predefinito quando mancano le informazioni sui simboli, impostare la seguente proprietà:
set arm fallback-mode arm # or thumb
Debug con VS Code
LLDB supporta il debug di codice piattaforma su codice Visual Studio . È possibile utilizzare il frontend del debugger di VS Code invece dell'interfaccia CLI LLDB per controllare ed eseguire il debug del codice nativo in esecuzione sui dispositivi.
Prima di utilizzare codice VS per il debug, installare l' estensione CodeLLDB .
Per eseguire il debug del codice utilizzando VS Code:
- Assicurarsi che tutti gli artefatti di generazione (come simboli) necessari per eseguire
gdbclient.py
olldbclient.py
sono presenti. - Eseguire il comando seguente:
lldbclient.py --setup-forwarding vscode-lldb ANY_OTHER_FLAGS -p pid | -n proc-name | -r ...
Questo stampa un oggetto JSON e
lldbclient.py
continua a funzionare. Questo è previsto; non uccidere illldbclient.py
programma.Il
-r
bandiera deve essere l'ultima bandiera se è presente a causa di come le bandiere vengono analizzati dallo strumento. - Nella scheda di debug in VS Codice, selezionare la configurazione aggiuntivo, quindi selezionare LLDB: Lancio personalizzato. Si apre una
launch.json
di file e aggiunge un nuovo oggetto JSON per una lista. - Elimina la configurazione del debugger appena aggiunta.
- Copiare l'oggetto JSON stampato da
lldbclient.py
e incollarlo nel l'oggetto appena cancellato. Salva le modifiche. - Per ricaricare la finestra per aggiornare l'elenco debugger, premere Ctrl + Maiusc + P e il tipo di
reload window
. - Selezionare la nuova corsa di configurazione debugger e premere. Il debugger dovrebbe connettersi dopo 10-30 secondi.
- Quando sei il debug fatto, andate al funzionamento del terminale
lldbclient.py
e premere Invio per terminare illldbclient.py
programma.