Ispeziona i log di traccia con Traceview

Traceview è deprecato. Se utilizzi Android Studio 3.2 o versioni successive, devi invece utilizzare lo strumento CPU Profiler per esaminare .trace i file acquisiti mediante l'strumentazione della tua app con la classe Debug, registrare nuove tracce dei metodi, salvare .trace file e analizzare l'utilizzo in tempo reale della CPU da parte dei processi dell'app.

Traceview è uno strumento che fornisce rappresentazioni grafiche dei log di traccia. Puoi generare i log attribuendo al tuo codice la classe Debug. Questo metodo di tracciamento è molto preciso perché puoi specificare esattamente il punto del codice in cui desideri avviare e interrompere la registrazione dei dati di traccia. Se non hai ancora generato questi log di traccia e li hai salvati dal dispositivo connesso alla macchina locale, vai a Genera log di traccia mediante la strumentazione dell'app. Il controllo di questi log mediante Traceview consente di eseguire il debug dell'app e di profilarne le prestazioni.

Suggerimento: puoi utilizzare dmtracedump dalla riga di comando per generare diagrammi grafici dello stack di chiamate dei file di log di traccia.

Se non hai bisogno di visualizzare i log di traccia che hai registrato attribuendo alla tua app la classe Debug, puoi utilizzare il profiler CPU incluso in Android Studio 3.0 e versioni successive per ispezionare i thread della tua app e registrare le tracce del metodo.

Aprire un log di traccia utilizzando Traceview

Per aprire un log di traccia con Traceview da Android Studio, procedi nel seguente modo:

  1. Avvia Monitoraggio dispositivi Android.
  2. In Monitoraggio dispositivi Android, seleziona File > Apri file.
  3. Vai al file .trace che vuoi esaminare.
  4. Fai clic su Apri.

Nota: se stai tentando di visualizzare i log di traccia di un'app creata con la riduzione del codice abilitata (ad esempio una build di release), alcuni nomi di metodi e membri potrebbero essere offuscati. Puoi utilizzare il file ProGuard mapping.txt per capire i nomi originali non offuscati. Per ulteriori informazioni su questo file, consulta Decodificare un'analisi dello stack offuscata.

Nota: l'esecuzione di traceview dalla riga di comando è stata ritirata.

Panoramica di Traceview

Dopo aver aperto un log di traccia, Traceview visualizza i dati di log utilizzando i seguenti due riquadri:

Le sezioni seguenti forniscono informazioni aggiuntive sui riquadri di output del trackview.

Riquadro della sequenza temporale

La figura 1 mostra un primo piano del riquadro della sequenza temporale. L'esecuzione di ogni thread viene mostrata su una riga separata, con il tempo trascorso che aumenta verso destra. Ogni metodo viene mostrato in diversi colori. Le linee sottili sotto la prima riga mostrano gli elementi secondari (da ingresso a uscita) del metodo selezionato.

Riquadro della sequenza temporale di Traceview

Figura 1. Il riquadro della sequenza temporale di Traceview.

Riquadro del profilo

Come mostrato nella Figura 2, il riquadro del profilo fornisce un elenco di ciascun metodo eseguito dal sistema nel periodo del log di traccia e il tempo dedicato all'esecuzione di questi metodi. Un metodo che chiama un altro metodo è noto come principale e i metodi che una chiamata padre sono indicati come i suoi elementi secondari. Quando selezioni un metodo facendo clic su di esso, vengono visualizzati sia i metodi principali sia quelli secondari in due nodi separati.

Per ogni metodo (nodo di primo livello), la tabella mostra sia i tempi inclusivi ed esclusivi (in millisecondi) sia la percentuale del tempo totale. Il tempo esclusivo è il tempo trascorso nell'esecuzione del codice del metodo, mentre il tempo inclusivo è il tempo dedicato all'esecuzione del codice del metodo più il tempo dedicato all'esecuzione dei relativi elementi figlio. Le informazioni sui tempi sono riportate anche in termini di tempo CPU e tempo reale. Il tempo CPU prende in considerazione solo il tempo in cui il thread utilizza attivamente il tempo di CPU, mentre il tempo reale fornisce informazioni di temporizzazione assolute dal momento in cui l'app accede a un metodo fino a quando esce da questo metodo, indipendentemente dal fatto che il thread sia attivo o inattivo.

Per ogni nodo di primo livello nel riquadro del profilo, la colonna Chiamate + Rec, Chiamate/Totale nella tabella (non mostrata nella Figura 2) riporta il numero di chiamate al metodo e il numero di chiamate ricorsive. In alternativa, per i metodi padre e figlio, questa colonna mostra il numero di chiamate in cui il metodo era figlio o padre del metodo nel nodo di primo livello.

Riquadro del profilo Traceview.

Figura 2. Il riquadro del profilo Traceview.

Problemi noti di Traceview

Il logging di Traceview non gestisce correttamente i thread, causando i seguenti problemi:

  • Se un thread si chiude durante la profilazione, il nome del thread non viene emesso (corretto in Android 5.1 e versioni successive);
  • La VM riutilizza gli ID thread. Se un thread si interrompe e ne inizia un altro, potrebbero ricevere lo stesso ID.