一个追踪 java 及 native 线程创建的 Flipper 插件
建议仅在仅在 Debug buildType 下集成该插件,用于调试。
添加依赖
debugImplementation "wtf.s1.pudge:thread-inspector-flipper:x.x.x"
debugImplementation "wtf.s1.pudge:thread-inspector-bhook:x.x.x"
在 src/debug/DebugApp.kt 中初始化
class DebugApp: App() {
override fun onCreate() {
super.onCreate()
SoLoader.init(this, false)
if (BuildConfig.DEBUG && FlipperUtils.shouldEnableFlipper(this)) {
val client = AndroidFlipperClient.getInstance(this)
client.addPlugin(S1ThreadPlugin())
client.start()
}
}
override fun attachBaseContext(base: Context?) {
ByteHook.init(
ByteHook.ConfigBuilder()
.setMode(ByteHook.Mode.AUTOMATIC)
.setDebug(BuildConfig.DEBUG)
.build()
)
S1ThreadHooker.hookThread()
super.attachBaseContext(base)
}
}
使用了 bhook 对pthread_create
和pthread_setname_np
函数进行 hook。
- java 线程 id 与 linux 线程 id 不一致,导致 hook 之前获取到的 java 线程会重复显示
- 1.x 版本不提供 native 的堆栈信息
MIT