怎么看崩潰日志(二)
前文:第一篇
無論是網(wǎng)易版,民間啟動(dòng)器,還是官方啟動(dòng)器,甚至是IDEA和Eclipse這樣的開發(fā)環(huán)境;
無論是服務(wù)器,還是客戶端;
只要是Java版MC,它們的架構(gòu)都大同小異。即,基巖版的我不做保證。
在logs文件夾下,你可以找到游戲的運(yùn)行日志。只要游戲一啟動(dòng),不管是否崩潰,都會(huì)有。
在crash-reports下,你可以找到游戲的崩潰報(bào)告。只有游戲崩潰了才會(huì)有。

在極為罕見的情況下,上述日志可能不存在,但一般來說,都是找錯(cuò)了目錄,或者眼花沒看見。如果你發(fā)現(xiàn)沒有日志,第一反應(yīng)請(qǐng)認(rèn)為是自己沒有找到,而不是沒生成日志。在MCBBS上,我也見過號(hào)稱沒有日志,后面又改口說有日志的情況,非常耽誤診斷問題,也非常浪費(fèi)人的耐心。
一般來說,看MC的日志、報(bào)告,指的是看上述兩者。但是,如果你是用HMCL、PCL的話,還會(huì)發(fā)現(xiàn)有另外一個(gè)日志,這個(gè)日志是“啟動(dòng)器的日志”,不是“MC的日志”。多數(shù)情況下,身經(jīng)百戰(zhàn)的啟動(dòng)器并不會(huì)有問題,只要忽略它的日志就可以。出問題的情況多數(shù)都是玩家自己秘制的整合包,在搭配MOD的時(shí)候出了問題,或者是MOD本身藏著BUG,或者是Java版本沒有選對(duì)。
HMCL等啟動(dòng)器還會(huì)在崩潰時(shí)手動(dòng)把日志打包,打包的主要內(nèi)容就是上述三個(gè)日志。為了防止換了個(gè)啟動(dòng)器就找不到日志,我更推薦記住上述的MC目錄,這適用于所有的啟動(dòng)器,畢竟啟動(dòng)器也是從那些地方打包的。如果你想在論壇里求助,直接發(fā)那個(gè)整合包,或者發(fā)你從游戲里的目錄找到的日志,都是可以的。

需要指出的是,現(xiàn)在的啟動(dòng)器大多有版本隔離的功能,這使得玩家可以用同一個(gè)啟動(dòng)器啟動(dòng)不同的整合包,并且管理多個(gè)不同的游戲版本,如1.12.2和1.16.5,還不用擔(dān)心存檔都混在一起。

缺點(diǎn)是,很多新人并不知道這個(gè)功能的存在,他們只看到version外面的通用目錄,卻不知道了version里面那個(gè)才是實(shí)際的游戲目錄。他們點(diǎn)開外面的logs文件夾,發(fā)現(xiàn)沒有日志,或者只有很久之前的日志。日志沒有問題,問題在于他們找錯(cuò)了地方。如果你發(fā)現(xiàn)沒找到日志,請(qǐng)首先考慮這種情況。

那,現(xiàn)在找到日志了,繼續(xù)說怎么看日志的問題。
有一些問題并不是靠看日志解決的,比如“MOD為什么沒裝上”“為什么挖不到礦”“虛無世界里的槍怎么獲得”“游戲沒聲音”“為什么服務(wù)器進(jìn)不去”,這些看了日志一般也不知道什么。我們看日志是為了解決那些需要看日志的情況,多數(shù)情況是游戲啟動(dòng)到一半,卡在報(bào)錯(cuò)界面,或者是閃退了。
需要靠日志解決的問題,一般有這么幾種:
【1】漏裝前置MOD,裝了不兼容的MOD版本(前置版本號(hào)不對(duì),或者M(jìn)C版本號(hào)不對(duì),或者是fabric的MOD裝到forge上),MOD裝重復(fù)了。這類問題在低版本的MC里會(huì)導(dǎo)致游戲啟動(dòng)到一半直接閃退,高版本的MC則一般會(huì)有一個(gè)專門的界面停住,告訴你出什么問題了。

