Eclipse logcat tagli finestre dalle tracce di eccezione di stack
Domanda
La mia finestra logcat in Eclipse visualizza solo le prime righe del StackTrace per ciascuna eccezione. Ciò significa che spesso non possono vedere dove si è verificato un'eccezione. Esiste un modo per modificare le impostazioni?
Soluzione
Se ti riferisci alla "... 12 più linee ..." parte, si vede solo che per le eccezioni che sono state la causa di un'altra eccezione. Se la parte superiore della traccia dello stack è la stessa come la traccia in precedenza, la serie completa di frame viene visualizzato solo per l'eccezione più esterna, e le altre tracce ottenere il "..." trattamento.
In altre parole, il pezzo di una traccia che non viene mostrato è un duplicato di una traccia che è apparso in precedenza nella catena un'eccezione causa. Ad esempio, supponiamo di avere codice in cui le chiamate di metodo main()
one()
, che chiama two()
, e così via. four()
genera un'eccezione. two()
afferra e ri-getta. L'eccezione sarà simile a questa:
java.lang.RuntimeException: re-throw
at Foo.two(Foo.java:14)
at Foo.one(Foo.java:7)
at Foo.main(Foo.java:3)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.RuntimeException: first
at Foo.four(Foo.java:23)
at Foo.three(Foo.java:19)
at Foo.two(Foo.java:12)
... 3 more
Il "causato da" eccezione dice: "... 3 più" piuttosto che elencando esplicitamente one()
, main()
e dalvik.system.NativeStart.main
. Quindi, per ottenere il pieno traccia dell'eccezione iniziale, si dovrebbe iniziare leggendo la sua traccia, quindi continuare la traccia sopra.
Nota non c'è sovrapposizione -. Appare two()
in entrambi, ma nella "prima" traccia è sulla chiamata a three()
, e nel "ri-lancio" traccia è su istruzione throw
Altri suggerimenti
è possibile sovraccaricare tutti i metodi di registro (log.d, log.i, log.e, ecc) con parametri (String tag, String msg, Throwable tr)
, dove il terzo parametro è l'eccezione. Questo vi darà la piena stacktrace in logcat
http://developer.android.com/reference/android/util/ Log.html
Se il codice chiama un metodo che produce troppo alto della pila si può (e si deve) gestire l'eccezione nel codice e l'output tutto ciò che è rilevante per i registri.
Se non avete la manipolazione di sorta eccezione e non sai nemmeno dove nel codice dovrebbe essere messa una tale gestore allora il problema è del tutto altrove -. Si dovrebbe essere la gestione delle eccezioni un po 'migliore di quella