Esegui il debug del codice della piattaforma

Android Studio for Platform (ASfP) integra il debug della piattaforma multilingue intorno alla scheda Collega nella finestra degli strumenti Debug:

  • Seleziona Esegui > Collega a processo Android (Control+Alt+A) per collegare il debugger Java, il debugger nativo (LLDB in bundle) o entrambi a qualsiasi app o processo di sistema in esecuzione su un dispositivo fisico o su un dispositivo virtuale Cuttlefish.
  • Ispeziona ogni libreria condivisa caricata (.so) e il relativo ID build ELF di otto caratteri nel riquadro Librerie prima di allegare, con icone a forma di segno di spunta che verificano la corrispondenza dei simboli di debug locali in out/target/product/<device>/symbols.
  • Gestisci i prerequisiti del dispositivo dalla barra degli strumenti: filtra con Mostra processi di sistema, fai clic su Dispositivo root per eseguire adb root (visualizzando Dispositivo con accesso root quando è attivo) e fai clic su Attiva JDWP per attivare JDWP sulle build userdebug.
  • Imposta punti di interruzione condizionali e di eccezione, visualizza i valori delle variabili inline nell'editor, utilizza Drop Frame e Step Into intelligente e ispeziona i tipi C++ e Rust strutturati in fase di runtime.

Prima di utilizzare il debugger, crea la destinazione lunch in modo che esista l'indice dei simboli out/target/product/<device>/symbols/.build-id locale e carica o avvia un'immagine del dispositivo corrispondente.

Debug Java e doppio debug Java e nativo

Per eseguire il debug di un'applicazione Java o Kotlin, di un'app di sistema (ad esempio com.android.messaging, Impostazioni o SystemUI) o di un processo che chiama codice JNI e C++ o Rust, completa i seguenti passaggi:

  1. Imposta i punti di interruzione nei file sorgente Java, Kotlin, C, C++ o Rust.
  2. Seleziona Esegui > Collega a processo Android (Ctrl+Alt+A). ASfP apre una scheda Allega bloccata all'interno della finestra dello strumento Debug.
  3. Seleziona il dispositivo di destinazione dal menu a discesa dei dispositivi. Se JDWP non è abilitato in una build userdebug, fai clic su Abilita JDWP. ASfP imposta persist.debug.dalvik.vm.jdwp.enabled=1 e riavvia il dispositivo. Quando è attivo, il pulsante mostra JDWP abilitato con un'azione di clic con il tasto destro del mouse Disabilita JDWP.
  4. Seleziona il processo di destinazione dalla tabella (i processi Java e ART mostrano un'icona a forma di tazza di caffè).
  5. Nella parte inferiore della scheda Allega, seleziona Debugger Java, Debugger nativo o entrambi. Se selezioni entrambe le opzioni, si aprono due schede collegate nella finestra degli strumenti Debug: <process> (<pid>) per LLDB integrato e <process> (<pid>)-jdwp per Java. I loro cicli di vita sono collegati, quindi l'interruzione di una sessione comporta l'interruzione di entrambe.
  6. Fai clic su Allega e interagisci con l'app sul tuo dispositivo per raggiungere i punti di interruzione.

Schede di debug Java e nativo collegate alla scheda Allega

Debug del processo di sistema (C e C++) e verifica dei simboli

Per eseguire il debug di daemon di sistema, HAL o servizi di sistema (ad esempio android.hardware.bluetooth-service.cuttlefish, surfaceflinger o audioserver), completa i seguenti passaggi:

  1. Apri Esegui > Collega a processo Android (Ctrl+Alt+A). Se la barra degli strumenti mostra Root Device, fai clic per eseguire ASfP adb root e visualizzare Device is rooted.
  2. Seleziona Mostra processi di sistema nella barra degli strumenti in alto e filtra in base al processo di destinazione.
  3. Verifica i simboli di debug locali nel riquadro Librerie: la selezione di un processo compila la tabella Librerie con ogni libreria condivisa ELF (.so) caricata nel processo e i primi otto caratteri esadecimali del relativo ID build. ASfP confronta ogni ID build con out/target/product/<device>/symbols (symbols/.build-id è necessario per risolvere le librerie all'interno degli APEX):
    • Le librerie verificate mostrano un'icona con un segno di spunta. Punta a una riga risolta per visualizzare l'anteprima del percorso completo del simbolo .debug locale.
    • Le librerie non risolte senza simboli locali corrispondenti mostrano un'icona di avviso.
  4. Rilevamento dei processi non Java: quando selezioni un processo C++ o Rust (contrassegnato con un'icona esagonale C), ASfP nasconde Debugger Java e mostra Debug Java non disponibile, non è un processo Java mantenendo selezionato Debugger nativo.
  5. Imposta i punti di interruzione nei file sorgente C, C++ o Rust, fai clic su Collega e attiva il percorso del codice sul dispositivo.

Scheda Allegato che mostra la tabella Librerie, gli ID build ELF e i segni di spunta dei simboli locali

Eseguire il debug del codice Rust

ASfP esegue il debug del codice della piattaforma Rust con lo stesso debugger LLDB integrato utilizzato per C e C++. Non è richiesta alcuna configurazione manuale di server o adattatore esterno: ASfP utilizza lldb-dap dalla toolchain in bundle e carica automaticamente i pretty-printer Rust dai prebuilt AOSP in modo che i tipi standard come String, Vec, HashMap e Option visualizzino valori strutturati nel riquadro Variabili.

Collegare a un processo Rust in esecuzione su un dispositivo

Segui i passaggi descritti in Debug del processo di sistema (C e C++): apri Esegui > Collega a processo Android, verifica che Il dispositivo è sottoposto a rooting e che i simboli locali mostrino un segno di spunta nel riquadro Librerie, mantieni selezionata l'opzione Debugger nativo e fai clic su Collega. Gli stack frame Rust e C o C++ vengono visualizzati insieme nella stessa sessione di debug.

Eseguire il debug di un modulo rust_test o rust_test_host

  1. Apri il file Android.bp che dichiara una destinazione rust_test o rust_test_host e fai clic sull'icona Esegui nel margine accanto al tipo di modulo.
  2. Seleziona Debug "<ModuleName>". ASfP crea la destinazione, avvia il test binario in LLDB sulla macchina host o sul dispositivo connesso e si interrompe in corrispondenza dei punti di interruzione Rust.
  3. Per eseguire il debug di una singola funzione di test o personalizzare i comandi di avvio di LLDB, apri Esegui > Modifica configurazioni, seleziona la configurazione Soong Test generata e imposta Metodo o espandi le opzioni Debugger. Per ulteriori informazioni sulle opzioni di configurazione di Soong Test, consulta Testare il codice della piattaforma con atest.

Debug del codice della piattaforma Rust con visualizzatori di variabili strutturate in ASfP