致命信号11(SIGSEGV)位于0xdeadd00d(代码= 1),线程15725(编译器)

时间:2017-12-20 11:05:36

标签: android

我在没有使用NDK的情况下编写了应用程序,它可能会随机操作崩溃并出现以下错误:

12-20 14:21:13.590 15718-15725 A/jazz: mediatek/protect/dalvik/vm/jazz/dexlang/dex_lang-inl.h:2415] void jazz::DexLang<BitcodeGenerator>::EmitInstruction(const jazz::AIR&) [with BitcodeGenerator = jazz::dixieland::BitcodeGenerator] unimplemented not
12-20 14:21:13.590 15718-15725 E/dalvikvm: VM aborting
12-20 14:21:13.590 15718-15725 A/libc: Fatal signal 11 (SIGSEGV) at 0xdeadd00d (code=1), thread 15725 (Compiler)
12-20 14:21:13.591 15718-15725 A/libc: Send stop signal to pid:15718 in debugger_signal_handler

我在不同的模拟器和设备上运行应用程序,但在我的设备上它经常崩溃。

设备:

PHONE_MODEL=JY-G4S
ANDROID_VERSION=4.2.2
BUILD=TIME=1402319802000
FINGERPRINT=JIAYU/S8/S8:4.2.2/JDQ39/1402319714:user/test-keys
HARDWARE=mt6592
USER=scm
HOST=vanzo68
DEVICE=S8
TAGS=test-keys
MODEL=JY-G4S
BOOTLOADER=unknown
VERSION.CODENAME=REL
VERSION.INCREMENTAL=eng.scm.1402319714
VERSION.RELEASE=4.2.2
VERSION.SDK_INT=17
VERSION.RESOURCES_SDK_INT=17
VERSION.SDK=17
CPU_ABI=armeabi-v7a
CPU_ABI2=armeabi
MANUFACTURER=JYT
BRAND=JIAYU
TYPE=user
PRODUCT=S8

我是否可以在不刷新设备的情况下以编程方式修复此错误?

3 个答案:

答案 0 :(得分:2)

我发现有一件事是使用下一代(D8)dex编译器可能会导致此问题。根据我的经验,似乎在./gradle/gradle.properties文件中添加属性android.enableD8=true可能会在某些棒棒糖前设备上导致此问题。

再次删除后,它们开始处理我们之前看到崩溃的麻烦设备。

答案 1 :(得分:0)

看起来定制mediatek Dalvik JIT没有实现dex&#34;不是&#34;指令。 D8生成此指令,DX很可能没有。我们将通过永远不会生成&#34;而不是&#34;来解决VM错误。在针对Dalvik虚拟机时D8中的指令。

我们正在推出针对Android Studio 3.1的修复程序,以便在Android Studio 3.1稳定后这不会成为问题。

修复此处:https://r8-review.googlesource.com/c/r8/+/16880

答案 2 :(得分:0)

TL; DR不要将D8与Android Gradle Build Plugin 3.0.x一起使用。

我在我们的应用程序中捕获了联想P70-A上的这个JIT编译器崩溃。在我们的例子中,错误是:

F/jazz    (11964): mediatek/protect/dalvik/vm/jazz/dexlang/dex_lang-inl.h:2523] void jazz::DexLang<BitcodeGenerator>::EmitInstruction(const jazz::AIR&) [with BitcodeGenerator = jazz::dixieland::BitcodeGenerator] unimplemented not
E/dalvikvm(11964): VM aborting
F/libc    (11964): Fatal signal 6 (SIGABRT) at 0x00002ebc (code=-6), thread 11970 (Compiler)

然后是崩溃转储:

I/DEBUG   (12113): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG   (12113): Build fingerprint: 'Lenovo/P70-A/P70-A:4.4.4/KOT49H/P70-A_S142_161230_16G_ROW:user/release-keys'
I/DEBUG   (12113): pid: 11964, tid: 11970, name: Compiler  >>> com.myapp <<<
I/DEBUG   (12113): signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
I/DEBUG   (12113):     r0 00000000  r1 00002ec2  r2 00000006  r3 00000000
I/DEBUG   (12113):     r4 00000006  r5 00000000  r6 00002ec2  r7 0000010c
I/DEBUG   (12113):     r8 85d1ea6d  r9 40159bd4  sl 76dd58ac  fp 8283af64
I/DEBUG   (12113):     ip fffd1aa8  sp 76dd5630  lr 40109431  pc 40117dec  cpsr 000f0010
I/DEBUG   (12113):
I/DEBUG   (12113): backtrace:
I/DEBUG   (12113):     #00  pc 00025dec  /system/lib/libc.so (tgkill+12)
I/DEBUG   (12113):     #01  pc 0001742d  /system/lib/libc.so (pthread_kill+64)
I/DEBUG   (12113):     #02  pc 00017625  /system/lib/libc.so (raise+10)
I/DEBUG   (12113):     #03  pc 0001633b  /system/lib/libc.so
I/DEBUG   (12113):     #04  pc 0002569c  /system/lib/libc.so (abort+4)
I/DEBUG   (12113):     #05  pc 0008a8fd  /system/lib/libdvm.so (dvmAbort+80)
I/DEBUG   (12113):     #06  pc 0015a1e9  /system/lib/libdvm.so (jazz::LogMessage::~LogMessage()+576)
I/DEBUG   (12113):     #07  pc 0014f49d  /system/lib/libdvm.so (jazz::DexLang<jazz::dixieland::BitcodeGenerator>::EmitInstruction(jazz::AIR const&)+1016)
I/DEBUG   (12113):     #08  pc 0014f60b  /system/lib/libdvm.so (jazz::dixieland::Frontend::Compile(unsigned int, jazz::AIRMethod const&)+346)
I/DEBUG   (12113):     #09  pc 00153925  /system/lib/libdvm.so (jazz::dixieland::SubCompiler::Compile(unsigned int, jazz::AIRMethod const&)+32)
I/DEBUG   (12113):     #10  pc 00154443  /system/lib/libdvm.so (jazz::Jazz::Compile(jazz::CompilationUnit&)+126)
I/DEBUG   (12113):     #11  pc 00140d4d  /system/lib/libdvm.so (jazz::Compiler::JitMethod(Method const&, jazz::jex::CompiledRawCode const*&, jazz::jex::CompiledRawCode const*&)+164)
I/DEBUG   (12113):     #12  pc 0011873d  /system/lib/libdvm.so (jazzDoJITCompile(JitJazzMethodDescription const&, JitTranslationInfo&)+128)
I/DEBUG   (12113):     #13  pc 000f204f  /system/lib/libdvm.so (dvmCompilerDoWork(CompilerWorkOrder*)+50)
I/DEBUG   (12113):     #14  pc 000d9f77  /system/lib/libdvm.so
I/DEBUG   (12113):     #15  pc 000a0485  /system/lib/libdvm.so
I/DEBUG   (12113):     #16  pc 0000d838  /system/lib/libc.so (__thread_entry+72)
I/DEBUG   (12113):
I/DEBUG   (12113): stack:
...

正如其他答案中所提到的,它是由D8实现引起的,它在Dalvik二进制代码中使用not指令,但此设备上的JIT编译器不支持该指令。解决方案是通过从android.enableD8=true删除gradle.properties来为AGP 3.0.x禁用编译中的D8。稳定的AGP 3.1将包含fix for this

编辑:可能这种情况发生在运行KitKat的Mediatek SOC设备上。