このログにビビット来たら110番
なんかBeatSaberが死んだ
BeatSaberの突然死。怖いですよね。
UIからボタンが消えたり、画面が固まったり、ノーツの当たり判定が消えたり…
そんなときって大体Modが悪さしてるんですけどどのModが悪さしてるかなんて普通はわからない。
あぁ…、さくっと分かれば製作者にコンタクトとって不具合報告できるんだけどなあ。
そんなあなたに朗報です。
なんと、今ならログを見るだけで原因が一発でわかっちゃうのです。(わからないときもあります。)
今日はそんなログの見方を軽く説明しますよー。
ログはどこにあるの?
で、ログってどこにあるんや。
はい、インストールフォルダの「Logs」の中に入ってます。
では覗いてみましょう。
多いわ
なにやら大量のフォルダとファイルがあって何が何のことやら…。
でも大丈夫!この中で見るべきファイルはたった1つしかありません。
それは「_latest.log」!
この中にBeatSaberで起きた事柄がすべて集約されているのでこれを見れば一発なのですね!
では早速メモ帳で開いてみましょう!
はい、もう読む気失せた。
英語ばっかじゃん。1000行近くもあるじゃん。もうわかんないよ!
大丈夫!ほとんど関係ないから!
この中で1行抽出して意味を解説していきます。
[INFO @ 14:04:53 | SyncSaber] [DisplayNotification:(119)] : SyncSaber Initialized!
例えばこんな行があったとしましょう。
最初の「INFO」。これはログの種類を表します。
ログには6種類あります。
・DEBUG
・INFO
・NOTICE
・WARN
・ERROR
・CRITICAL
という感じです。
6種類あるといいましたがぶっちゃけCRITICAL以外は無視でOKです。
そう、この中で一番大事なのはCRITICAL。
ひとまずこれだけ覚えればこの記事は終わりといってもいいでしょう。
次に@の次はそのログが書き込まれた日付。
その後ろの「SyncSaber」はそのログを吐き出したModの名前。
残りの文字すべてがログ本体となります。
CRITICALにご用心
ERRORはいいの?エラーだよ?
その気持ちはすごくわかります。しかしエラーは「Mod製作者が想定しているエラー」なのでよほどのことがない限りリトライ処理や、処理されなくても不具合が起きないよう回避しているコードを書いているはずなので問題ありません。
しかし、CRITICALは違います。
[CRITICAL @ 14:04:59 | UnityEngine] DivideByZeroException: Attempted to divide by zero.
[CRITICAL @ 14:04:59 | UnityEngine] BeatSaberMarkupLanguage.Animations.AnimationLoader.GetTextureSize (BeatSaberMarkupLanguage.Animations.AnimationInfo frameInfo, System.Int32 i) (at <7f0bdc0a636a4de79465578a46eef808>:0)
[CRITICAL @ 14:04:59 | UnityEngine] BeatSaberMarkupLanguage.Animations.AnimationLoader+<ProcessAnimationInfo>d__1.MoveNext () (at <7f0bdc0a636a4de79465578a46eef808>:0)
[CRITICAL @ 14:04:59 | UnityEngine] UnityEngine.SetupCoroutine.InvokeMoveNext (System.Collections.IEnumerator enumerator, System.IntPtr returnValueAddress) (at <12e76cd50cc64cf19e759e981cb725af>:0)
[CRITICAL @ 14:04:59 | UnityEngine] UnityEngine.MonoBehaviour:StartCoroutine(IEnumerator)
[CRITICAL @ 14:04:59 | UnityEngine] BeatSaberMarkupLanguage.Animations.<>c__DisplayClass0_0:<Process>b__0(AnimationInfo)
[CRITICAL @ 14:04:59 | UnityEngine] BeatSaberMarkupLanguage.Animations.<Process>d__0:MoveNext()
[CRITICAL @ 14:04:59 | UnityEngine] UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)
次のようなログがあったとしましょう。
先ほど「日付の後はそのログを吐き出したModの名前」と書きましたが、UnityEngineなんてModはありません。
これはBeatSaberを構築しているUnityのゲームエンジンから吐き出されたログなのです。
どういうことかというと、Mod内で補足できなかったエラーがModの外に出て根幹となるUnityEngine内でエラーが起きてしまった。
ということなのです。
これがまずいのかまずくないのかというとまずいですね。
根っこの方でエラーが起きるということは他のModだけでなくゲーム本体の処理にも影響を与えてしまうからなのです。
そんなのどうでもいいですね。
今問題なのは、どのModがCRIEICALを吐いているのか?ということです。
先ほどのログを見ると2行目に
[CRITICAL @ 14:04:59 | UnityEngine] BeatSaberMarkupLanguage.Animations.AnimationLoader.GetTextureSize (BeatSaberMarkupLanguage.Animations.AnimationInfo frameInfo, System.Int32 i) (at <7f0bdc0a636a4de79465578a46eef808>:0)
と書いてあります。
ログ本体にもう答えが書いてありますね。
この場合は「BeatSaberMarkupLanguage」というModが吐いてるということが分かります。
じゃその後ろは?
さあ?
この後ろのごちゃごちゃはわからなくていいのです。
だってMod開発者が読んで修正に必要な情報だから。
最後に
というわけで、ユーザーさんが覚えておくことは1つ
CRITICALログを探せ!