Table of Contents

Android 上のクラッシュ分析

Native(Android) および Unity(Android) 上のクラッシュについては、以下の説明を参照してください。

Development中のクラッシュ位置取得

Android Studio で Android の Native プログラムをデバッグする場合、Configuration 設定で Debugger - Debug type を Dual (Java + Native) に変更する必要があります。

crash Android configuratio

Android Studio でのデバッグ時に必要な情報は以下の図の通りです。

crash Android stack

lldb で bt と入力すると、クラッシュ原因とコード実行スタックが取得できます。例:

(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

コード実行スタックに libEasyAR.so 関連の内容が存在する場合、クラッシュが EasyAR に関連している可能性があります。存在しない場合は、クラッシュが EasyAR に関連していない可能性が高いです。

lldb で image dump sections libEasyAR.so と入力すると、ダイナミックライブラリの .text セクションのロードアドレスが取得できます。例:

(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後のクラッシュ位置取得

リリース後にもクラッシュが発生する場合があります。

再現可能なクラッシュが発生した場合は、Android Studio に付属の Profile/Debug ツールを試すことができます。その後、Development中と同様の手順でクラッシュ位置を取得できます。

crash Android debug

再現が困難なクラッシュが発生した場合は、いくつかの crash レポートライブラリを使用して、アプリケーションのクラッシュ情報をインターセプトし、サーバーに報告できます。ただし、クラッシュ情報には必ずコード実行スタックとモジュールロードアドレスの両方の情報を含める必要があります。Android は 4.0 から ASLR(アドレス空間配置のランダム化)を導入しているため、ダイナミックライブラリモジュールのロードアドレスは実行ごとに異なる可能性があり、コードアドレスも動的に変化します。コードスタック内のコードアドレスとダイナミックライブラリモジュールのロードアドレスとの相対値がわかって初めて、プログラムがどの位置でクラッシュしたかを知ることができます。

コード実行スタックに libEasyAR.so 関連の内容が存在する場合、クラッシュが EasyAR に関連している可能性があります。存在しない場合は、クラッシュが EasyAR に関連していない可能性が高いです。

その他のクラッシュ関連情報

  • EasyAR Sense および EasyAR Sense Unity Plugin のバージョン番号

    例: 4.7.0.11800-cf8e24e30

  • コミュニティ版/エンタープライズ版

  • CPU アーキテクチャ

    aarch64/armeabi-v7a