クラッシュ、エラーの原因をログから調べる方法

クラッシュ、エラーの原因をログから調べる方法

こんばんは、がともです。Cities: Skylinesをアセット、MODもりもりでプレイしていると、エラーが発生したり最悪の場合はクラッシュすることがあります。そのような場合、直近でサブスクライブしたアセット・MODを疑うことが定石ですが、闇雲に原因を探すことはなかなか骨の折れる作業です。今回は、このようなシーンで原因究明の近道となる、ログ解析の手法を簡単にまとめたいと思います。

ログ解析というと専門的な知識がないと難しいと思われるかもしれませんが、有志が情報をまとめてくれているのでそこまで難解ではありません。ご自身で迅速に解決するためにも最低限のログ解読スキルを身に着けてみましょう。

なお、本記事はすべてを網羅するものではありません。英語ですが綺麗にまとまったガイドがあるため、英語を読める方にはそちらをオススメします。
Cities Skylines Troubleshooting FAQ
Log files (output_log.txt or Player.log)

また、ロード時のエラーを調べる際は、解説記事を公開していますのでそちらもぜひご覧ください。
【MOD使い方紹介】LOADING SCREEN MODのすゝめ

ログ解析が有効なシチュエーション

ゲームがクラッシュする場合や、画面にエラーダイアログが表示される場合はログ解析が有効になることが多いです。MODによってはエラーが発生してもログに出力しないものもあるため万能ではありませんが、ログを確認することに越したことありません。

ログを開く

ログは以下の場所に保存されています。

<SteamFolder>\SteamApps\common\Cities_Skylines\Cities_Data\output_log.txt

SteamFolderはSteamをインストールしたフォルダです。設定した覚えがない場合は、以下の場所にある可能性が高いです。

C:\Program Files (x86)\Steam\steamapps\common\Cities_Skylines\Cities_Data\output_log.txt

クラッシュした場合は、ログ保存のために別の場所にコピーされるようです。上記で見当たらない場合は、以下のフォルダを探してみてください。

<SteamFolder>\SteamApps\common\Cities_Skylines\<CrashedDateTime>\output_log.txt

ログファイルを見つけたら、メモ帳でもなんでも良いので開いてみましょう。

エラーの原因を探る

ログを開くとそこには呪文のような文字列がたくさん並んでいます。それらはゲームやMODが必要であろうと判断した情報たちです。一見、何の価値もなさそうに見えるデータでも、見る人が見れば重要な情報になります。

今回、探しているのはエラーの原因ですので、エラーに関係する情報を検索しましょう。ほとんどのテキストエディタの場合、以下のキーを押すとファイル内検索ができます。

Ctrl + F

検索の準備ができたら以下のキーワードで引っかかるものがないか探してみましょう。

  • Crash
  • Exception
  • Error
Crashが見つかった場合

ログファイルの末尾に以下のような形でCrashが出力されている場合、クラッシュ原因のヒントを確認することができます。

========== OUTPUTING STACK TRACE ==================

~中略~

0x00007FF7E2136ADF (Cities) 
0x00000000097DD0AB (Mono JIT Code) (wrapper managed-to-native) UnityEngine.GameObject:Internal_AddComponentWithType (System.Type)
0x00000000097DCFF5 (Mono JIT Code) UnityEngine.GameObject:AddComponent (System.Type)
0x00000000097DCF21 (Mono JIT Code) UnityEngine.GameObject:AddComponent<object> ()
0x000000004688FAE4 (Mono JIT Code) ColossalFramework.UI.UIComponent:AddUIComponent<object> ()
0x000000004CB99158 (Mono JIT Code) ImprovedPublicTransport2.DropDownRow:Start ()
0x000000004CB98ED5 (Mono JIT Code) ImprovedPublicTransport2.DropDownRow:get_Text ()
0x0000000036ECB1BE (Mono JIT Code) ImprovedPublicTransport2.DropDown:FpsBoosterUpdate ()

~中略~

========== END OF STACKTRACE ===========
**** Crash! ****

