看懂遊戲《Minecraft》的崩潰報告服務端/客戶端 - 台部落

文章推薦指數: 80 %
投票人數:10人

打開崩潰日誌. 接下來我們對報錯的分析,均以一個Minecraft 1.12.2 Forge服務端爲例. crashreport文件夾 嗯, ... 請輸入正確的登錄賬號或密碼 註冊 忘記密碼 首頁 未分類 正文 看懂遊戲《Minecraft》的崩潰報告服務端/客戶端 原創 晚餐骨DInnerbone 2019-12-2912:59 如何看懂Minecraft報錯的關鍵信息。

  讓你如何看懂Minecraft報錯 前言 一些俏皮話 尋找崩潰日誌 打開崩潰日誌 重要的事說三遍 下載文本編輯器 開始分析 深度分析 得出結論 修復報錯 解決方案 看懂更多 結束   前言 [WARNING]本篇適用於Minecraft服務端/客戶端報錯的診斷分析,其他遊戲除外,比如網易 [WARNING]本篇適用於Minecraft服務端/客戶端報錯的診斷分析,其他遊戲除外,比如網易 [WARNING]本篇適用於Minecraft服務端/客戶端報錯的診斷分析,其他遊戲除外,比如網易 我所說的報錯,指的是一款名爲《Minecraft》的遊戲中的報錯。

並不是《我的世界》的報錯 在大家遊玩Minecraft時,有時需要裝一些Forge模組以此來提高可玩度,但自己配置模組包的時候,總會造成遊戲崩潰,並且大多數人還看不懂崩潰報告更有甚者連崩潰報告輸出目錄都不知道在哪,於是本篇教程應運而生。

一些俏皮話 Minecraft這個遊戲,各種BUG和解決方案如果寫成一堆不重複的書,摞起來的厚度可以比姚明還高。

所以這個遊戲不是一般的神奇,尤其是當你在看崩潰報告的時,你更會體驗到這一點。

你不加模組,MC也會崩潰,加了還是崩潰。

這是一個比較罕見的情況。

大多數情況是你一股腦加了一堆模組,然後突然蹦了,就不知道怎麼辦了。

幸運的是,這時候,你有60%的概率可以找到問題所在並解決這個問題。

尋找崩潰日誌 首先,你得知道你的客戶端/服務端目錄 客戶端的CrashReport文件夾目錄:(.minecraft\crash-reports) 如果你啓用了版本隔離,那就在(.minecraft\versions\xxxx\crash-reports) 服務端的CrashReport在你的服務端根目錄下。

這個條件的前提是你的服務端是人類已知的服務端,而不是外星人制造的服務端。

打開崩潰日誌 接下來我們對報錯的分析,均以一個Minecraft1.12.2Forge服務端爲例 嗯,我們可以看到,crashreport目錄下的所有文件都是以 crash-日期_具體時間-server.txt命名的 如果是客戶端的崩潰報告日誌,後面的server則是client。

然後我們找到一個最新的日誌打開並分析。

告訴你怎麼瞬間找到最新崩潰日誌, 直接點擊這個按鈕就完事了。

然後會按照報告的生成時間進行排列。

重要的事說三遍 接下來我們對報錯的分析,均以一個Minecraft1.12.2Forge服務端爲例 接下來我們對報錯的分析,均以一個Minecraft1.12.2Forge服務端爲例 接下來我們對報錯的分析,均以一個Minecraft1.12.2Forge服務端爲例 下載文本編輯器 首先你需要一個文本編輯器來查看崩潰報告, 這裏我推薦微軟官方的VisaulCode:點我下載. 然後我們就可以愉快地打開報告進行查看了。

開始分析 好了,我們說了這麼多廢話,是時候開始正式的分析了。

我估計前面的事大多數人已經做完了,就等着我講這個。

廢話不多說,開始。

打開後我們首先看到的是這個 其中,WARNINGcoremodsarepresent:xxxxx是廢話,你根本不用管。

產生這種警告是因爲有的作者動了Minecraft底層的代碼,然後Forge爲了方便,給你整出來了。

在99.9999999%的情況下,coremods在理論上不會造成崩潰。

所以你可以忽略這些。

再往下看。

我們先引出幾個重要概念,當然你不用理解。

