Unityのフリーズの原因の見つけ方についてです。
Unity上で開発を行っているのですが、
1日ぐらいゲームを動かすと、フリーズが発生します。
簡単なプログラムなので、Unityのsceneの遷移や
データの読み込みや開放は行っておりません。
ただ、UnityのUNETを使ったネットワーク通信は行っております。
(Unity 2017 4.21f1 64bitを使用)
ということで、比較的シンプルな構成のつくりなのですが、
1日ぐらい動かし続けるとフリーズが発生します。
メモリリークは、起きていなさそうでした。
Unity上でフリーズが発生した場合の調査方法について
調べていたのですが、今のところ、以下の2つが見つかりました。
1、PanicButtonというアセットを使用する
2、以下のサイトの方法を使う。
https://blogs.unity3d.com/jp/2016/05/24/breakout-how-to-stop-an-infinite-loop-in-a-unity-c-script/
1は、早速アセットを購入してインストールしてみたのですが、
動かそうとすると、Unityが落ちてしまい、上手く使えませんでした。
2は、実験的に、簡単な無限ループを作成して試してみたところ
無事、無限ループが発生しているスクリプトを特定できました。
しかし、問題が出ているゲームプログラムで試したところ
処理が比較的複雑なせいか、今のところ上記サイトのように
上手くはいっておりません。
細かい説明をしますと、フリーズが起きてVisualStudio2017で、
Unity.exeにデバッガをアタッチして、アセンブリコードを見て
ループの状況を見ていたのですが、レジスタr11を使ったcmpがなくて
r12のものはあったので、そこでr12の中の値を0にして、メモリ
リードエラーを発生させたのですが、上記のサイトが紹介するように
ならずに(Unityへ処理が戻らずにずっとフリーズの状態のまま)
原因が発生しているスクリプトを特定することは出来ませんでした。
ということで、Unity上でフリーズの問題が発生したときに、
原因を特定する良い方法がありましたら、ご教示頂けると助かります。
お手数をおかけいたしますがどうぞよろしくお願い致します。
あなたの回答
tips
プレビュー