2017-02-23 5 views
0

Google에서 주로 작성한 Android 앱은 이미지 처리를 위해 OpenCV 라이브러리를 기반으로하는 작은 기본 모듈을 사용합니다.Android 4.4 앱 코드와 눈에 띄는 관계가없는 원시 코드 크래시

이 모듈은 JNI에 의해 호출되며 해당 메서드의 모든 코드는 예외를 catch해야하는 try-catch 블록 안에 있습니다.

거의 1000 명당 1 회 정도의 사용자가 우리에게 매우 혼란스러운 원시 충돌을 당하지 않습니다. 우리는 그 충돌을 복제 할 수 없습니다. Android 4.4.2 또는 4.4.4에 항상 있지만 재현하기는 거의 없습니다. 우리 코드와 관련이없는 것 같습니다. backtrace에있을 수있는 내용을 제안하는 .so 파일이 없습니다. 충돌이 발생했을 때 단서가 없습니다. 사용자가 충돌에 대한 유용한 설명을 게시하지 않습니다.

어떻게 그런 디버깅을 시작할 수 있습니까? 그 원인을 알아낼 수 있습니까?

일반적인 충돌 보고서 :

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
Build fingerprint: 'samsung/s3ve3gxx/s3ve3g:4.4.2/KOT49H/I9301IXXSAPG5:user/release-keys' 
Revision: '4' 
pid: 11950, tid: 11950 
signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr -------- 
    r0 00000000 r1 00002eae r2 00000006 r3 00000000 
    r4 00000006 r5 00000002 r6 00002eae r7 0000010c 
    r8 a080001d r9 6d596a34 sl 415ef4d8 fp beca92d4 
    ip 4163fb21 sp beca8ff8 lr 40064205 pc 40073164 cpsr 000f0010 
    d0 0000000000000000 d1 0000000000000000 
    d2 0000000000000000 d3 0000000000000000 
    d4 4391240843912408 d5 4391240843912408 
    d6 4391240843912408 d7 4391240843912408 
    d8 0000000000000000 d9 000005003f000000 
    d10 3f00000000000038 d11 4044000000000000 
    d12 4044000000000000 d13 0000000000000029 
    d14 0000000000000000 d15 0000000000000000 
    d16 2065766974614e28 d17 0a29646f6874654d 
    d18 4391240843912408 d19 4391240843912408 
    d20 4391240843912408 d21 4391240843912408 
    d22 4391240843912408 d23 4391240843912408 
    d24 004e004d004c004b d25 0050004f004d004e 
    d26 0000000000000000 d27 0000000000000000 
    d28 001e001d001c001b d29 0020001f001d001e 
    d30 0050005000500050 d31 0000000000000000 
    scr 88000013 

backtrace: 
    #00 pc 00022164 /system/lib/libc.so (tgkill+12) 
    #01 pc 00013201 /system/lib/libc.so (pthread_kill+48) 
    #02 pc 00013415 /system/lib/libc.so (raise+10) 
    #03 pc 000120e3 /system/lib/libc.so 
    #04 pc 00021a18 /system/lib/libc.so (abort+4) 
    #05 pc 000494ff /system/lib/libdvm.so (dvmAbort+78) 
    #06 pc 0004ccfd /system/lib/libdvm.so 
    #07 pc 0004eb3b /system/lib/libdvm.so 
    #08 pc 0006ab23 /system/lib/libandroid_runtime.so 
    #09 pc 00020d0c /system/lib/libdvm.so (dvmPlatformInvoke+112) 
    #10 pc 000519af /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398) 
    #11 pc 0002a1a0 /system/lib/libdvm.so 
    #12 pc 00031650 /system/lib/libdvm.so (dvmMterpStd(Thread*)+76) 
    #13 pc 0002ece8 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184) 
    #14 pc 000640f9 /system/lib/libdvm.so (dvmInvokeMethod(Object*, Method const*, ArrayObject*, ArrayObject*, ClassObject*, bool)+392) 
    #15 pc 0006c05f /system/lib/libdvm.so 
    #16 pc 0002a1a0 /system/lib/libdvm.so 
    #17 pc 00031650 /system/lib/libdvm.so (dvmMterpStd(Thread*)+76) 
    #18 pc 0002ece8 /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184) 
    #19 pc 00063e15 /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+336) 
    #20 pc 0004d597 /system/lib/libdvm.so 
    #21 pc 000520e7 /system/lib/libandroid_runtime.so 
    #22 pc 0005367f /system/lib/libandroid_runtime.so (android::AndroidRuntime::start(char const*, char const*, bool)+358) 
    #23 pc 00001063 /system/bin/app_process 
    #24 pc 0000e503 /system/lib/libc.so (__libc_init+50) 
    #25 pc 00000d80 /system/bin/app_process 