你會發現這些報錯裏都會有一大堆的文字: atnet.xxxxx atorg.xxxxxxxx atcom.xxxxxx atjava.lang.xxxx 這些有專門的術語,叫做棧幀(stacktrace)。

CPU寄存器的空間是極其有限的,因此方法的調用需要在棧上開闢空間,每調用一個方法就會生成一個棧幀,因此崩潰報告裏的一堆atat at所代表的一系列棧幀,某種意義上是一條調用鏈,最後被調用的方法(也就是爆出異常的方法)會被崩潰報告放在最上面 我們可以看見,頂上有 這3行東西, 第一行是廢話,你可以不用管。

第二行這個報告中最後一個棧幀拋出異常的時間。

第三行是這個報錯的描述,也就是人類可讀的大白話形式。

從這開始,下面的句子都不是人類可讀形式,當然。

相比原版的報錯來說,Forge的報錯非常非常人性化了。

我們可以從第三行看到,這個崩潰報告的描述是Tickingplayer。

player代表球員玩家,也就是說這個報錯跟玩家有關係。

Tciking指的是刻,這個以後再說。

然後我們再來看下面的報錯 這個報錯片段中。

第一行是錯誤類型 我們可以看到,這個報錯的錯誤類型是 java.lang.IndexOutOfBoundsException 如果你開過Minecraft羣組服務器,或者學過java。

你可以知道 這個叫做數組下標越界異常,是一個在Minecraft中非常常見的異常。

我們不用去管這個具體是什麼,直接往下看。

下面那些一大堆棧幀的排列,並非沒有順序。

這些棧幀的排列方式,是由它們拋出異常的順序決定的。

聽不懂?我們看圖 紅色箭頭指的棧幀,是第一個拋出異常的棧幀。

然後黃色箭頭的棧幀,是最後一個拋出異常的棧幀。

現在你懂了棧幀的排列順序了吧。

最前面的棧幀就是最後一個拋出錯誤的位置,也就是說大多數情況我們是從這裏下手。

或者從第一個棧幀的後面幾個棧幀下手。

好,我們繼續看。

現在我們遇到的是指數組下標越界異常。

例如:一個ArrayList數組中沒有元素,而你想獲取第一個元素,運行是就會報此類型的錯誤。

聽不懂?我們看報錯! 看看,最後棧幀拋出的異常,就是ArrayList在獲取元素的時候沒找到。

當然你不用在意這個,繼續往下看。

這裏已經出現了產生這個崩潰的模組名字。

這個模組叫做:slashblade,也就是大家經常玩的拔刀劍。

然後你發現,這些棧幀的形式都是 atxxx.xxxxxxx.xxxxxx.xxxxxxxx.xxxxxxx.xxxxxx(xxxx.java:xxxx) 如果你以壓縮包形式打開拔刀劍模組JAR文件, 你會發現一件事。

那就是這些棧幀其實就是這個JAR壓縮包的內部目錄結構!!!!! 就比如這條棧幀 atmods.flammpfeil.slashblade.item.ItemSlashBlade$ComboSequence.get(ItemSlashBlade.java:310) 我們可以把所有的".“去掉,改成”/或者\" 這樣就是一個文件目錄了!! atmods.flammpfeil.slashblade.item.ItemSlashBlade$ComboSequence.get(ItemSlashBlade.java:310) 相當於 atmods\flammpfeil\slashblade\item\itemSlashBlade 而這段藍色的,ComboSequence.get,指的是這個棧幀中拋出異常的方法。

並不是文件目錄。

括號裏的ItemSlashBlade.java:310指的是, 這個異常發生在 ItemSlashBlade.java這個文件夾中的第310行。

是不是突然明白一大堆東西!!!!!!!!! 下面的圖就是我用壓縮包形式打開拔刀劍模組文件後, 把棧幀轉換成目錄,就找到了拋出異常的文件路徑。

深度分析 好了,那麼我們接下來進行硬核(Hardcore)分析吧 上面我們已經找到了這個崩潰中有拔刀劍的信息 那麼我們就進一步分析。

我們知道,拔刀劍有幾個棧幀拋出了異常,那麼我們以最後一個拋出異常的棧幀進行分析。

