Utilizzo dei debugger

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:

  1. Vai a Impostazioni> Opzioni sviluppatore> Selezionare il debug app e scegliere la vostra applicazione dalla lista, quindi fare clic su Attendere debugger.
  2. 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
    
  3. Attendi che l'app venga caricata e venga visualizzata una finestra di dialogo che ti informa che l'app è in attesa di un debugger.
  4. 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:

  1. Assicurarsi che tutti gli artefatti di generazione (come simboli) necessari per eseguire gdbclient.py o lldbclient.py sono presenti.
  2. 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 il lldbclient.py programma.

    Il -r bandiera deve essere l'ultima bandiera se è presente a causa di come le bandiere vengono analizzati dallo strumento.

  3. 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.
  4. Elimina la configurazione del debugger appena aggiunta.
  5. Copiare l'oggetto JSON stampato da lldbclient.py e incollarlo nel l'oggetto appena cancellato. Salva le modifiche.
  6. Per ricaricare la finestra per aggiornare l'elenco debugger, premere Ctrl + Maiusc + P e il tipo di reload window .
  7. Selezionare la nuova corsa di configurazione debugger e premere. Il debugger dovrebbe connettersi dopo 10-30 secondi.
  8. Quando sei il debug fatto, andate al funzionamento del terminale lldbclient.py e premere Invio per terminare il lldbclient.py programma.