code around pc: 
    40073144 e8bd00f0 e3700a01 912fff1e e2600000 
    40073154 ea006e48 e92d50f0 e3a07f43 ef000000 
    40073164 e8bd50f0 e3700a01 912fff1e e2600000 
    40073174 ea006e40 e92d50f0 e3a070ee ef000000 
    40073184 e8bd50f0 e3700a01 912fff1e e2600000 
    40073194 ea006e38 f200429a bf0080b9 f040f891 
    400731a4 4001e92d f2c02a04 2a1080a5 8093f2c0 
    400731b4 f2c02a20 2a408088 ea4fdb7f f1bc1c92 
    400731c4 dd6c0f0a 0600e92d 0f40f1bc f500dd4a 
    400731d4 f5016e80 ebae7920 ea4f0e09 ea4f5e4e 
    400731e4 f50e5e5e ebbc7e20 dd3b1f9e f04fbfc4 
    400731f4 ebd9090a dd35199e 0a0eeb01 0a3ff02a 
    40073204 1c9eebac bfd245e1 0c09ebac f04f46e1 
    40073214 f8910c00 f891f240 f921f280 f921028d 
    40073224 f8da428d f1b93000 f9000901 f900028d 
    40073234 f10a428d d1ee0a40 0f00f1bc f5bcd02b 

code around lr: 
    400641e4 447b4b13 42b3e010 6a1ed10e 44784811 
    400641f4 ec50f7fb e9e8f00d 46224631 efaaf00e 
    40064204 d00a3001 e00b2400 2b00681b 480ad1eb 
    40064214 44782403 ec3ef7fb f001e002 6804f9ff 
    40064224 f9fcf001 46206005 bf00bd70 0003b1d2 
    40064234 0003b1c6 0003b1be 0003b19a bf7ef7ff 
    40064244 4a3e4b3d e92d447b b08b43f0 4606589c 
    40064254 6823460d 930946a1 f9e0f001 8000f8d0 
    40064264 d0482d00 f0104628 280ff8f7 d8444604 
    40064274 ffe4f7ff d1064286 4629200f e8b2f00d 
    40064284 d03c2800 482ee02e f7fb4478 482deb82 
    40064294 e0154478 d11342b0 482b6a06 f7fb4478 
    400642a4 4a2aebfa 46332120 a801447a f96ef013 
    400642b4 a8012101 fc8cf01a 46061c42 e011d104 
    400642c4 28006800 e02cd1e6 46294630 f00d4622 
    400642d4 1c43e8ee d11e4607 f9a0f001 29046801 
+1

Android 4.4.2에서는 Android ART가 선택 사항이라고 생각합니다. 문제가있는 사용자가이 기능을 켜고이 방법으로 재생할 수 있습니까? 즉, 초기 ART 릴리스에서 버그를 건드릴 수도 있습니다. –

답변

1

이 사용자가 실행되고 있는지 안드로이드의 구현에 버그, 또는 코드/OpenCV의가 JNI를 사용하는 방법에 버그가 될 가능성이 높습니다. 동일한 하드웨어/OS 버전에

  • 테스트를 이있는 사용자로 : 그래서 사람들이 그것을 추적하는 시도에 대해 우리는 몇 가지 제안을 당신보다 적은 정보를 가지고 있지만, 여기로 디버깅하는이 힘들 것 발행물.
  • 많은 이미지/데이터가 포맷 문제이거나 크기가 인 오류로 인해 테스트됩니다.
  • ART와 같은 관련 OS 설정을 변경하여 테스트하십시오.
  • 사용자가 가로 모드와 세로 모드 사이를 전환하는 것처럼 앱에서 큰 이미지를 처리하는 것처럼 테스트 할 수 있습니다.
  • 이미지의 크기와 형식이 같은 일을 감사하기 위해 JNI 호출 주위에 도구를 추가하십시오. 이 정보를 얻는 방법을 찾으십시오.이 SO Question은 몇 가지 제안을합니다.

왜 추락했는지에 대한 정보가 없으면 재생산 할 수 없으며 재생산하지 않고도 수정할 수 없습니다.