amods.flammpfeil.slashblade.item.ItemSlashBlade$ComboSequence.get 從這段信息中我們得知,這個拋出異常的方法在ComboSequence.Get中 ComboSequence翻譯過來就是組合技,然後我們進一步分析 既然這個崩潰出在了拔刀劍的組合技上,那也就是說。

我的服務器崩潰是因爲,有某個人用了拔刀的組合技,然後不知道觸發了什麼BUG。

服務器就因此崩潰了。

很好,如果你能分析到這一步,那就快接近真相了! 上代碼 我們首先登陸Github(世界上最大的代碼託管站) 然後找到拔刀劍的開源代碼倉庫,並依次進入目錄 src/main/java/mods/flammpfeil/slashblade/item/ItemSlashBlade.java 然後這個就是拋出異常的原代碼了。

然後搜索方法ComboSequence.get //報錯產生的位置 publicstaticComboSequencegetComboSequence(NBTTagCompoundtag){ returnComboSequence.get(tag.getInt(comboSeqStr)); } 很好,你可能看見一個熟悉的詞彙,叫做NBT 我們引用一段百度百科上的話 二進制命名標籤(NameBinaryTag),NBT格式爲Minecraft中用於向文件中存儲數據的一種存儲格式。

NBT格式以樹形結構並配以許多標籤的形式存儲數據 既然如此,我們就可以知道 這個報錯的產生和NBT標籤有關係,然後我們只需要看見tag這個詞即可。

這就代表,這個異常的產生是因爲在獲取組合技的NBT數據時產生異常,在結合最後一個拋出的異常 也就是數組下標越界異常 我們就可以推導出這個異常的產生了。

一個玩家在使用拔刀的組合技時,然後這個組合技因爲某種原因無法使用,也就是ArrayList數組元素爲空,導致拋出數組下標越界異常,引發Minecraft服務器保護機制然後自動關服。

併產生這個報錯。

好了,我們繼續看下面的棧幀。

對於下面的棧幀來說,上面的棧幀全是主要原因。

也就是說下面的棧幀都是廢話 不過我還是貼出來讓你瞭解一下。

很好,接下來我們看紅圈內的棧幀。

其中所有net.minecraftforge.fml.xxxx的棧幀,基本上沒什麼有價值的信息。

我們繼續看下面net.minecraft.xxxx的棧幀,我們可以看到關鍵詞彙那就是entity。

得出結論 Entity就是實體的意思,也就是說這個東西出現在玩家使用組合技與實體進行交互時才發生的數組下標躍境異常 我們繼續看 這2段代表了有關玩家的信息,意義不大。

我們在這些棧幀中可以看到有network和server單詞。

這代表這些棧幀與網絡和服務端關西了。

這段也是意義不大,而且與拔刀劍產生的報錯無關,我們繼續看。

這段纔是好戲,我們可以看到一個詞組叫playerLoggedOut,這個代表玩家登出服務器。

也就是玩家掉線 然後我們結合這些堆棧拋出異常的順序。

我們就可以得知一個大概順序。

玩家使用組合技後,首先從掉線 然後服務端發現異常 然後服務端整理崩潰後就關閉服務器了。

很好,我們對錯誤的分析已經結束了。

接下來我們繼續往下看! 完成看崩潰報告的棧幀並得出結論~ 修復報錯 這是下面的內容。

我們可以看到大大的Head(頭部)字樣 然後Thread(線程):Serverthread(主線程) 我們可以得到一個信息 那就是說,這些棧幀拋出錯誤是在服務器主線程上拋出的,所以纔會導致服務器自我保護機制開啓並關閉服務器。

我們繼續往下看。

我們可以看見大大的Playerbeingticked 這段代表有關出錯實體的名字。

然後既然出現了Player,代表這個實體是玩家。

也就代表,這個是出錯的實體是玩家。

因爲那個錯誤拔刀劍在玩家手上。

所以出錯實體是玩家。

然後 EntityType是實體類型,EntityID是實體的ID,Name就不用解釋了,是實體名。

因爲這個實體是玩家,所以實體名就是玩家名。

如果是一隻名爲蔡徐坤(cxk)的生物(mobs)實體扔出了籃球,造成了異常。

那就是 好了,我們已經知道造成異常的原因、造成異常的玩家了。

那麼接下來,就是解決方案拉。

