Java / Android - How to print out a full stack trace?
Java / Android - Как распечатать полную трассировку стека?
В Android (Java) как мне распечатать полную трассировку стека? Если мое приложение выходит из строя из-за исключения NullPointerException или чего-то еще, оно выводит (почти) полную трассировку стека следующим образом:
java.io.IOException: Attempted read from closed stream. com.android.music.sync.common.SoftSyncException: java.io.IOException: Attempted read from closed stream. at com.android.music.sync.google.MusicSyncAdapter.getChangesFromServerAsDom(MusicSyncAdapter.java:545) at com.android.music.sync.google.MusicSyncAdapter.fetchDataFromServer(MusicSyncAdapter.java:488) at com.android.music.sync.common.AbstractSyncAdapter.download(AbstractSyncAdapter.java:417) at com.android.music.sync.common.AbstractSyncAdapter.innerPerformSync(AbstractSyncAdapter.java:313) at com.android.music.sync.common.AbstractSyncAdapter.onPerformLoggedSync(AbstractSyncAdapter.java:243) at com.google.android.common.LoggingThreadedSyncAdapter.onPerformSync(LoggingThreadedSyncAdapter.java:33) at android.content.AbstractThreadedSyncAdapter$SyncThread.run(AbstractThreadedSyncAdapter.java:164) Caused by: java.io.IOException: Attempted read from closed stream. at org.apache.http.impl.io.ChunkedInputStream.read(ChunkedInputStream.java:148) at org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.java:159) at java.util.zip.GZIPInputStream.readFully(GZIPInputStream.java:212) at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:81) at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:64) at android.net.http.AndroidHttpClient.getUngzippedContent(AndroidHttpClient.java:218) at com.android.music.sync.api.MusicApiClientImpl.createAndExecuteMethod(MusicApiClientImpl.java:312) at com.android.music.sync.api.MusicApiClientImpl.getItems(MusicApiClientImpl.java:588) at com.android.music.sync.api.MusicApiClientImpl.getTracks(MusicApiClientImpl.java:638) at com.android.music.sync.google.MusicSyncAdapter.getChangesFromServerAsDom(MusicSyncAdapter.java:512) ... 6 more
Однако иногда, в целях отладки, я хочу зарегистрировать полную трассировку стека с того места, где я нахожусь в коде. Я подумал, что могу просто сделать это:
Но это просто выводит указатель на объект... Должен ли я перебирать все элементы трассировки стека, чтобы распечатать их? Или есть простой способ распечатать все это?
(Это указывает), что остаток трассировки стека для этого исключения соответствует указанному количеству кадров из нижней части трассировки стека исключения, которое было вызвано этим исключением (исключение "enclosing").
... или, другими словами, замените x more на последние x строки из первого исключения.
Ответ 2
Есть переопределения всех методов журнала с (String tag, String msg, Throwable tr) сигнатурами.
Передача исключения в качестве третьего параметра должна дать вам полную трассировку стека в logcat.
Ответ 3
Используйте Log.getStackTraceString(Throwable t) . Вы можете получить более длинные трассировки стека, копнув глубже. Например: