Table of Contents

Android에서 crash 분석

Native(Android) 및 Unity(Android)에서의 crash는 다음 설명을 참고하십시오.

development 중 crash 위치 얻기

Android Studio에서 Android Native 프로그램을 디버깅할 때는 Configuration 설정에서 Debugger - Debug type을 Dual (Java + Native)로 변경해야 합니다.

crash Android configuratio

Android Studio에서 디버깅할 때 필요한 정보는 아래 그림과 같습니다.

crash Android stack

lldb에서 bt를 입력하면 crash 원인과 code stack을 얻을 수 있습니다. 아래와 같습니다.

(lldb) bt
* thread #16, name = 'samples.helloar', stop reason = signal SIGSEGV: invalid address (fault address: 0x9c40)
* frame #0: 0x0000004922f3a1d8 libEasyAR.so`___lldb_unnamed_symbol3056$$libEasyAR.so + 6088
    frame #1: 0x0000004922f38568 libEasyAR.so`___lldb_unnamed_symbol3054$$libEasyAR.so + 288
    frame #2: 0x0000004922f347f8 libEasyAR.so`___lldb_unnamed_symbol2876$$libEasyAR.so + 332
    frame #3: 0x00000049be2390c8 libc.so`__pthread_start(void*) + 40
    frame #4: 0x00000049be1f04f8 libc.so`__start_thread + 72

code stack에 libEasyAR.so 관련 내용이 있으면 crash가 EasyAR와 관련되었을 가능성이 있습니다. 없으면 crash가 EasyAR와 관련 없을 가능성이 큽니다.

lldb에서 image dump sections libEasyAR.so를 입력하면 dynamic library의 .text section load address를 얻을 수 있습니다. 아래와 같습니다.

(lldb) image dump sections libEasyAR.so
...
  SectID     Type             Load Address                             Perm File Off.  File Size  Flags      Section Name
...
  0x00000010 code             [0x0000004922e30cfc-0x0000004923654558)  r-x  0x00256cfc 0x0082385c 0x00000006 libEasyAR.so..text
...

release 후 crash 위치 얻기

release 후에도 crash가 발생할 수 있습니다.

재현 가능한 crash가 발생하면 Android Studio에 내장된 Profile/Debug 도구를 사용해 볼 수 있습니다. 그런 다음 development 중 방법에 따라 crash 위치를 얻으면 됩니다.

crash Android debug

재현하기 어려운 crash가 발생하면 crash reporting library를 사용하여 애플리케이션 crash 정보를 가로채고 서버로 보고할 수 있습니다. 다만 crash 정보에는 반드시 code stack과 module load address 두 부분의 정보가 포함되어야 합니다. Android는 4.0부터 ASLR(address space layout randomization)을 도입했기 때문에 dynamic library module load address는 실행할 때마다 다를 수 있고, 이로 인해 code address도 동적으로 변합니다. code stack의 code address와 dynamic library module load address의 상대 값을 알아야 프로그램이 어디에서 crash했는지 알 수 있습니다.

code stack에 libEasyAR.so 관련 내용이 있으면 crash가 EasyAR와 관련되었을 가능성이 있습니다. 없으면 crash가 EasyAR와 관련 없을 가능성이 큽니다.

기타 crash 관련 정보

  • EasyAR Sense 및 EasyAR Sense Unity Plugin의 버전 번호

    예: 4.7.0.11800-cf8e24e30

  • Community Edition / Enterprise Edition

  • CPU architecture

    aarch64/armeabi-v7a