解決方案 好,我們開始解決。

一般來說由實體引起的報錯,我們只需要刪除這個實體就行了。

這段包含了出錯實體,也就是用了錯誤拔刀劍玩家的位置。

如果這些實體不是玩家,我們可以利用MCEdit、創世神、原版kill指令讓這些實體GG。

可問題在於,這個是玩家。

那怎麼辦? 我們有2個辦法 第一個是刪除有關這個玩家的揹包信息, 第二個是打開Forge的錯誤實體自動移除功能。

我們選擇第二個對吧, 我們在服務端的config文件夾內找forge.cfg然後打開 並找到如下兩行 然後把false改成true並重啓服務器即可。

好了,報錯修復到此結束。

看懂更多 先說一下,這個與解決崩潰沒什麼關係了 純粹是爲了讓你瞭解更多的東西。

直接上圖, 我們可以看到。

SystemDetails的意思是系統細節 然後下面有 MinecraftVersion遊戲版本 OperatingSystem操作系統型號 JavaVersionJava版本 JavaVMVersionJVM版本 Memory內存大小 JVMFlagsJVM附加參數等東西 然後還有Plugins裏面有你加載到服務器裏的插件名字 還有FML代表Forge版本 State和下面的表,是你載入到服務器裏的模組和模組的情況 這些英文自己翻譯就行了。

建議平時多積累點詞彙量。

結束 好了,本文到此結束。

轉載須註明作者名字和原文地址 本文由Dinnerbone晚餐骨於CSDN上原創發佈。

如對你有幫助,或是讓你瞭解了更多知識,那真是再好不過了。

發表評論 登录 所有評論 還沒有人評論,想成為第一個評論的人麼?請在上方評論欄輸入並且點擊發布. 相關文章 安裝並配置Apache   從今天開始,我將開始Web開發的學習。

本系列博客將陸續記錄我學習過程中的收穫和困惑,從前端到後端,一探Web開發的流程和內容。

我目前掌握的有C/C++,有一些使用C進行嵌入式開發的經驗,C++就馬馬虎虎了,對於C++這個“不可以精通 painterQ 2022-03-1714:34:17 LayeredWindows窗口的半透明效果   介紹: LayeredWindows是windows窗口中的一類,提供類似半透明的效果(阿爾法混合)。

