Esegui il debug del codice della piattaforma

Android Studio for Platform (ASfP) fornisce un potente debugger che ti consente di:

  • Seleziona un dispositivo su cui eseguire il debug.
  • Imposta punti di interruzione nel codice Java, Kotlin, C/C++ e Rust.
  • Esamina le variabili e valuta le espressioni in fase di runtime.

Prima di utilizzare il debugger, devi trasferire la build su un dispositivo o un emulatore.

Debug del processo dell'app (Java/Kotlin)

Per eseguire il debug di un processo di applicazione Java o Kotlin:

  1. Imposta i punti di interruzione nel codice Java o Kotlin all'interno di ASfP.

  2. Seleziona Esegui > Collega debugger al processo Android dal menu.

  3. Nella finestra di dialogo Scegli processo, assicurati che Tipo di debug sia impostato su Solo Java.

  4. Seleziona il tuo dispositivo dall'elenco.

  5. Scegli la procedura di applicazione specifica di cui vuoi eseguire il debug.

  6. Fai clic su OK.

  7. Interagisci con l'applicazione sul tuo dispositivo per raggiungere i punti di interruzione.

Debug del processo di sistema (C/C++)

Per eseguire il debug di un processo di sistema scritto in C o C++:

  1. Verifica che sia in esecuzione un solo dispositivo o emulatore.

  2. Apri un terminale ed esegui adb root dalla radice del checkout AOSP: bash adb root

  1. Imposta punti di interruzione nel codice C/C++ all'interno di ASfP.

  2. Seleziona Esegui > Collega debugger al processo Android dal menu.

  3. Nella finestra di dialogo Scegli processo, imposta Tipo di debug su Solo nativo o Doppio (Java + nativo).

  4. Seleziona la casella Mostra tutti i processi per visualizzare i processi di sistema.

  5. Seleziona il tuo dispositivo dall'elenco.

  6. Scegli il processo di sistema specifico di cui vuoi eseguire il debug (ad esempio surfaceflinger o system_server).

  7. Fai clic su OK.

  8. Interagisci con il dispositivo per raggiungere i punti di interruzione.

Debug di Rust

ASfP supporta il debug di Rust utilizzando il protocollo Debug Adapter Protocol (DAP) con LLDB. Questa sezione descrive come configurare CodeLLDB come server di adattamento del debug ed eseguire il debug del codice Rust sull'host e su un dispositivo Android.

Configurare CodeLLDB come server di adattatore di debug

  1. Crea una nuova configurazione di esecuzione/debug Debug Adapter Protocol:

    1. Seleziona Esegui > Modifica configurazioni dal menu.
    2. Fai clic sul pulsante +.
    3. Seleziona Debug Adapter Protocol.
  2. Nella scheda Server, fai clic su Crea un nuovo server.

  3. Nella finestra di dialogo appena aperta, fai clic su Scegli modello e seleziona CodeLLDB dall'elenco.

  4. Dopo aver selezionato il modello CodeLLDB, il nuovo server viene aggiunto con una configurazione predefinita.

    1. Attiva la traccia dettagliata selezionando Dettagliata nel menu a discesa Traccia.
    2. Aggiungi una variabile di ambiente che specifichi il percorso di lldb-server nei prebuilt delle origini Android:
        LLDB_DEBUGSERVER_PATH=REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/runtimes_ndk_cxx/x86_64/lldb-server
        ```
    
    Replace `REPO_ROOT` with the absolute path to your Android source checkout.
    To find `CLANG_VERSION`, run the `get_clang_version.py` script from the root of
    your Android source tree:
    
    ```bash
        ./build/soong/scripts/get_clang_version.py
    
    1. Non modificare la sezione <<insert base directory>>.

Eseguire il debug dei file binari Rust sull'host

  1. Apri la scheda Configurazione nella configurazione Esegui/Debug del protocollo di adattamento del debugger.
  2. Seleziona Avvia come Modalità di debug.
  3. Aggiorna la directory di lavoro e seleziona il file binario che vuoi debuggare.
  4. Fai clic su Ok per salvare la configurazione.
  5. Avvia la sessione di debug facendo clic sull'icona Debug accanto alla configurazione.

La prima volta che esegui questo comando, CodeLLDB viene scaricato. Dovresti visualizzare le tracce DAP nella console. I punti di interruzione impostati nel codice Rust devono essere raggiunti come previsto.

Eseguire il debug dei file binari Rust su un dispositivo Android (modalità di collegamento)

  1. Trova il PID:identifica l'ID processo (PID) dell'applicazione che vuoi debug sul dispositivo Android.

  2. Avvia lldb-server sul dispositivo: dalla radice del checkout dell'albero delle origini Android, esegui lo script lldbclient.py, sostituendo <PID> con l'ID processo:

    lldbclient.py --setup-forwarding vscode-lldb -p <PID>
    

    Questo script esegue il push del lldb-server corretto sul dispositivo, lo avvia, configura l'inoltro delle porte (porta host 5039 al dispositivo) e restituisce la configurazione JSON DAP necessaria per i passaggi successivi. Tieni aperto questo terminale.

  3. Avvia l'adattatore di debug CodeLLDB sull'host:

    • Vai alla directory dell'estensione CodeLLDB (impostazione predefinita: ~/.lsp4ij/dap/codelldb/extension/adapter).
    • Imposta le variabili di ambiente richieste e avvia il server dell'adattatore, sostituendo REPO_ROOT e CLANG_VERSION come determinato nella configurazione del server:
        # Sets PYTHONHOME env variable
        export PYTHONHOME=REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/python3
    
        # Tell the dynamic linker where to find python libs
        export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/python3/lib
    
        # Starts the CodeLLDB Debugger Adapter server on port 1234
        ./codelldb --liblldb REPO_ROOT/prebuilts/clang/host/linux-x86/CLANG_VERSION/lib/liblldb.so --port 1234
    
  4. Configura il client DAP ASfP:

    1. Torna alla configurazione di esecuzione/debug del protocollo di adattatore di debug in ASfP.
    2. Seleziona la scheda Configurazione.
    3. Imposta Modalità debug su Collega.
    4. Imposta Indirizzo su localhost.
    5. Imposta Porta su 1234.
    6. Incolla l'output JSON del comando lldbclient.py (passaggio 2) nel campo Parametri DAP (JSON).
  5. Fai clic su Debug per avviare la sessione di debug.

Risoluzione dei problemi

  • Se visualizzi l'errore error: Connection shut down by remote side while waiting for reply to initial handshake packet, termina la sessione di debug corrente e riavvia lldb-server sul dispositivo e l'adattatore CodeLLDB sull'host.