MOD開発で大変お世話になるクラッシュエラー&デバッグ作業。
MODの導入によるプレイでも発生することがある、突然の終了。
原因を探って解決したい、軽率に報告して回答者に迷惑を掛けたくもない、
そんな方に向けたトピックです。
例外とは、主に言語がプログラムを異常と判断したときに発生する現象。
Minecraftでは、ハードウェアの故障でよく用いられる「エラー」「クラッシュ」「フリーズ」などと言われます。
ここでクラッシュを発生された場所と原因を記されたのが、クラッシュレポートです。
ランチャーを起動している時にクラッシュした場合は、ランチャーに表示します。
クラッシュレポートは自動的に保存されるので、その場所を探せばいつでも見る事ができます。
ランチャーの「Edit Profile」からProfile Editorの「Open Game Dir」を押し、対象フォルダを開きます。
crash-reportsフォルダから対象のtxtファイル、MOD基本ソフト(MinecraftForge)を使ってる場合は「ForgeModLoader-client-0.log」を開きます。
Minecraftのバージョンにもよりますが、大体はこんな感じに記述されていると思います。
※以下のエラー文のMinecraftのバージョンは1.2.5です。
- コード: 全て選択
0:18 mods loaded
1:Optifine OptiFine_1.2.5_HD_C6
2:Minecraft Forge 3.3.8.164
3:FML v2.2.106.176
4:Forge Mod Loader version 2.2.106.176 for Minecraft 1.2.5
5: mod_MinecraftForge : Available (minecraft.jar)
6: mod_IC2 : Available (industrialcraft-2-client_1.97.jar)
(長いので省略)
21: mod_TwilightForest : Available (twilightforest-1.10.0.zip)
22:
23: Minecraft has crashed!
24: ----------------------
25:
26:Minecraft has stopped running because it encountered a problem.
27:
28:
29:
30:
31:--- BEGIN ERROR REPORT e41a973e --------
32:Generated 12/10/07 14:17
33:
34:Minecraft: Minecraft 1.2.5
35:OS: Windows 7 (amd64) version 6.1
36:Java: 1.7.0_06-ea, Oracle Corporation
37:VM: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
38:LWJGL: 2.8.4
39:OpenGL: ATI Radeon HD 5700 Series version 4.2.11733 Compatibility Profile Context, ATI Technologies Inc.
40:
41:java.lang.NullPointerException
42: at xd.k(World.java:4393)
43: at xd.w(World.java:4401)
44: at xd.l(World.java:4412)
45: at xd.x(World.java:4427)
46: at ic2.common.BlockIC2Explosive.a(BlockIC2Explosive.java:64)
47: at ack.a(Chunk.java:680)
48: at xd.b(World.java:1606)
49: at xd.d(World.java:1701)
50: at vd.a(ItemBlock.java:85)
51: at aan.a(SourceFile:88)
52: at aff.a(PlayerControllerCreative.java:92)
53: at net.minecraft.client.Minecraft.c(Minecraft.java:1360)
54: at net.minecraft.client.Minecraft.k(Minecraft.java:1804)
55: at net.minecraft.client.Minecraft.x(Minecraft.java:825)
56: at net.minecraft.client.Minecraft.run(Minecraft.java:753)
57: at java.lang.Thread.run(Unknown Source)
58:--- END ERROR REPORT 36fbce1f ----------
59:
60:
61:
以上を解読すると、こんな感じになります。
0行~21行 導入MODの名前とバージョン
23行 Minecraftはクラッシュしました!
26行 プログラムの例外に遭遇したので、Minecraftは動作をやめました。
32行 エラーが発生した時間
34行 使用中のMinecraftのバージョン
35行 使用中のOS
36行 使用中のJavaのバージョン
37行 JavaVM
38行 使用中のLWJGLのバージョン
39行 使用中のOpenGLのバージョン
41行 例外の種類
42行 例外が発生したクラスとメソッド(ソース名:例外が出た行)
43~57行 例外が発生した親クラスorメソッド
23行 Minecraftはクラッシュしました!
26行 プログラムの例外に遭遇したので、Minecraftは動作をやめました。
32行 エラーが発生した時間
34行 使用中のMinecraftのバージョン
35行 使用中のOS
36行 使用中のJavaのバージョン
37行 JavaVM
38行 使用中のLWJGLのバージョン
39行 使用中のOpenGLのバージョン
41行 例外の種類
42行 例外が発生したクラスとメソッド(ソース名:例外が出た行)
43~57行 例外が発生した親クラスorメソッド
この中から読み解く為に重要な部分がいくつかあり、クラッシュした原因をある程度は理解する事ができます。
41行 例外の種類 ここにあります。
51行の「SourceFile」となってる部分は、それはどのMODも変更を加えていないファイルを意味してます。この場合、バニラファイルです。
SourceFileを発信源とするエラーが先頭にあったら、原因の特定が難しいので報告は慎重にしましょう。
java.lang.IllegalArgumentException: Slot **** is already occupied by ###### when adding ######
ブロックまたはアイテムIDの競合です。
これを原因とするエラーを報告するのは無知の極みです。このような失礼のないようにお気をつけください。
java.lang.OutOfMemoryError、java.lang.StackOverflowError、java.lang.IndexOutOfBoundsException
メモリ不足によるエラーです。
Javaに設定されたメモリ割り当て量を上げるか、必要ないアプリケーションを閉じてください。
cpw.mods.fml.common.LoaderException、java.nio.file.NoSuchFileException、java.lang.NoClassDefFoundError、java.lang.NoSuchMethodError
左から順番に MOD読み込み失敗、対象ファイル、クラスファイル、クラスメソッドが見つからない。
MODが必要とするファイルが見つからない場合に発生する可能性の高い例外です。
MODが他のMODと連携しようとして発生したり、jarMODの導入の仕方を間違えているなど、原因は多種に渡ります。
前提MODである可能性が高いので、トピックを読んでください。
MinecraftForgeのバージョンによっても発生する事があるので、
MODがどのバージョンのMinecraftForgeに対応しているか確認して、更新またはダウングレードする場合があります。
org.lwjgl.LWJGLException: Pixel format not accelerated
GPU内臓CPU、チップセット、グラフィックカード、グラフィックドライバ、ディスプレイドライバ
のいずれかのバージョンが古い可能性が高いです。
PCについて詳しくない場合、PCを買い換えるとよいでしょう。
java.lang.StackOverflowError
メモリスタックのサイズが足りていない。
java.lang.NullPointerException、java.lang.NumberFormatException、java.lang.ArithmeticException、java.lang.ArrayIndexOutOfBoundsException、java.lang.NegativeArraySizeException
多くの場合、MODの不具合によって発生した例外です。
複数のMODとの相性の問題(競合)によって発生する場合もあります。
基本的にこの問題を解決する事自体が困難なため、MOD開発者へ報告するといいでしょう。
この報告はフォーラムでもたびたび見かけるため、MODを最新版にすると解決する可能性があります。
java.lang.ClassCastException
変換できないクラスへキャストしようとした。
複数のMODとの相性の問題(競合)によって発生する場合がよくあります。
java.lang.ClassFormatError
クラスが壊れている、またはフォーマットが読み込めない。
使用してるJavaのバージョンが古すぎるかもしれません。
もう一度ファイルをダウンロードしてもこの例外が出るなら、MOD開発者に連絡したほうがいいかもしれません。
java.lang.SecurityException
Javaが要求したシステム情報へのアクセスを拒否したときに発生します。
セキュリティ違反を知らせる例外なので、MODによって不正な情報を盗み見られている可能性があります。
java.lang.RuntimeException、java.lang.Exception
エラーを起こした原因がJavaでは理解できなかった場合に発生する例外です。
MOD側のエラーメッセージとして利用される場合があります。
その場合は「Description:」に続く文字が書かれている可能性があるので、探してください。
ブロックまたはアイテムIDの競合です。
これを原因とするエラーを報告するのは無知の極みです。このような失礼のないようにお気をつけください。
解決方法
###### when adding ######に書かれてるのは競合したIDのクラスのパスで、そのパスにはMODに関連した名前が書かれている事が多いため、導入したMODの中にこれらに関連した名前などが一致しているか探します。
原因を発生させているMODが分かったらconfigフォルダを開いてSlot ****の数字を検索して、該当部分を、どのMODにも割り当ててない数字に書き換えて保存します。
起動してこの例外が出なければ、成功です。
原因を発生させているMODが分かったらconfigフォルダを開いてSlot ****の数字を検索して、該当部分を、どのMODにも割り当ててない数字に書き換えて保存します。
起動してこの例外が出なければ、成功です。
java.lang.OutOfMemoryError、java.lang.StackOverflowError、java.lang.IndexOutOfBoundsException
メモリ不足によるエラーです。
Javaに設定されたメモリ割り当て量を上げるか、必要ないアプリケーションを閉じてください。
解決方法
メモリ割り当て量を上げる方法
ランチャーのプロファイル編集のJVM Arguments項目を変更します。
「-Xmx1G」から「-Xmx1024M」に変更し、1024から好みに上げます。
※Java 32bitではメモリ割り当て量の上限は1GB(1024MB)なので、Java 64bitを使う事をお勧めします。
Javaのバージョンを変更する方法
ランチャーのプロファイル編集のExecutableを変更するだけです。
「C:\Program Files (x86)\Java\jre7\bin\java.exe」(Windows Vista以降 Java 32bitのデフォルトルート)
「C:\Program Files\Java\jre7\bin\java.exe」(Windows 64bit Vista以降 Java 64bitのデフォルトルート)
ランチャーのプロファイル編集のJVM Arguments項目を変更します。
「-Xmx1G」から「-Xmx1024M」に変更し、1024から好みに上げます。
※Java 32bitではメモリ割り当て量の上限は1GB(1024MB)なので、Java 64bitを使う事をお勧めします。
Javaのバージョンを変更する方法
ランチャーのプロファイル編集のExecutableを変更するだけです。
「C:\Program Files (x86)\Java\jre7\bin\java.exe」(Windows Vista以降 Java 32bitのデフォルトルート)
「C:\Program Files\Java\jre7\bin\java.exe」(Windows 64bit Vista以降 Java 64bitのデフォルトルート)
cpw.mods.fml.common.LoaderException、java.nio.file.NoSuchFileException、java.lang.NoClassDefFoundError、java.lang.NoSuchMethodError
左から順番に MOD読み込み失敗、対象ファイル、クラスファイル、クラスメソッドが見つからない。
MODが必要とするファイルが見つからない場合に発生する可能性の高い例外です。
MODが他のMODと連携しようとして発生したり、jarMODの導入の仕方を間違えているなど、原因は多種に渡ります。
前提MODである可能性が高いので、トピックを読んでください。
MinecraftForgeのバージョンによっても発生する事があるので、
MODがどのバージョンのMinecraftForgeに対応しているか確認して、更新またはダウングレードする場合があります。
org.lwjgl.LWJGLException: Pixel format not accelerated
GPU内臓CPU、チップセット、グラフィックカード、グラフィックドライバ、ディスプレイドライバ
のいずれかのバージョンが古い可能性が高いです。
PCについて詳しくない場合、PCを買い換えるとよいでしょう。
java.lang.StackOverflowError
メモリスタックのサイズが足りていない。
解決方法
メモリスタックの割り当て量を上げる方法
ランチャーのプロファイル編集のJVM Arguments項目を変更します。
「-Xss1M」を追加する。
ランチャーのプロファイル編集のJVM Arguments項目を変更します。
「-Xss1M」を追加する。
java.lang.NullPointerException、java.lang.NumberFormatException、java.lang.ArithmeticException、java.lang.ArrayIndexOutOfBoundsException、java.lang.NegativeArraySizeException
多くの場合、MODの不具合によって発生した例外です。
複数のMODとの相性の問題(競合)によって発生する場合もあります。
基本的にこの問題を解決する事自体が困難なため、MOD開発者へ報告するといいでしょう。
この報告はフォーラムでもたびたび見かけるため、MODを最新版にすると解決する可能性があります。
java.lang.ClassCastException
変換できないクラスへキャストしようとした。
複数のMODとの相性の問題(競合)によって発生する場合がよくあります。
java.lang.ClassFormatError
クラスが壊れている、またはフォーマットが読み込めない。
使用してるJavaのバージョンが古すぎるかもしれません。
もう一度ファイルをダウンロードしてもこの例外が出るなら、MOD開発者に連絡したほうがいいかもしれません。
java.lang.SecurityException
Javaが要求したシステム情報へのアクセスを拒否したときに発生します。
セキュリティ違反を知らせる例外なので、MODによって不正な情報を盗み見られている可能性があります。
java.lang.RuntimeException、java.lang.Exception
エラーを起こした原因がJavaでは理解できなかった場合に発生する例外です。
MOD側のエラーメッセージとして利用される場合があります。
その場合は「Description:」に続く文字が書かれている可能性があるので、探してください。
以上です。他にも様々な例外があります。
分からない例外があれば検索するのもよし、調べる余地は十分あります。
問題は解決したでしょうか?指摘・改善案があればよろしくです。
MOD開発者へ報告する前に
最初にMODとMinecraftForgeのバージョンを最新版にしましょう。殆どの場合、トピックは最新版から最近のバージョンに準拠します。
解決しない場合、MODのトピックを詳しく読み実行しましょう。次にトピックの最近のコメントも読んでください。
ここまでの間に短くても30分の時間を費やし、投稿すべきかどうかを判断します。
MOD開発者へ報告する場合
MOD開発者へ報告する場合は、常識の範囲内で詳しく記述する必要があります。
MODの名前とバージョン、MinecraftForge名前とバージョンは絶対必要です。エラー文があれば載せてください。
どの場面・どのタイミングで問題があったか、出来るだけ詳しく書いてください。
ここを怠るとMOD開発者に迷惑を掛ける場合があるので、MODを利用してる側としての感謝と礼儀を忘れぬよう気をつけてください。
クラッシュエラーを修正する方法(Modding開発者向け)
詳細
今回、例外を出した原因の修正までのやり方です(参考までに。環境や状況により異なります)
最初に、World.java:4393を探しましょう。(これはMinecraft Forgeの使用クラスですが、Minecraft Forge用に対応されたWorld Optimizer 1.2.5 v14のファイルなので注意。バニラではこのメソッドは存在しないので注意)
と明記されているのが分かります。エラーの種類は「NullPointerException」とあるので、「Block.blocksList[var5]」がNullを出してるのではないか?と、容易に推測できるのです。
Block.blocksListはブロックデータでNullと吐き出されてますので、そのブロックは存在していないという事になります。
return var5 == 0 ? false : Block.blocksList[var5].isIndirectlyPoweringTo(this, par1, par2, par3, par4);
から、
return Block.blocksList[var5] == null || var5 == 0 ? false : Block.blocksList[var5].isIndirectlyPoweringTo(this, par1, par2, par3, par4);
に修正する事で、一応この問題は解決します。
よく見ると、46行のBlockIC2Explosive.classが怪しいですね。そこからIndustrialCraft2が関係する不具合の可能性があると分かります。(現在は修正されているので、IndustrialCraft2の開発者に連絡しないでください)
最初に、World.java:4393を探しましょう。(これはMinecraft Forgeの使用クラスですが、Minecraft Forge用に対応されたWorld Optimizer 1.2.5 v14のファイルなので注意。バニラではこのメソッドは存在しないので注意)
- コード: 全て選択
4390: public boolean isBlockProvidingPowerTo(int par1, int par2, int par3, int par4)
4391: {
4392: int var5 = this.getBlockId(par1, par2, par3);
4393: return var5 == 0 ? false : Block.blocksList[var5].isIndirectlyPoweringTo(this, par1, par2, par3, par4);
4394: }
と明記されているのが分かります。エラーの種類は「NullPointerException」とあるので、「Block.blocksList[var5]」がNullを出してるのではないか?と、容易に推測できるのです。
Block.blocksListはブロックデータでNullと吐き出されてますので、そのブロックは存在していないという事になります。
return var5 == 0 ? false : Block.blocksList[var5].isIndirectlyPoweringTo(this, par1, par2, par3, par4);
から、
return Block.blocksList[var5] == null || var5 == 0 ? false : Block.blocksList[var5].isIndirectlyPoweringTo(this, par1, par2, par3, par4);
に修正する事で、一応この問題は解決します。
よく見ると、46行のBlockIC2Explosive.classが怪しいですね。そこからIndustrialCraft2が関係する不具合の可能性があると分かります。(現在は修正されているので、IndustrialCraft2の開発者に連絡しないでください)