クラッシュ
Suggest a change
Success!
Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.
Close
Sumbission failed
For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.
Close
クラッシュ時のチェックリスト
- コード ストリッピングを無効化(また iOS では “slow with exceptions” をセット)
- iOS プレイヤーのビルドに関するビルド サイズ最適化の手順に従い (http://docs.unity3d.com/Documentation/Manual/iphone-playerSizeOptimization.html) ,iOS のストリッピングによりクラッシュさせない
- メモリ不足が原因でないことを確認(デバイスを再起動,そのプラットフォームで最大量のRAMを使用するようにして,ログを観察)
Editor.log - エディター上の場合
デバッグ メッセージ,警告,およびエラーは全てコンソールに出力されます。またUnityはステータスレポート,すなわちアセットのロード,Mono 初期化,グラフィックス ドライバ情報など,をコンソールに出力します。
何が起きているかを理解したい場合は editor.log を確認することです。ここではコンソールによる部分的な情報ではなく,全体像をつかむことが出来ます。何が起きているかを理解し,またコーディング セッションの完全なログを観察できます。何によって Unity がクラッシュしたのか,アセットにどういう問題があったのか追跡することができます。
Unityはデバイス上にもいくつかの情報を出力します。 Android では logcat コンソール,iOS では Xcode gdb コンソールに出力します。
Android でデバッグ
-
DDMS または ADB’’ ツールを使用
- スタックトレースを観察(Android 3 以上)。_c++filt_ (ndk の一部) または別の方法,すなわち: http://slush.warosu.org/c++filtjs ,のいずれかを使用して,マネージド 関数コールをデコード
- クラッシュが発生した .so ファイルをチェック:
-
libunity.so - the crash is in the Unity code or the user code
-
libdvm.so - the crash is in the Java world, somewhere with Dalvik. So find Dalvik’s stacktrace, look at your JNI code or anything Java-related (including your possible changes to the AndroidManifest.xml).
-
libmono.so - either a Mono bug or you’re doing something Mono strongly dislikes
- もしクラッシュ ログで分からない場合,逆アセンブルして何が起きたか大体分かるようにする
- use ARM EABI tools from the Android NDK like this: objdump.exe -S libmono.so >> out.txt
- Look at the code around pc from the stacktrace.
- try to match that code within the fresh out.txt file.
- Scroll up to understand what is happening in the function it occurs in.
iOS でデバッグ
Xcode はビルトインのツールがある。 Xcode 4 はクラッシュのデバッグに優れたツールがあり,Xcode 3 はやや少ない
完全な gdb スタック - 全てのバックトレース
soft-null-check を有効化:
Development ビルドおよび Script Debugging を有効化します。これで catch できなかった null ref 例外が Xcode コンソールに,適切なマネージド コールスタック とともに,出力されます。
“fast script call” および コード ストリッピング を無効化。ランダムなクラッシュ,すなわち稀な .Net 関数または reflectionによるも,を防止するかもしれない
考え方
- どのスクリプトでクラッシュが起きたかを見つけて,デバイス上で Mono Develop を使用してデバッグ
- もしクラッシュの原因が コード でない場合,スタック トレース をより詳細に観察して何が起きたかのヒントを得る。コピーをとったうえでクラッシュレポートを提出して,解析を依頼