比如剛才我故意找了個(gè)1.16的啟動(dòng)器,把匠魂MOD的前置“Mantle”刪了,游戲就會(huì)停在上述界面。你的英語好一點(diǎn)的話,會(huì)知道是“tconstruct模組需要1.6.152或更高的mantle。當(dāng)前,mantle未安裝”。如果英語不好,就去學(xué)一學(xué)英語,或者干脆開擺。不懂編程尚且能看,不懂英語看日志,可以說是寸步難行。我不信任機(jī)器翻譯,不論是百度翻譯、谷歌翻譯還是DeepL,都是扯,靠不住。
【2】?jī)蓚€(gè)MOD打架了,比如mixin沖突,或者互相套娃死循環(huán)(雙方都有一個(gè)反擊效果,無限連鎖觸發(fā))。這種情況就是找到哪個(gè)MOD在搞事,把它刪了就行。
【3】MOD寫出BUG了,原地崩潰。作為開發(fā)者,我把MC干崩的次數(shù)至少也得有個(gè)一百次,寫出BUG家常便飯。MC的代碼架構(gòu)導(dǎo)致MOD寫的時(shí)候很容易出這種問題,最典型的是下面那種。這種情況也是找到哪個(gè)MOD在搞事,把它刪了就行?;蛘撸谇宄趺幢罎⒌那闆r下,游玩的時(shí)候繞開那個(gè)情況。如果MOD不是最新版,更新也許會(huì)有幫助——也許作者已經(jīng)解決了這個(gè)BUG,當(dāng)然也許沒有。
【4】?jī)H限客戶端的MOD安裝到了服務(wù)器,由于MOD沒有做保護(hù),導(dǎo)致服務(wù)器啟動(dòng)失敗,或者中途崩潰。這種情況下,服主多少要對(duì)自己裝了什么MOD、哪些是純客戶端的心里有數(shù),簡(jiǎn)單排查后再去根據(jù)日志里的跡象找尋。還是,刪掉那些不該在的MOD文件。
【5】亂改文件名,擾亂了MOD的加載順序,導(dǎo)致一些要求加載順序的MOD報(bào)錯(cuò)。不要用中文,不要用中文,問答帖經(jīng)??吹接腥诉@么鸚鵡學(xué)舌地回復(fù),把這條規(guī)則當(dāng)成玄學(xué),但它確實(shí)很有道理。最經(jīng)典的就是這個(gè)帖子(https://bbs.mcmod.cn/thread-4159-1-1.html),我收藏了很久,用于講解用給MOD改名和用中文為什么會(huì)崩潰??上У氖?,歷史只會(huì)不斷重演,總有人把下載下來的MOD自己全都改成中文名字,還把原本的名字給刪了,弄得難以分辨到底是哪個(gè)mod,總有啟動(dòng)器給MOD加名字中文前綴。順帶一提,某些啟動(dòng)器在安裝目錄有中文的情況下,還會(huì)導(dǎo)致游戲沒有聲音。這類問題的解決一般是手動(dòng)調(diào)整文件名,在文件名的開頭加英文嘆號(hào)令他跑到最前面。
【6】Java版本不對(duì)。這種情況日志一般不太好解讀,沒什么共性,都是自己檢查Java版本。只要記住1.12開始,最低java8;1.17開始,最低java16;1.18開始,最低java17就行。更高的版本?那么想玩新版本,大可以自己查查。需要注意的是,并不是你在電腦上裝有對(duì)應(yīng)的Java就行,你必須確保MC啟動(dòng)的時(shí)候,用的是那個(gè)Java。如果啟動(dòng)器里沒有專門的設(shè)置,那就是靠系統(tǒng)變量來設(shè)置。如果你搞不定系統(tǒng)變量,那用個(gè)啟動(dòng)器就行。2023年,比較主流的啟動(dòng)器如HMCL都會(huì)自動(dòng)幫你選擇合適的Java版本。
【7】服務(wù)器累死了。一般的服務(wù)器都有超時(shí)保護(hù),在一個(gè)tick超過60秒時(shí)自行崩潰。這樣的崩潰也很好認(rèn),一般都會(huì)有 a single tick took 某某時(shí)間的說法,然后下面列舉各種Thread都在干什么。很遺憾,雪崩的時(shí)候,每一片雪花都在……。很難說壓死駱駝的最后一根稻草是誰,只能自己權(quán)衡了。
【8】ID爆了。在1.12.2以及之前,物品、方塊、群系、維度的數(shù)量是有上限的,如果你裝的mod過多,就會(huì)爆掉。這種情況下,去安裝一個(gè)叫JEID的MOD就能突破上限。不過,裝了之后的存檔再也回不到?jīng)]有裝的狀態(tài)了,請(qǐng)謹(jǐn)慎使用,安裝前務(wù)必備份存檔。存檔在哪?下篇文章再說吧。這種日志的特征是 maxium ID reached,后面一半寫一個(gè)數(shù)字是4096。當(dāng)然,除了裝JEID,刪幾個(gè)MOD也可以解決,刪到不爆為止。
【9】ID撞了。1.7.10的附魔是用的數(shù)字ID,如果有多個(gè)MOD占用了……比如說37號(hào)附魔,分別試圖注冊(cè)不同的內(nèi)容,就會(huì)炸。寫的好的MOD會(huì)在配置文件里提供修改這些ID的接口。如果倆MOD都寫的爛,那趕緊刪一個(gè),或者倆都刪了吧。
【10】Concurrent Modification Exception (CME)。這玩意一出,基本死刑。由于MC的代碼比較差,這個(gè)問題經(jīng)常出現(xiàn),而且它本可以避免的。這個(gè)東西出來的時(shí)候,日志完全看不出是因?yàn)槭裁礀|西、什么MOD,只能當(dāng)做沒有日志,二分法瞎查一氣。
【11】安裝不當(dāng)。比如,缺少lwglj什么的,這種時(shí)候一般帶著啟動(dòng)器重裝就行。
前文提到了找日志的核心部分,但很遺憾,有的時(shí)候日志亂糟糟地,并不能找到核心部分。那怎么辦呢?答,全文搜“FATAL”,沒有FATAL搜“ERROR”,把每個(gè)都看一遍,看哪個(gè)最嚴(yán)重。

