三星J7elte(Android 23)Native崩溃调试方向咨询
针对你提到的近两个月来三星J7elte机型(Android 6.0,对应API 23)上出现的Native崩溃,从给出的调用栈来看,所有崩溃都集中在libart.so的ART解释器相关方法里,我给你整理几个核心的调试切入点:
先锁定崩溃触发的上下文场景
先收集崩溃发生的具体细节:比如是用户执行特定操作(如点击某个按钮、加载某类资源)后触发?还是随机无规律发生?有没有特定的系统版本分支或用户群体?这些信息能帮你快速缩小排查范围——比如如果只在某个功能模块调用后崩溃,就可以重点盯紧该模块的JNI调用或Java异常处理逻辑。还原调用栈中的C++混淆符号
你提供的调用栈里全是C++ mangled符号(比如_ZN3art11interpreter6DoCallILb0ELb1EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE),可以用c++filt工具还原成可读性强的方法名,执行命令如下:c++filt _ZN3art11interpreter6DoCallILb0ELb1EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE还原后能明确ART解释器在执行什么操作时崩溃,比如是方法调用阶段、指令执行阶段出了问题。
排查JNI代码的合规性
ART解释器崩溃大概率和JNI调用不规范有关:比如是否存在非法访问已被GC回收的Java对象、JNI方法签名与Java层不匹配、传递了错误类型的参数,或者在JNI中未正确捕获处理异常。重点检查App中涉及JNI的模块,尤其是近两个月有代码改动的部分。验证Dex文件的完整性
调用栈最后指向/system/framework/arm/boot.oat(系统预编译Dex文件),但也有可能是App自身Dex文件损坏或ART优化过程出问题。可以尝试:- 清除App的Dalvik/ART缓存后重新测试
- 检查App安装包中的Dex文件是否存在篡改、损坏,或者打包分发过程中是否出现异常
利用Android原生工具深度调试
- 使用
gdb或lldb连接到崩溃进程,捕获崩溃瞬间的寄存器状态、内存信息,定位具体的崩溃指令 - 查看
logcat日志中崩溃前后的相关输出,比如ART的警告信息、内存不足日志,或者其他Native模块的异常日志
- 使用
提供的崩溃调用栈
stackTrace : #00 pc 0000000000207552 /system/lib/libart.so (_ZN3art11interpreter6DoCallILb0ELb1EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+505) #01 pc 000000000020b787 /system/lib/libart.so (_ZN3art11interpreterL8DoInvokeILNS_10InvokeTypeE4ELb0ELb1EEEbPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+790) #02 pc 00000000000afa7d /system/lib/libart.so (_ZN3art11interpreter15ExecuteGotoImplILb1ELb0EEENS_6JValueEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameES2_+25796) #03 pc 00000000001ec79d /system/lib/libart.so (artInterpreterToInterpreterBridge+336) #04 pc 00000000002076c1 /system/lib/libart.so (_ZN3art11interpreter6DoCallILb0ELb1EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+872) #05 pc 0000000000209e93 /system/lib/libart.so (_ZN3art11interpreterL8DoInvokeILNS_10InvokeTypeE1ELb0ELb1EEEbPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+538) #06 pc 00000000000afb1d /system/lib/libart.so (_ZN3art11interpreter15ExecuteGotoImplILb1ELb0EEENS_6JValueEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameES2_+25956) #07 pc 00000000001ec79d /system/lib/libart.so (artInterpreterToInterpreterBridge+336) #08 pc 0000000000206f05 /system/lib/libart.so (_ZN3art11interpreter6DoCallILb0ELb0EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+336) #09 pc 00000000000c01f7 /system/lib/libart.so (_ZN3art11interpreter15ExecuteGotoImplILb0ELb0EEENS_6JValueEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameES2_+25142) #10 pc 00000000001ec6d5 /system/lib/libart.so (artInterpreterToInterpreterBridge+136) #11 pc 0000000000206f05 /system/lib/libart.so (_ZN3art11interpreter6DoCallILb0ELb0EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+336) #12 pc 000000000020af5f /system/lib/libart.so (_ZN3art11interpreterL8DoInvokeILNS_10InvokeTypeE4ELb0ELb0EEEbPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+538) #13 pc 00000000000c0695 /system/lib/libart.so (_ZN3art11interpreter15ExecuteGotoImplILb0ELb0EEENS_6JValueEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameES2_+26324) #14 pc 00000000001ec6d5 /system/lib/libart.so (artInterpreterToInterpreterBridge+136) #15 pc 0000000000206f05 /system/lib/libart.so (_ZN3art11interpreter6DoCallILb0ELb0EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+336) #16 pc 00000000000c01f7 /system/lib/libart.so (_ZN3art11interpreter15ExecuteGotoImplILb0ELb0EEENS_6JValueEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameES2_+25142) #17 pc 00000000001ec6d5 /system/lib/libart.so (artInterpreterToInterpreterBridge+136) #18 pc 0000000000206f05 /system/lib/libart.so (_ZN3art11interpreter6DoCallILb0ELb0EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+336) #19 pc 00000000000c09fd /system/lib/libart.so (_ZN3art11interpreter15ExecuteGotoImplILb0ELb0EEENS_6JValueEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameES2_+27196) #20 pc 00000000001ec6d5 /system/lib/libart.so (artInterpreterToInterpreterBridge+136) #21 pc 0000000000206f05 /system/lib/libart.so (_ZN3art11interpreter6DoCallILb0ELb0EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+336) #22 pc 00000000000c01f7 /system/lib/libart.so (_ZN3art11interpreter15ExecuteGotoImplILb0ELb0EEENS_6JValueEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameES2_+25142) #23 pc 00000000001ec6d5 /system/lib/libart.so (artInterpreterToInterpreterBridge+136) #24 pc 0000000000206f05 /system/lib/libart.so (_ZN3art11interpreter6DoCallILb0ELb0EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+336) #25 pc 000000000020af5f /system/lib/libart.so (_ZN3art11interpreterL8DoInvokeILNS_10InvokeTypeE4ELb0ELb0EEEbPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+538) #26 pc 00000000000c0695 /system/lib/libart.so (_ZN3art11interpreter15ExecuteGotoImplILb0ELb0EEENS_6JValueEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameES2_+26324) #27 pc 00000000001ec6d5 /system/lib/libart.so (artInterpreterToInterpreterBridge+136) #28 pc 0000000000206f05 /system/lib/libart.so (_ZN3art11interpreter6DoCallILb0ELb0EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+336) #29 pc 00000000000c01f7 /system/lib/libart.so (_ZN3art11interpreter15ExecuteGotoImplILb0ELb0EEENS_6JValueEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameES2_+25142) #30 pc 00000000001ec6d5 /system/lib/libart.so (artInterpreterToInterpreterBridge+136) #31 pc 0000000000206f05 /system/lib/libart.so (_ZN3art11interpreter6DoCallILb0ELb0EEEbPNS_9ArtMethodEPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+336) #32 pc 000000000020af5f /system/lib/libart.so (_ZN3art11interpreterL8DoInvokeILNS_10InvokeTypeE4ELb0ELb0EEEbPNS_6ThreadERNS_11ShadowFrameEPKNS_11InstructionEtPNS_6JValueE+538) #33 pc 00000000000c0695 /system/lib/libart.so (_ZN3art11interpreter15ExecuteGotoImplILb0ELb0EEENS_6JValueEPNS_6ThreadEPKNS_7DexFile8CodeItemERNS_11ShadowFrameES2_+26324) #34 pc 00000000001ec479 /system/lib/libart.so (_ZN3art11interpreter30EnterInterpreterFromEntryPointEPNS_6ThreadEPKNS_7DexFile8CodeItemEPNS_11ShadowFrameE+80) #35 pc 00000000004015ad /system/lib/libart.so (artQuickToInterpreterBridge+548) #36 pc 00000000000ea923 /system/lib/libart.so (art_quick_to_interpreter_bridge+34) #37 pc 000000000336d525 /system/framework/arm/boot.oat
内容的提问来源于stack exchange,提问作者Rumour

