Big_Cake

晓雨杂记

也许我们会分别,但我们将永远不会忘记彼此
bilibili
github
twitter
zhihu
telegram
tg_channel

如何診斷 Minecraft Java 版客戶端中的錯誤

前言#

媽耶,終於修好 Hexo 報 YAMLException 的問題了,上次更新已經是 5 個月前了呢!

這段時間沒更新,主要就是 Hexo 的鍋。

順帶一提,又回歸到網課時期了(我這邊有疫情)

由於 Mojang Bugjump 的傳統藝能,Minecraft Java 版通常會因為各種玄幻的原因崩潰,這篇文章將會帶著你判斷你的 Minecraft 出了什麼問題,以及可能的修復方法。

步驟#

選擇正確的 Java 版本#

請先選擇正確的 Java 版本。

1.17.x 需要 Java 16,1.18 + 需要 Java 17。1.16.5 及以下需要 Java 8

如果選擇了錯誤的 Java,那麼不管怎麼搞,遊戲都始終會崩潰。

通常情況下,啟動器會自動根據選擇的版本幫你選擇 Java 運行時(如 BakaXL 和 PCL2)

當你的遊戲無法啟動時,取決於你使用的啟動器(如 BakaXL ),啟動器會為你分析崩潰原因並為你提供一個打包好的錯誤報告與日誌。如果你比較懶,可以直接將這個壓縮包發到 QQ 群等處詢問他人。(但這就和這篇文章的主旨脫離了啊喂)

推薦閱讀:提問的智慧

理想情況下,上面的方法可幫你解決大部分問題。但是俗話說:“理想很豐滿,現實很骨感”,有些問題連啟動器都沒辦法告訴你為啥。這就需要我們自己動手了。

認識 Minecraft 的目錄結構#

首先,請打開你存放遊戲的文件夾。我在這裡預設你的遊戲已經運行和崩潰了至少一次。

如果你沒有開啟版本隔離,那麼這個文件夾應該至少具備以下目錄結構:

文件夾
|_ .minecraft
|     |_ assets
|     |_ libraries
|     |_ crash-reports
|     |_ logs
|     |_ versions
|     |   |_ 你的遊戲版本
|     |       |_ 遊戲版本.jar
|     |       |_ 遊戲版本.json
|     |_ launcher_profiles.json       
|_ 啟動器( PCL2.exe,BakaXL.exe 等)

如果你開啟了版本隔離,那麼這個文件夾的目錄結構至少應該是這樣的:

文件夾
|_ .minecraft
|     |_ assets
|     |_ libraries
|     |_ versions
|     |   |_ 你的遊戲版本
|     |       |_ crash-reports
|     |       |_ logs
|     |       |_ 遊戲版本.jar
|     |       |_ 遊戲版本.json
|     |_ launcher_profiles.json
|_ 啟動器( PCL2.exe,BakaXL.exe 等)

然後,按照上方的目錄結構,找到 crash-reportslogs 文件夾。前者存放著遊戲崩潰時自動生成的崩潰報告,後者存放遊戲運行日誌

然後,在資源管理器中按下 “修改日期” 按鈕,你就會看到最新的日誌 latest.log

latest-log

crash-reports 文件夾同理。

我們暫且先不去理 latest.log 。現在讓我們打開最新的 crash-report 文件,打開以後你就會看到大片的堆棧跟踪以及看不懂的錯誤類型。

文件名內標有 server 字樣的一般和遊戲內置的服務端有關,你可以不用理會。一般崩潰後產生的 crash-report 文件都是帶有 client 字樣的

crash-report

尋找錯誤#

這一份崩潰報告是安裝了 Forge 和 VanillaFix 後的一次崩潰生成的。我們可以看到這裡的錯誤類型是 Initializing game ,意思是加載遊戲(廢話)。堆棧跟踪最頂部的一行告訴了我們錯誤原因是 ngtlib 這個依賴 Mod 加載 jp.ngt.ngtlib.NGTCore 這個 Class 失敗了。

屏幕截圖 2022-04-08 125741.png

這段文字告訴我們導致錯誤的原因是 ClassNotFoundException 即 “找不到類”。下方的 Sha1 值驗證不通過和後方跟著的人類可讀報錯告訴我們這個 Mod 和依賴它的 RealTrainMod 的版本不對應導致崩潰

往下翻,我們可以看到這樣的布局:

屏幕截圖 2022-04-08 130559.png

上半部分記錄了你的系統、遊戲版本、Java 和 JVM 各自的版本、JVM 參數、內存等;下半部分則是你使用的 Forge、OptiFine(如果你裝了)的版本以及下方 L、C、H、I、J、A、D、E 八個字符分別對應的意思以及你安裝的 Mods。一般通過這張表即可得出出問題的 Mod 是哪個。

以此類推即可。

如果你的 Minecraft 文件夾內出現了文件名類似 hs-err-pidxxxxxxxx.mdmp 之類的文件的話,可能是你分配給 Minecraft 的內存過少或者你的 Java 有問題。

如果啟動時出現了一個窗口,內部帶有如下鏈接:https://aka.ms/mcdriver ,則說明你的顯卡驅動出現了一些問題(或者你壓根沒有顯卡 —— 通常發生在你嘗試在租來的 Windows 伺服器上)。

解決問題#

出問題的 Mod,需要更換或刪除。

內存不足,需要多分點內存,或者滾回功率,坐和放寬去玩老版本

顯卡有問題,可以考慮更新顯卡驅動或者重買一個電腦(?

Java / JVM 的問題,可以嘗試重新安裝一次 Java 或者多給你的 Minecraft 分配點內存。毕竟:

Java eats memories

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。