UnityをAndroid実機につなげてデバッグした時のアレコレ
Unity アプリがAndroid実機でクラッシュする問題を調査した時のアレコレをメモる。
- monitorでログを見る
android 実機と MacをUSBケーブルで繋げる。
android sdk をインストールし、tools/monitor コマンドを実行すると android 実機上で吐かれたログを観れるようになる。
- android のメモリ使用状況をチェック
adb shell dumpsys meminfo
を実行すると、下記のようなメモリ使用状況確認できる。
Total RAM: 1850148 kB (status normal) Free RAM: 775573 kB (170057 cached pss + 465736 cached kernel + 139780 free) Used RAM: 1181385 kB (1049989 used pss + 131396 kernel)
- crash report から crashしたプログラムの箇所を特定する
crash report には、どのファイルのどの番地でクラッシュしたかが出力されている。
.so ファイルの場合は、objdump, greadelf コマンド等を用いて解析する。
Macでは、binutils を installして gobjdump, greadelf コマンドを使う。
(ただ、自分の場合は .so ファイルを gobjdumpしてもファイルが曖昧ですというエラーが出たため解析諦めた)
Unity 公式ドキュメントに書かれているこの方法をとればok.
http://docs.unity3d.com/ja/current/Manual/AttachingMonoDevelopDebuggerToAnAndroidDevice.html
(ただし、リモートデバッガをONにしたために解析したい場所とはまた別のところでクラッシュして困った・・・)
参考にしたページ:
hiro99ma blog: logcatに出てくるSIGSEGVからソースファイルを割り出す
KMC Staff Blog:Androidのデバッグダンプからソース上の問題発生箇所を調べる方法
docs.unity3d.com