Java/Android - 如何打印出完整的堆栈跟踪?

标签 java android exception stack stack-trace

在 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

但有时,出于调试目的,我想从代码中的位置记录完整的堆栈跟踪。我想我可以这样做:

StackTraceElement trace = new Exception().getStackTrace();
Log.d("myapp", trace.toString());

但这只是打印出指向对象的指针...我是否必须遍历所有堆栈跟踪元素才能打印出来?或者有什么简单的方法可以打印出来?

最佳答案

以下应该可以解决问题:

Log.d("myapp", Log.getStackTraceString(new Exception()));

注意...x more在末尾does not cut off any information from the stack trace:

(This indicates) that the remainder of the stack trace for this exception matches the indicated number of frames from the bottom of the stack trace of the exception that was caused by this exception (the "enclosing" exception).

...或者换句话说,将 x more 替换为第一个异常的最后 x 行。

关于Java/Android - 如何打印出完整的堆栈跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7841232/

相关文章:

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

java - gradle compileJava错误: package org. junit.jupiter.api不存在

java - 为下一个 Activity 获取多个值(value)

android - java.lang.NoSuchMethodError : android. 应用程序通知$Builder.addAction

Android 相机 - 如何从字节数组中获取特定的 "rectangle"?

java - 为什么会使用原因链中的循环?

java - 如何在 Java 游戏中发出命令?

java - Primefaces 使用 JSF 中的模板更新属性

Android 辅助功能设置(Talkback)焦点

python - 如何从 Python 中的段错误中恢复?