半透明效果是字面上有能看出來的,但實際上根據MSND,該類型的窗口還能更好的支持非矩形的窗口,使之顯示效果更平滑流暢(暗地裏猜測是使 painterQ 2022-03-1714:34:17 Windows窗口的尺寸和位置 介紹   窗口的大小和位置表示爲一個矩形邊界,該矩形的座標是相對於屏幕或父窗口而言的。

頂級窗口的座標是相對於屏幕的左上角而言的,子窗口的座標則是相對於父窗口的左上角而言。

應用程序創建窗口時(CreateWindowEx())指定一個窗口的初 painterQ 2022-03-1714:34:17 一比一還原axios源碼(三)——錯誤處理   前面的章節我們已經可以正確的處理正確的請求,並且通過處理header、body,以及加入了promise,讓我們的代碼更像axios了。

這一章我們一起來處理ajax請求中的錯誤。

一、錯誤處理   首先我們要知道錯誤有哪些類型,通常我們 Zaking 2022-03-1714:33:56 一比一還原axios源碼(四)——Axios類   axios源碼的分析,到目前爲止,算上第0章已經四章了,但是實際上,還都沒有進入axios真正的主線,我們來簡單回顧下。

最開始我們構建了get請求,寫了重要的buildURL方法,然後我們處理請求體請求頭,響應體響應頭,這樣我們就可以傳 Zaking 2022-03-1714:33:36 Qt編寫可視化大屏電子看板系統27-模塊5負荷分佈 一、前言 負荷分佈模塊包括工序計劃負荷、當日負荷、負荷百分比三個子模塊,工序計劃負荷用表格的形式展示不同工序在不同日期的負荷工作時長,比如組裝工序在2022-02-10運行了88小時,一般表格顯示最近的一星期的信息;當日負荷用柱狀圖的形 飛揚青雲 2022-03-1714:32:56 Rancher和知乎超大規模多集羣管理聯合實踐 源起 知乎是中文互聯網高質量的問答社區,每天有上千萬用戶在知乎分享知識、經驗和見解,找到自己的答案。

爲配合不同階段的業務發展需求,知乎容器平臺也在不斷演進、提升,目前幾乎所有的業務都運行在容器上。

這兩年知乎開始使用Rancher管理 RancherLabs 2022-03-1714:32:16 招聘ASP.NET技術人員 現急需招聘技術人員4名, 職位描述: 1.  熟悉使用VS2005,SQL2005的開發工具; 2.  有BS開發經驗; 3.   精通ASP.NET+MSSQL的開發; 4.  熟悉HTML、XML和Javascript,熟悉C Teracy 2022-03-1714:31:46 招聘Net軟件工程師,測試工程師: 招聘Net軟件工程師,測試工程師: Net軟件工程師職位描述: 1.  熟悉使用VS2005,SQL2005的開發工具; 2.  有BS開發經驗; 3.   精通ASP.NET+MSSQL的開發; 4.  熟悉HTML、XML和J Teracy 2022-03-1714:31:46 項目小結+Repeater中如何使用單選按鈕 前言: 已經快半年沒有來這裏寫一寫技術文檔了,從年後開始,來到一家傳統的服裝的公司,並開始組建一個新的開發團隊,爲公司的轉型開始做準備。

公司的老闆看到了淘寶的強大,PPG在以服裝行業的身份在電子商務的崛起,時尚起義,凡客成品……..從數碼產 Teracy 2022-03-1714:31:46 時間戳簽名和或證書無法驗證或已損壞(已解決) 原文鏈接:點我 時間戳簽名和或證書無法驗證或已損壞代碼:0x80096005環境:WIN7安裝某軟件不能使用(**已停止工作)查找後發現需要安裝netframework4.7.2框架。

但是安裝不上,會報錯。

現象:安裝netframewo 時來の運轉 2022-03-1714:31:16 .NetCore中無處不在的Async/Await 參考鏈接:https://mp.weixin.qq.com/s/CU_eaJ6c0g4Py7kYLRLBkQ 菜鳥你慢慢飛 2022-03-1714:30:56 C#if-else替代方案 參考鏈接: https://blog.csdn.net/weixin_38161834/article/details/106648455 https://blog.csdn.net/xiaouncle/article/details/53 菜鳥你慢慢飛 2022-03-1714:30:56 for循環替代解決方案 轉自:https://mp.weixin.qq.com/s/HQ2LEqH9vaiPrAGnRbhNHQ 幾種遍歷方法中for執行最快,它沒有任何額外的函數調用棧和上下文。

但在實際開發中我們要結合語義話、可讀性和程序性能,去選擇究竟使用哪種 菜鳥你慢慢飛 2022-03-1714:30:56 安裝酷痞到IIS7.x共用80端口Windows(64位)系統下運行多個酷痞 需求: 1.酷痞直接運行的模式是自宿主運行。

由於win系統一般都由iis提供多個網站服務,並首先佔用了80端口,如果想酷痞可以直接通過主機頭和iis共用80端口會出現這種運行模式的需求。

以下是實現方法,請按步操作: 1.下載iis的應用程 黎東海 2022-03-1714:30:16 晚 晚餐骨DInnerbone 24小時熱門文章 最新文章 C#強行鎖定第三方外部應用程序窗體窗口的分辨率尺寸大小禁止鼠標拖拽改變窗口大小 C#如何通過瀏覽器外部啓動應用程序(可傳參) Java的反射機理 遊戲《Minecraft》或其他應用程序實現自動更新客戶端版本 PHP下查詢遊戲《Minecraft》多人遊戲服務器的人數。

最新評論文章 長難句6(兼類詞·主語從句) 看俄羅斯烏克蘭局勢幹妹加賴3p6688外送服務評價收費合理高CP值旅館首選逢甲火車站line約妹試車妹新鮮美味可口讓你流連忘返喔官網www.3p6688.com 天冷了,任務欄養只貓吧「GitHub熱點速覽v.21.46」 關於混子 書本的邊界 計算字符串中出現次數最多的字符和出現的次數 鏈表、二叉樹—遞歸遍歷框架 Flutter的強制自我審查 js根據長度並計算渲染pxwidth寬度



請為這篇文章評分?