上記の場合、 ImprovedPublicTransport2 というMOD名が見受けられるため、このMODに絡む何かでエラーが発生していそうです。DropDownRowとあるので、ドロップダウンの表示に関わる処理でしょうか。この場合、以下のような手段をとれます。

  • 壊れているMOD一覧に上記のMODが含まれていないかを確認する
    https://docs.google.com/spreadsheets/d/1mVFkj_7ij4FLzKs2QJaONNmb9Z-SRqUeG6xFGqEX1ew/edit#gid=0
    →推奨MODへの切り替えを実施してください
  • 当該MODにアップデートがないかチェックする
    →アップデートしてください
  • MODのページの説明文、コメントに対処方法が書かれていないかチェックする
    GitHubなどがある場合はそちらもチェック
  • これといった解決策が見つからない場合
    →当該MODをアンサブスクライブする または 作者に問い合わせる

なお、ログに出力される情報はあくまでヒントです。MODの競合により、ログに表示されているMODが根本原因ではなく、別のMODのあおりを受けただけという可能性もあります。犯人を決めつけず、しっかりと情報を収集しましょう。

なお、例で表示したログは自作MODを試作しているときに発生したものでしたので、私の自作MODがIPT2に影響してしまった可能性があります。

Exception / Error が見つかった場合

Exceptionとは、プログラム的なエラーと思ってもらえればよいです。以下のように出力されることがあります。

System.IO.IOException: Loading custom asset failed [1205312481.Asymmetrical Three Lane Road Slope0]

System.IO.IOExceptionはデータの読書や入出力に関する際に発生するエラーです。さらに後続の文字を読みとくと「1205312481.Asymmetrical Three Lane Road Slope0」のロードに失敗していることがわかります。ということは、このアセットのデータがPCに無いためエラーになっていると推測することができます。

このExceptionがどのような場合に発生するのか、C#のプログラミングに馴染みのない方にとっては難しいと思います。しかし、ご安心ください。冒頭でも紹介した英語のログファイル解析ガイドでは様々なパターンに対応していて、ここまでログを読めていれば検索でおおよその当たりを付けられるようになります。

例えば、今回のエラーではExceptionの後ろの「Loading custom asset failed」という文言に着目します。先ほどのガイドで「Loading custom asset failed」を検索すると以下の情報が引っかかりました。

今回の場合は、Exceptionの型と文言がドンピシャのものはありませんでしたが、類似の情報として対応は参考になります。今回は「これが何を意味するのかわからないけど、アンサブスクライブすることを提案します」と対処方法が書いてあります。

なお、検索は後ろの文言で検索してもいいですし、Exception名で検索してもよいです。

また、ExceptionやErrorログはその発生源となったMOD情報を併記していることが多いです。MOD名がわかれば、あとはCrashの場合と同じように調査することで効率的に調査できます。

エラーログをゲーム内で確認する方法

ここまで、エラーログの場所とその読み解き方を説明してきましたが、わざわざlogファイルを開くのは面倒ですよね。そのような方向けに、なるべくゲーム内でエラーを確認できるようにしてくれるMODがあります。エラー発生時に、わかる範囲でMOD名、アセット名、エラー詳細を表示してくれるようです。現在はβ版とのことなので、このMOD自体に不具合がある可能性もありますが、使ってみて損はないと思います。
Extended Error Reporting

非互換MODの確認

非互換MODを確認するためのMODが提供されています。こちらを利用することで、あらかじめ非互換MODの洗い出しをできるため、心配な場合はご利用ください。ただし、しばらくMOD更新がされていないようですので、情報が古い可能性があります。
Mod Compatibility Checker

おわりに

ログ解析、いかがでしたか?少しは解析できそうでしょうか?

同じCities: Skylinesというタイトルを遊んでいても、導入しているMOD、アセットはプレイヤーによって全然違います。そのため、とある人の環境がおかしくなっても、他の人の環境では再現しないなんてザラにあります。いわゆるおま環というやつです。そのため、MOD、アセットの導入は自己責任であり、自己解決が基本です

この記事で調査、そして自己解決できる人が増え、皆様が楽しいCities: Skylinesライフを送れることを願って締めといたします。

本記事執筆に際し、shg166氏、てい氏より追加情報等のご助言を頂戴しました。末筆ながら感謝申し上げます。