文書の過去の版を表示しています。
エラーのお話
オダメで出力されるエラーについてのお話。
エラーを見れるようになる必要はないですがエラーに含まれている情報でどこが重要なのかを知れば、他者に聞くときに渡すべき情報がどれかのの判断の一助になるかもしれません。
コンソール(黒いあの画面)に出力されるエラー
まず大きく2種類のパターンがあります。
- 個々の処理がエラーを捕まえて自分でエラーメッセージを出しているもの。
- 個々のエラー処理が例外を捕まえておらず、システム1)が出しているもの。
前者の「個々の処理がエラーを捕まえて自分でエラーメッセージを出している」のほうは、どういった動作をするかはその「個々の処理」次第であるため非常に有意義な情報を出してくれる場合もあれば、まったくなにも出さなかったり誤った情報を出す場合などもあります。
後者のシステムが出すものは、決まった内容を出してきます。
個々の処理が出しているエラー
役に立つ情報を出している場合もあれば、そもそも何が出しているのかわからないものもあります。
システム(Unityの例外処理機構)が出しているエラー
こちらは決まったパターンで出力されます。
エラー(例外)の種類
何がまずかったのかを表しているためヒントになることが多いですが、よくある例外だと「まぁそうだろうね」ぐらいでしかない場合も。
よくある例外
- NullReferenceException
いわゆる「ぬるぽ」本来あるべきもの、本来取得できるものなどがない状態でそれを操作した場合など。
ほとんどの場合、操作することが問題ではなくあるべきものがない、取得できるはずのものが取得できてないないことが問題。
直前にファイルが読めてないとか出ている場合はおそらくそれが原因。
- FileNotFoundException
そのまんまファイルが見つからない場合に発生する。ただしデータファイルに限らずDLLなどがない場合もこれになる場合があるので要注意。
- MissingFieldException
本来あるはずのものがない場合。
非常によくあるのが“TBody.goSlot”がないといわれるもの、COM3D2とCOM3D2.5でこの部分の扱いが変わっており、COM3D2用のプラグインをCOM3D2.5に入れたりすると発生する。
- TypeLoadException
これもあるはずのものがない場合に出力されます。
これも同じで“Slot”がないよ!って言われるのはCOM3D2.5用プラグインをCOM3D2に入れた場合など。
エラーが発災した場所とその経路
スタックトレースと呼ばれる処理が呼び出された順序。
どういった流れでどこの処理で発生したかわかるためかなりのヒントになります。
「場所:なんたら」とか「Stack trace:なんたら」からの複数行に渡る呼び出しリスト。
コメント