您的当前位置:首 页 >> 信息中心

怎么查看文件的详细位置在哪,如何查看MC的崩溃报告(1)

发布日期:2021-11-29 16:00:24 作者: 点击:

Minecraft是个很玄学的游戏,就算你什么模组也不加,玩个原版都有可能崩溃,无非是比有模组时少一点罢了。

正如酒石酸所说:发生崩溃时如果找不到崩溃报告,就说“我崩溃了怎么办”,还不如上街找个算命先生算算为什么崩溃好些,那么在哪里找它们呢?

打开你的MC安装目录(一般为.minecraft文件夹,部分整合包的根目录与整合包同名,比如all the mods,但无论名字有什么不同,它都是mods和saves的所在),找到crash-report文件夹,将内部日期最新(即为你最近的一个崩溃报告)的文件,用记事本或者notepad++打开,就可以看到崩溃信息了。

(一个崩溃报告文件夹的长相)

现在我们随便找一个崩溃报告来看看它的结构。

http://paste.ubuntu.com/25672422/

第28行以前“coremods are present”都是废话——1.10以后非常多的崩溃报告里都有这些,莫非十几个coremod(核心模组)每次都爆炸?

重要信息在31行之后,我们挨个读:

description:rendering item

翻译过来是“故障描述:渲染物品”,但是,渲染的是哪个物品?

java.lang.ClassCastException: net.minecraft.item.ItemAir cannot be cast to net.minecraft.item.ItemBlock 

at twilightforest.block.ColorHandler.lambda$init$13(ColorHandler.java:266) 

接下来两行的内容:java.lang.class cast exception——这是java.lang包的class(类)cast exception(抛出异常),Java虚拟机这家伙对异常一向没什么责任感,然后就死给你看喽。

net.minecraft.item.itemAir——net作为最上级的目录,含义并不重要;minecraft就是MC本体了,item代指物品,itemAir代表空气——MC的空格并不是什么都没有,而是一个叫空气的物品取代了那里,同样,在MC的天空中也不是什么都没有,而是“空气方块”。

cannot cast to xxx:不能变成……什么呢?

net.minecraft.item.itemBlock:结构和上面那个itemair一样,不过是“不能变成一个方块(block)物品(item)”——block本身也是一种item,只不过是一个能够被玩家右键放在世界中还有碰撞箱的item。

(有意向者可以读一读Java的书籍以了解Java文件的结构,比如Head First Java,此书行文排图优美,译者帅气逼人,是不可多得的好书)

连起来读就是:“一个空气物品(在玩家物品栏中)转变为某个方块时,java.lang包抛出异常。”

java.lang是Java之下最基础的包之一,难道这玩意还坏了?当然不是,让我们看下一行。

at twilightforest.block.xxx——看到这里其实应该松一口气,因为twilight forest就是暮色森林啦,在这儿基本就可以确定是暮色崩溃了。当然我们也不能把暮色一删了事,看看能不能抢救呢?

twilightforest.block.ColorHandler.lambda$init$13(ColorHandler.java:266) 

我们可以结合暮色的GitHub代码来看这一条:

https://github.com/TeamTwilight/twilightforest/tree/1.12.x/src/main/java/twilightforest/block

看到了吗?崩溃报告的原句是twilightforest.block,代表崩溃发生在twilightforest下面的block文件夹,与上面的GitHub代码地址形成对应。

不难看出,如崩溃语句中所说,代码中blocks文件夹下面确实有一个colorhandler类(.java文件,编译之后就变成.class扩展名了),它的下面“lambda$init$13”,代表这个类的源码中,一个lambda运算符出现了问题。

问题是发现了,但是如何解决呢?答:解决不了,除非我们是搞开发的——你知道lambda出现在哪里?只能在GitHub页面向作者发issue(问题),希望作者大发慈悲将其修复。

让我们继续往下看第36,37行:

at mod.chiselsandbits.render.helpers.ModelUtil.getItemStackColor(ModelUtil.java:466) 

at mod.chiselsandbits.client.ItemColorPatterns.func_186726_a(ItemColorPatterns.java:28)

at就是在,“在哪哪哪”;mod.chiselandbits.xxx代表一个叫chisel and bits(雕刻工艺)的mod发生了异常;cilent代表客户端,render代表渲染器——是雕刻工艺的渲染机制出现了问题?

这要问你当时在干什么了,很多涉及到这种装饰类模组的崩溃,都是当事人在雕刻/打开箱子/打开某个机器的GUI时出现的渲染错误,而这个崩溃发生时,其实我并没有在雕刻什么东西,所以可以排除。

38行之后:

net.minecraft.client.renderer.xxx——MC本身的渲染器;

codechicken.lib.render.xxx——codechickenlib(CCL)的渲染器;

net.minecraft.client.gui.xxx——MC的GUI渲染;

net.minecraftforge.client.xxx——forge的客户端;

sun.reflect.xxx——sun公司为Java写的反射机制;

接下来还有几个便不一一列举,但是它们都有一个共同点:都是MC,forge甚至Java基本的东西,基本的东西是很难出错,也很难去进行修复的——这代表着代码的大幅变动,所以,它们抛出的异常其实是下游(暮色和雕刻工艺这样负责实现的mod)出错时扔给它们的,然而它们也没法解决,继续抛出到Java虚拟机,然后Java虚拟机破罐子破摔崩溃了。

73行以后:stacktrace(异常栈轨迹)里面的信息与先前的基本一样,没啥可看。

121行:affected level(影响)

主要是第129行所代表的内容level spawn location:代表着崩溃发生的具体位置和区块,无法修复时可以用worldedit(创世神插件),MCEdit,NBTExplorer之类编辑器删除掉这一方块/区块。

World: (-28,64,256), (玩家所在点-28,64,256)

Chunk: (at 4,4,0 in -2,16; contains blocks -32,0,256 to -17,255,271), (区块-2,16,区块内部坐标4,4,0,包括了-32,0,256到-17,255,271坐标的方块)

Region: (-1,0; contains chunks -32,0 to -1,31, blocks -512,0,0 to -1,255,511)(区域:包括了-32,0到-1,31这一大片区块,没啥用处)

151行system details之后是你的系统详情,包括你的系统,Java版本,内存,安装了哪些模组等等。

Minecraft Version: 1.11.2 (MC版本1.11.2)

Operating System: Windows 10 (amd64) version 10.0(操作系统Windows 10 64位,一般与MC的崩溃没有关系,以后问崩溃的时候不用说你是哪个系统)

Java Version: 1.8.0_144, Oracle Corporation(Java版本:1.8.0_144,目前的最新版本,如果是Java 1.8.0_60,25甚至是Java 7这样的旧版本请更新)

Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle CorporationMemory: 594339048 bytes (566 MB) / 2823290880 bytes (2692 MB) up to 5324144640 bytes (5077 MB) 

(当前内存占用,最大可以有5077MB)

JVM Flags: 5 total; -XX:+UseParallelGC -XX:-UseGCOverheadLimit -XX:-OmitStackTraceInFastThrow -Xmn128m -Xmx5120m(Java虚拟机参数,一般都是默认参数启动的,不需要担心)

UCHIJAAAA——仅代表该模组加载正确,如果加载不正确就是UE/UCE形式。

接下来都是废话,不用看。

以上就是对一个一般的崩溃报告描述,肯定有不全甚至错漏的地方,欢迎大家提出,我会后续更新修正。