DevCorner: Logcat, questo sconosciuto!

Giuseppe Tripodi
Giuseppe Tripodi Tech Master
DevCorner: Logcat, questo sconosciuto!

Con l'opprimente caldo estivo, è più che normale aver voglia di un gelato mentre si programma: ma distrarsi il tempo necessario per arrivare al congelatore può farci perdere la concentrazione e causare gravi dimenticanze, che si trasformeranno inevitabilmente in crash della nostra applicazione.

Ed è qui che ci viene in aiuto il Logcat: si tratta di uno strumento per tenere traccia dei log del software, a dir poco fondamentale per scoprire le cause dei malfunzionamenti del nostro codice.

logcat

Caratterizzato dall'ormai inconfondibile logo con l'androide volante in stile NyanCat, è possibile trovarlo come tool integrato nei principali IDE di sviluppo come Eclipse, IntelliJ e ovviamente Android Studio: sebbene capiti che alcuni sviluppatori, anche tra i più esperti, si dimentichino di fornire il log nelle eventuali richieste di aiuto, farlo è semplicemente indispensabile per ricevere un suggerimento più mirato. Per questo motivo, oggi su DevCorner cerchiamo di farvi prendere un po' di familiarità con questo strumento.

Per prima cosa, ricordiamo che il Logcat è richiamabile anche da terminale via adb: l'interfaccia sarà ovviamente meno colorata, ma a volte può risultare utile per un controllo veloce o per salvare lunghi log.

Una volta aperta una shell all'interno della cartella platform-tools contenuta nell'SDK di Android, ci basterà digitare quanto segue per avviare l'operazione di log:

  • Su Windows: adb logcat
  • Su Linux o Mac: ./adb logcat

Una piccola chicca che non molti sanno: visto che abbiamo appurato più volte che gli ingegneri di Google sono un po' burloni, sappiate che il comando funziona anche digitando lolcat, con la "L" al posto della "G".
Questo semplice comando, tuttavia, ci restituirà un mare di risultati che sarebbe meglio filtrare utilizzando diversi parametri: nello screenshot che vedete qui in basso, ad esempio, utilizzo:

  • -v long per formattare il testo in maniera più leggibile
  • *:E per cercare solo gli errori. L'asterisco (*) indica la ricerca tra tutti i processi e, seguito dalla E dopo i due punti, fa in modo che la ricerca si focalizzi solo sui messaggi di tipo error.

Tuttavia, visto che utilizzare il Logcat da terminale non è sempre molto comodo, proseguiamo spiegando come leggerlo da un IDE: se volete sapere di più dei comandi da terminale, vi rimandiamo a due pagine di Google Developers: Reading and Writing Logs e Android Util: Log.

Prima abbiamo detto che è possibile specificare il tipo di messaggio da filtrare: nel caso precedente abbiamo selezionato di leggere solo gli errori, ma ci sono cinque possibili alternative, che ci consentono di tener traccia solo di determinati eventi. Sono elencate di seguito in base alla priorità: va da sé che error conterrà solo i log di errore, quindi i più critici, mentre verbose terrà traccia di praticamente tutto ciò che avviene sul nostro smartphone.

  • verbose
  • debug
  • info
  • warn
  • error

Normalmente, negli IDE come Eclipse e IntelliJ, i messaggi che riceviamo sono anche colorati in base alla loro criticità:

  • Blu per i messaggi verbose e debug
  • Verde per info
  • Arancione per warn
  • Rosso per error
Logcat

Saper leggere i logcat (specialmente quelli di errore!) è fondamentale quando si sviluppa un'applicazione: nel Log ci viene fornito il nome dell'errore (NullPointerException, OutOfMemoryError etc) e soprattutto l'Activity e la riga di codice che l'ha scatenato, con una sintassi del tipo:

Caused by: MainActivity:42

dove si intente ovviamente che l'errore è stato causato dalla riga 42 della MainActivity.

Il log, infine, è anche un metodo di Android e può essere utile per verificare che tutto stia funzionando correttamente: anche nel caso in cui viene richiamato da noi, possiamo classificarlo in base alla priorità utilizzando le iniziali dei cinque messaggi d'errore, in particolare:

  • Log.v(x,y); per verbose
  • Log.d(x,y); per debug
  • Log.i(x,y); per info
  • Log.w(x,y); per warn
  • Log.e(x,y); per error

Quello che abbiamo specificato come x e y, invece, non sono nient'altro che delle stringhe, da sostituire con un parametro già assegnato o da scrivere, ovviamente tra virgolette. Il primo si utilizza come tag, per specificare cosa stiamo loggando, mentre il secondo è l'elemento di cui tenere traccia. Se, ad esempio, abbiamo il dubbio su una stringa di testo che scarichiamo da internet, possiamo scrivere un log come:

String testoDownload;
Log.d("Testo scaricato", testoDownload);

In questo caso, dal Log potremo poi leggere se la nostra variabile testoDownload è stata effettivamente scaricata da internet e viene visualizzata o se, al contrario, risulta ancora non inizializzata.

Adesso che abbiamo dato una rispolverata a come funziona il Logcat e come utilizzarlo, potete tornare a sbattere la testa sul progetto che state seguendo: come sempre, se avete problemi nello sviluppo potete scrivere sul nostro forum e... non dimenticatevi di allegare i log!

Fonte: DevCorner