👓
quest3のtombstoneを確認する方法
はじめに
questとandroid初心者すぎて、quest3アプリがクラッシュしたときにどうやって解析すれば良いか分からなかったため備忘録的に残します。もしもっと良い方法をご存知の方いらっしゃいましたらコメント頂けましたら幸いです!!
やり方
環境
- meta quest3
- windows11
- unity 2019.4.33f1, コンパイラ:Mono(古いが、新しいverでもやり方は変わらないはず。il2cppコンパイラを使用する場合はsymbolなど使うのでちょっとやり方変わる?)
事前準備、必要ソフトの導入
- pcにadbを導入する(meta quest developer hubが入っていれば、hubのインストール先ディレクトリのbinの中にadbも入ってる)。
もうadbを導入済であれば不要meta quest developer hubの導入は不要です。
https://developers.meta.com/horizon/documentation/unity/ts-odh-getting-started#install-meta-quest-developer-hub
adb経由でのtombstoneの取得方法
- 以下コマンドを打つ。
$adb bugreport <自分のpcの好きなディレクトリ¥好きなファイル名>
- (winの場合)自分のpcの好きなディレクトリ¥好きなファイル名.zipができているので、この中に"どこでクラッシュしたのか、どんなエラーが出ているか"の情報が格納されている
- bugreport-xxx.txtというファイルにタイムスタンプとどんなエラーが出たか確認できる(以下みたいな感じ)。具体的にどこのスクリプトでエラーが出たかはbacktraceに書いてある。
特にクラッシュした箇所はFATALと書いてあるので、これを目印にすると良い。(以下例ではF DEBUG
になっていますが、DEBUGではなくFATALと書かれている箇所を探すと見つけやすいです)- bugreport例:android公式ページよりお借りしました
03-02 23:53:49.477 17951 17951 F DEBUG : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
03-02 23:53:49.477 17951 17951 F DEBUG : Build fingerprint: 'Android/aosp_angler/angler:7.1.1/NYC/enh12211018:eng/test-keys'
03-02 23:53:49.477 17951 17951 F DEBUG : Revision: '0'
03-02 23:53:49.477 17951 17951 F DEBUG : ABI: 'arm'
03-02 23:53:49.478 17951 17951 F DEBUG : pid: 17946, tid: 17949, name: crasher >>> crasher <<<
03-02 23:53:49.478 17951 17951 F DEBUG : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xc
03-02 23:53:49.478 17951 17951 F DEBUG : r0 0000000c r1 00000000 r2 00000000 r3 00000000
03-02 23:53:49.478 17951 17951 F DEBUG : r4 00000000 r5 0000000c r6 eccdd920 r7 00000078
03-02 23:53:49.478 17951 17951 F DEBUG : r8 0000461a r9 ffc78c19 sl ab209441 fp fffff924
03-02 23:53:49.478 17951 17951 F DEBUG : ip ed01b834 sp eccdd800 lr ecfa9a1f pc ecfd693e cpsr 600e0030
03-02 23:53:49.491 17951 17951 F DEBUG :
03-02 23:53:49.491 17951 17951 F DEBUG : backtrace:
03-02 23:53:49.492 17951 17951 F DEBUG : #00 pc 0004793e /system/lib/libc.so (pthread_mutex_lock+1)
03-02 23:53:49.492 17951 17951 F DEBUG : #01 pc 0001aa1b /system/lib/libc.so (readdir+10)
03-02 23:53:49.492 17951 17951 F DEBUG : #02 pc 00001b91 /system/xbin/crasher (readdir_null+20)
03-02 23:53:49.492 17951 17951 F DEBUG : #03 pc 0000184b /system/xbin/crasher (do_action+978)
03-02 23:53:49.492 17951 17951 F DEBUG : #04 pc 00001459 /system/xbin/crasher (thread_callback+24)
03-02 23:53:49.492 17951 17951 F DEBUG : #05 pc 00047317 /system/lib/libc.so (_ZL15__pthread_startPv+22)
03-02 23:53:49.492 17951 17951 F DEBUG : #06 pc 0001a7e5 /system/lib/libc.so (__start_thread+34)
03-02 23:53:49.492 17951 17951 F DEBUG : Tombstone written to: /data/tombstones/tombstone_06
- もしbacktraceとmanaged backtraceの2つがある場合、managed backtraceにunityコードのクラッシュポイントが記載されているので、managed backtraceを見ると良い。backtraceはmanaged backtraceのunityコードが呼び出しているため、深入りする場合はこちらも覗いてみる。
もしクラッシュが再現できる場合
- もしクラッシュが再現できる場合のリアルタイム分析方法
- quest3のみをpcに接続し、コマンドプロンプト/shellから
adb devices
でquest3のデバイス番号が表示されることを確認する。 - コマンドプロンプト/shellで
adb logcat CRASH:E *:S
を実行すると、CRASH以上のログレベルのみ表示されるようになる。これでクラッシュした瞬間にどんなエラーが出たか確認できる。 - 確認後、
adb bugreport <自分のpcの好きなディレクトリ>
でクラッシュレポートを自分のpcに取り寄せて分析できる。コマンドプロンプト/shellで確認できたエラーは、bugreport-xxx.txtにて同じ内容が確認できる。
- quest3のみをpcに接続し、コマンドプロンプト/shellから
参考にさせていただいたサイト
下記サイトを参考にさせていただきました、非常にわかりやすかったので、adb logcat CRASH:E *:S
あたりの解説を知りたい方などおすすめです。
Discussion