今天我剛看到一個(gè)日志,看結(jié)尾像是聲卡驅(qū)動(dòng)報(bào)錯(cuò),沒有傳統(tǒng)格式的堆棧信息。但這怎么也不像導(dǎo)致崩潰的原因。于是我全文搜FATAL,哈哈,沒有。于是我搜ERROR。

[16:39:34] [Client thread/ERROR] [FML/]: The mod manametalmod (ManaMetalMod) requires mod versions [Muya@[1.7.1,1.7.1]] to be available
只要你的英語水平夠用,那你一眼就能看出這是魔法金屬缺前置,是一個(gè)致命的錯(cuò)誤。
解決了還是崩潰?先看日志有沒有變化,沒變化一般是解決的方式不對(duì);有變化一般是說明還有其他問題,對(duì)著新的日志看就行。老是有新的問題?啊,那就別浪費(fèi)時(shí)間了,去玩原版或者別人測(cè)試好的整合包吧。畢竟你玩MC是為了開心的,不是為了給自己找麻煩做題的,對(duì)吧。

看不懂?沒關(guān)系,這說明你是個(gè)正常人。實(shí)際上,大多數(shù)國(guó)人的英語水平都不足以看懂“require”一詞,看不懂也沒什么的,只能說明英語沒學(xué)好。遇到困難睡大覺,也是人之常情。
看懂了?恭喜,你已登神,打敗了全國(guó)99%的人。哦,當(dāng)然,全國(guó)可能也有90%的人根本就不玩MC就是了。