如何以编程方式获取包含已阻止和等待信息的堆栈跟踪?



我正在调查我的Android应用程序中的死锁问题(不是ANR(。当我的应用程序检测到潜在的死锁时,它会使用 Thread.getAllStackTraces(( 打印出所有活动线程的堆栈跟踪。但此堆栈跟踪信息不包括等待和阻止的信息。我想以编程方式获取堆栈跟踪,其中包含如下所示的等待和阻止信息。有没有办法做到这一点?

"main" prio=5 tid=1 WAIT
| group="main" sCount=1 dsCount=0 obj=0x418ccea0 self=0x417c7388
| sysTid=13183 nice=-11 sched=0/0 cgrp=apps handle=1074684244
| state=S schedstat=( 0 0 0 ) utm=7 stm=5 core=3
at java.lang.Object.wait(Native Method)
- waiting on <0x42aeb7a8> (a com.myapp.SomeModule)
at java.lang.Object.wait(Object.java:364)
at com.myapp.SomeModule.doSomething(SomeModule.java:45)

有一种方法可以在应用崩溃或线程由于意外异常而终止时获取堆栈跟踪。

您可以添加UncaughtExceptionHandler

Thread.setDefaultUncaughtExceptionHandler { thread, exception -> 
// check here for thread info and exception thrown
}

在此处查看更多信息:https://www.bugsnag.com/blog/error-handling-on-android-part-2

安卓文档:https://developer.android.com/reference/java/lang/Thread.UncaughtExceptionHandler

最新更新