Skip to content

s1rius/android-thread-inspector

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Dec 13, 2021
31808f5 · Dec 13, 2021

History

29 Commits
Dec 8, 2021
Nov 18, 2020
Dec 8, 2021
Dec 7, 2021
Dec 13, 2021
Dec 13, 2021
Dec 13, 2021
Dec 13, 2021
May 31, 2020
May 31, 2020
Dec 9, 2021
Dec 9, 2021
Dec 8, 2021
May 31, 2020
May 31, 2020
Oct 29, 2020
Dec 7, 2021
Dec 7, 2021
Dec 7, 2021
Aug 9, 2020

Repository files navigation

android-thread-inspector

一个追踪 java 及 native 线程创建的 Flipper 插件

preview

集成

建议仅在仅在 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)
    }
}

原理

使用了 bhookpthread_createpthread_setname_np函数进行 hook。

已知问题

  • java 线程 id 与 linux 线程 id 不一致,导致 hook 之前获取到的 java 线程会重复显示
  • 1.x 版本不提供 native 的堆栈信息

协议

MIT

感谢 bhookkoom 的贡献者