ゲームを理解する「マインクラフト」クラッシュレポートサーバー/クライアント

Minecraftの重要な情報を読み取る方法に与えられています。

 

 

序文

そのような網易のような他のゲームを除いて[警告] Benpian診断解析のMinecraftサーバ/クライアントに適したが与えられ、
[警告] Benpian診断エラー解析はMinecraftのサーバ/クライアントに適用され、そのような網易のような他のゲームを除い
[WARNING 】診断分析Minecraftのサーバ/クライアント適しBenpianは、網易のような他のゲームを除いて、与えられ

私は、エラーに「マインクラフト」と呼ばれるゲームを参照して、エラーと述べました。ない「マイ・ワールド」のエラー
、あなたは時々 replayabilityのを高めるために、いくつかのフォージモジュールをインストールする必要がMinecraftの、しかし、彼らの割り当てモジュールパッケージ、クラッシュのゲーム原因常にあり、ほとんどの人を再生するときクラッシュレポートさらに悪いことに、クラッシュレポートの出力ディレクトリを読み取ることができませんがどこかわからないので、このチュートリアルでは、されて入ってきました。

いくつかのwisecrack

Minecraftのゲーム、BUGと繰り返されていない本の山に書かれた場合のさまざまなソリューションは、厚さがヤオミンよりもさらに高い積み上げることができます。
だから、これはあなたがクラッシュレポートを見ると、特に、あなたがより多くの本の経験する、魔法の普通のゲームではありません。

あなたはモジュールを追加していない、MCは崩壊し、プラスまたは崩壊します。これは比較的まれな疾患です。
最もあなたが落ちる場合もプラスモジュールの束で、突然行う方法がわからない、飛び上がっ。
幸いなことに、この時間は、あなたが問題を発見し、問題を解決するために60%の確率を持っています。

クラッシュログを見ると

まず、あなたは、クライアント/サーバーのディレクトリを知っている必要があります

ディレクトリフォルダクライアントCrashReport :(。Minecraftの\クラッシュレポート)
あなたがして(.minecraft \バージョン\ XXXX \事故で、アイソレーションのバージョンを有効にした場合 -reports)

サーバーのルートディレクトリにCrashReportサーバー。
この条件の前提は、サーバーは、人に知られているサーバーではなく、サーバーのエイリアンの製造であるということです。

クラッシュログを開きます。

次に、我々は、エラーを分析するのMinecraft 1.12.2フォージサーバは、例えば

crashreportフォルダ
ああ、私たちは、ディレクトリ内のファイルがにcrashreportているすべて見ることができる
という名前-server.txt crash-特定の日付_時間
、それはクライアントのクラッシュレポートログがある場合、サーバはクライアントの背後にあります。

その後、我々は新しいログが開かれ、分析されて見つけます。

、瞬時に最新のクラッシュログを見つける方法を教えてここに画像を挿入説明
ちょうどビン上のボタンをクリックしてください。その後、レポートが生成されるに従って配置されます。

3回を言うために重要な何か

次に、我々は、エラーを解析し、Minecraftの1.12.2フォージサーバは、例えば
次に、我々は、エラーを解析し、Minecraftの1.12.2フォージサーバは、例えば
次に、我々は、エラーを解析しています例えば、サーバ、Minecraftの1.12.2フォージ

ダウンロードテキストエディタ

まず、あなたは、クラッシュレポートを表示するには、テキストエディタが必要
私はMicrosoftの公式Visaulコードをお勧めします。私は、ダウンロードのポイントを

その後、我々は喜んでオープンを表示するために報告することができます。

スタート解析

さて、私たちは、正式な分析を開始するには、それの時間をそんなにナンセンスを言います。
私は人々の前でほとんどの事は、私はこの上で話すことを待って、行われていると思います。

ADOは、始まりました。

開いた後、私たちが最初に表示され、この
ここに画像を挿入説明警告coremodsが存在する、:xxxxxはナンセンスである、あなたがコントロールしていません。
この警告は、いくつかの著者はMinecraftの基礎となるコードを移動するので、その後、便宜上フォージは、あなたの全体のアウトを与える生成されます。
例99.9999999パーセントでは、理論的にはcoremodsは、クラッシュが発生することはありません。ですから、これらを無視することができます。

そして、見下します。

ここに画像を挿入説明いくつかの重要な概念へのリードは、もちろん、あなたが理解していないしてみましょう。
あなたは、テキスト中のエラーの多くがあることを見つけることができます:

at net.xxxxx
at org.xxxxxxxx
at com.xxxxxx
at java.lang.xxxx

これらの専門用語で呼ばれるスタックフレーム(スタックトレース)。

CPUのレジスタ空間が極めて限られているので、スタック上のスペースを開放する方法のニーズを呼び出し、各呼び出し方法は、スタックフレームを生成しますで杭でクラッシュレポートそう
表さAの直列スタックフレームコールチェーンのセンスの種類は、方法(で、珍しい方法を破った)上にクラッシュレポートを呼び出すことが最後になりますです

私たちは、の上、見ることができ
ここに画像を挿入説明
、3行のもの
、あなたがコントロールすることはできません、最初の行はナンセンスです。
このレポートの2行目、スタックフレームが例外をスロー最後の時間。
第三のラインは、この説明は、人間が読める形式の方言で与えられます。
そこからは、以下の文章はもちろん、人間が読める形式ではありません。当初の条件と比較した誤差、誤差のフォージは非常に、非常に人間的です。

私たちは、クラッシュレポートがプレイヤーを刻々と過ぎ記述し、第三列目から見ることができます。
代わってプレイヤーのプレイヤーにこのエラーが選手と関係を持っていることを選手、。
Tcikingは、この後に、瞬間を指します。

その後、我々は次のエラーを見ていきます

ここに画像を挿入説明这个报错片段中。
第一行是错误类型
我们可以看到,这个报错的错误类型是
java.lang.IndexOutOfBoundsException
如果你开过Minecraft群组服务器,或者学过java。你可以知道
这个叫做数组下标越界异常,是一个在Minecraft中非常常见的异常。

我们不用去管这个具体是什么,直接往下看。
下面那些一大堆栈帧的排列,并非没有顺序。
这些栈帧的排列方式,是由它们抛出异常的顺序决定的。
听不懂?我们看图

ここに画像を挿入説明红色箭头指的栈帧,是第一个抛出异常的栈帧。
然后黄色箭头的栈帧,是最后一个抛出异常的栈帧。
现在你懂了栈帧的排列顺序了吧。
最前面的栈帧就是最后一个抛出错误的位置,也就是说大多数情况我们是从这里下手。
或者从第一个栈帧的后面几个栈帧下手。

好,我们继续看。

现在我们遇到的是指数组下标越界异常。
例如:一个ArrayList数组中没有元素,而你想获取第一个元素,运行是就会报此类型的错误。
听不懂?我们看报错!

ここに画像を挿入説明
看看,最后栈帧抛出的异常,就是ArrayList在获取元素的时候没找到。
当然你不用在意这个,继续往下看。

ここに画像を挿入説明这里已经出现了产生这个崩溃的模组名字。
这个模组叫做:slashblade,也就是大家经常玩的拔刀剑。

然后你发现,这些栈帧的形式都是
at xxx.xxxxxxx.xxxxxx.xxxxxxxx.xxxxxxx.xxxxxx(xxxx.java:xxxx)
如果你以压缩包形式打开拔刀剑模组JAR文件,
你会发现一件事。
那就是这些栈帧其实就是这个JAR压缩包的内部目录结构!!!!!

就比如这条栈帧
at mods.flammpfeil.slashblade.item.ItemSlashBlade$ComboSequence.get(ItemSlashBlade.java:310)

我们可以把所有的" . “去掉,改成” / 或者 \ "
这样就是一个文件目录了!!

at mods.flammpfeil.slashblade.item.ItemSlashBlade$ComboSequence.get(ItemSlashBlade.java:310)
相当于
at mods\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

//报错产生的位置
	public static ComboSequence getComboSequence(NBTTagCompound tag){
		return ComboSequence.get(tag.getInt(comboSeqStr));
	}

很好,你可能看见一个熟悉的词汇,叫做NBT
我们引用一段百度百科上的话

二进制命名标签(Name Binary Tag),NBT格式为Minecraft中用于向文件中存储数据的一种存储格式。NBT格式以树形结构并配以许多标签的形式存储数据

既然如此,我们就可以知道
这个报错的产生和NBT标签有关系,然后我们只需要看见tag这个词即可。
这就代表,这个异常的产生是因为在获取组合技的NBT数据时产生异常,在结合最后一个抛出的异常
也就是数组下标越界异常
我们就可以推导出这个异常的产生了。

一个玩家在使用拔刀的组合技时,然后这个组合技因为某种原因无法使用,也就是ArrayList数组元素为空,导致抛出数组下标越界异常,引发Minecraft服务器保护机制然后自动关服。并产生这个报错。

好了,我们继续看下面的栈帧。
对于下面的栈帧来说,上面的栈帧全是主要原因。也就是说下面的栈帧都是废话
不过我还是贴出来让你了解一下。

ここに画像を挿入説明很好,接下来我们看红圈内的栈帧。

其中所有 net.minecraftforge.fml.xxxx的栈帧,基本上没什么有价值的信息。
我们继续看下面 net.minecraft.xxxx的栈帧,我们可以看到关键词汇那就是entity

得出结论

Entity就是实体的意思,也就是说这个东西出现在玩家使用组合技与实体进行交互时才发生的数组下标跃境异常

我们继续看
ここに画像を挿入説明
这2段代表了有关玩家的信息,意义不大。
ここに画像を挿入説明我们在这些栈帧中可以看到有network和server单词。
这代表这些栈帧与网络和服务端关西了。
这段也是意义不大,而且与拔刀剑产生的报错无关,我们继续看。
ここに画像を挿入説明
这段才是好戏,我们可以看到一个词组叫playerLoggedOut,这个代表玩家登出服务器。
也就是玩家掉线
然后我们结合这些堆栈抛出异常的顺序。
我们就可以得知一个大概顺序。

  1. 玩家使用组合技后,首先从掉线
  2. 然后服务端发现异常
  3. 然后服务端整理崩溃后就关闭服务器了。
    很好,我们对错误的分析已经结束了。
    接下来我们继续往下看!
  • 完成看崩溃报告的栈帧并得出结论~

修复报错

ここに画像を挿入説明这是下面的内容。
我们可以看到大大的Head (头部)字样
然后Thread(线程): Server thread(主线程)
我们可以得到一个信息
那就是说,这些栈帧抛出错误是在服务器主线程上抛出的,所以才会导致服务器自我保护机制开启并关闭服务器。

我们继续往下看。
ここに画像を挿入説明我们可以看见大大的 Player being ticked
这段代表有关出错实体的名字。
然后既然出现了Player,代表这个实体是玩家。
也就代表,这个是出错的实体是玩家。因为那个错误拔刀剑在玩家手上。所以出错实体是玩家。

ここに画像を挿入説明
然后
Entity Type是实体类型,Entity ID是实体的ID,Name就不用解释了,是实体名。
因为这个实体是玩家,所以实体名就是玩家名。

如果是一只名为蔡徐坤(cxk)的生物(mobs)实体扔出了篮球,造成了异常。那就是
ここに画像を挿入説明
好了,我们已经知道造成异常的原因、造成异常的玩家了。
那么接下来,就是解决方案拉。

解决方案

好,我们开始解决。
一般来说由实体引起的报错,我们只需要删除这个实体就行了。
这段包含了出错实体,也就是用了错误拔刀剑玩家的位置。
如果这些实体不是玩家,我们可以利用MCEdit、创世神、原版kill指令让这些实体GG。

可问题在于,这个是玩家。那怎么办?

我们有2个办法

第一个是删除有关这个玩家的背包信息,
第二个是打开Forge的错误实体自动移除功能。

我们选择第二个对吧,
我们在服务端的config文件夹内找forge.cfg然后打开
并找到如下两行
然后把false改成true并重启服务器即可。
ここに画像を挿入説明
好了,报错修复到此结束。

看懂更多

私は、この崩壊の解決とは何の関係も、についてお話しましょう
あなたが何かもっと知っているように、単純です。
直接地図上に、
ここに画像を挿入説明我々は見ることができます。
システムの詳細は、システムの詳細を意味
し、その後下記
のMinecraftのバージョンのゲーム版
オペレーティングシステムのオペレーティングシステムモデル
のJavaバージョンのJavaバージョン
のJava VMのバージョンJVMバージョン
メモリメモリサイズの
追加パラメータと他のもののJVM JVMフラグを
使用すると、サーバーのにロード内側にして、そこにプラグインをプラグインの名前
だけでなく、FMLの代表フォージのバージョン
以下の表の状態と、あなたは内のサーバーモジュールとモジュールにロードすることで
ライン上の彼自身の英訳。
これは通常、より多くのポイントの語彙を蓄積することをお勧めします。

終了

さて、この記事は終了します。転載は、元の著者の名前とアドレス指定する
CSDN上の元のリリースDinnerboneディナーに骨に紙を。

あなたはあなたを助ける、またはあなたがより多くの知識を知っているようにしている場合、それは良いです。

ここに画像を挿入説明

おすすめ

転載: www.cnblogs.com/Dinnerbone/p/12045117.html