在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 methods个签名中有(String tag, String msg, Throwable tr)个签名.

将异常作为third参数传递应该会在logcat中提供完整的堆栈跟踪.

Android相关问答推荐

在Jetpack Compose中,material 3 Textfield上的底部边框 colored颜色 是如何更改的?

译码BLE血糖仪特征值

无法将Kotlin序列化添加到Android项目

DocumentFile.canWrite()、DocumentFile.Existes()-使用本地内置手机存储(而不是云)时性能较差(占用太多CPU时间)

安卓Azure通讯聊天UI库导入?

如何在jetpack compose中使可组合的屏幕zoom 到不同的手机(屏幕)尺寸?

Spinner - onItemLongClick 从未执行

如何使用滑行加载媒体的专辑封面?

如何在 Delphi 和 Android 上避免 Indy Socket Error #13 Access denied 异常?

当手表与手机断开连接时,有没有办法在我的 Wear OS 应用程序中显示操作系统级别的图标?

如果 auth 失败,如何显示 toast jetpack compose firebase if else @Composable 调用只能在 @Composable 函数的上下文中发生

在 Jetpack Compose 中使用 .observeAsState() 时,如何在更改 MutableLiveData 的值后开始执行一段代码?

如何在 Compose 中使用合并的单元格创建网格视图?

Kotlin Coroutines 会取代 AsyncTask 吗?

是什么让 Android Studio 中的按钮变成紫色?加上新手的其他奇怪行为

如何在 TextInputEdit 中调整可绘制对象的大小

在 Room 中创建一对多关系时,@Relation 类是什么意思?

将生成的 AAR 与 Composables 一起使用时未解决的参考

如何满足设备内框架的无效 Wear OS 屏幕截图Wear OS 表盘策略违规?

即使会话已暂停且音频已禁用,Android 设备仍显示正在使用麦克风