Table of Contents

Android での crash 解析

Native (Android) と Unity (Android) での crash については、次の説明を参照してください。

開発中に 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 セクションの 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
...

リリース後に crash 位置を取得する

リリース後にも crash が発生する可能性があります。

再現可能な crash が発生した場合は、Android Studio に組み込まれている Profile/Debug ツールを使用してみてください。その後、開発中の方法に従って crash 位置を取得できます。

crash Android debug

再現が難しい crash の場合は、crash reporting library を使用してアプリケーションの crash 情報を取得し、サーバーへ報告できます。ただし、crash 情報には必ず code stack と module load address の 2 つの情報が含まれている必要があります。Android は 4.0 から ASLR (address space layout randomization) を導入しているため、dynamic library モジュールの load address は実行ごとに異なる可能性があり、code address も動的に変化します。code stack 内の code address と dynamic library モジュールの 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