-
Notifications
You must be signed in to change notification settings - Fork 23
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在部分Android12 机型上会崩溃 #3
Comments
看崩溃堆栈应该是线程挂起恢复的问题导致的。我是场景是在子线程中抓主线程的堆栈 |
第一次调用就崩溃吗, 方便贴下完整的错误日志? |
完整的日志堆栈就只有这么多: 崩溃机型都是Android12 ,三星a51, a32x,a32。因为是线上的崩溃,我本地没有复现过 |
有错误的信号信息吗,没有信号看不出来具体是什么类型的错误 |
就是没有信号相关的信息,我查了Android12 art runtime相关的代码,也看不出哪里的问题。Google Play上的堆栈不是很完整,只有这么多调用栈相关的信息。绝大部份崩溃机型都是Android12,极少部分12L和13,崩溃的地方都是这个线程挂起方法。 |
@Knight-ZXW 这个问题我目前也碰到了, 在OPPO A93 Android12系统必崩,首次调用就崩了 2024-05-20 10:18:40.379 27173-27173/? A/DEBUG: signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x20010 |
我晚点测试下, 另外这个项目是demo,我还没应用到生产环境,最好自己多测试下,已知的存在 一些偏移量兼容的问题还没改。 |
@Knight-ZXW 我是用”采集其他线程-锁等待信息测试“ , 你也是这个路径吗 |
@Knight-ZXW 通过偏移量获取的指针有什么方式可以判断是否是threadList吗?加个校验会更安全点 |
其他2个按钮的功能正常吗,我是测了3个都没崩溃 |
”采集主线程调用栈“和”采集其他线程-锁等待信息测试“ 只有这两个路径会崩, 因为这两个路径才会调用SuspendThreadByThreadId |
还测了哪些机型会崩溃吗,我是用的云测,在这个手机上测试 确实没崩溃 |
@Knight-ZXW 像华为、荣耀 12系统的手机, 我测了几台都是正常的; 目前我也不确定还有哪些设备会出现这样的问题, 想加个校验逻辑, 大佬有什么比较好的方式判断获取的指针是threadList对象? |
这个只能自己研究了,我还没研究过,提供个思路比如用 inline hook某个 函数参数包含 ThreadList 的api (比如 SuspendThreadByPeer), 然后通过某种方式去触发这个Api的调用 (比如正常的Java层 Thread.getStackTrace 最终会触发这个API的调用), 最后在代理的函数中,去获取threadList指针做比较。 |
#00 pc 0x00000000003aa704 /apex/com.android.art/lib64/libart.so (art::ThreadList::SuspendThreadByThreadId(unsigned int, art::SuspendReason, bool*)+476)
3KVagKS7J-eSYpicWVYcjA==/lib/arm64/libsliver.so (Java_com_knightboost_sliver_Sliver_nativeGetMethodStackTrace+204)
The text was updated successfully, but these errors were encountered: