让我们再深入一点...,理解Minecraft崩溃日志还不至于这么难!

您所在的位置:网站首页 我的世界启动器崩溃 让我们再深入一点...,理解Minecraft崩溃日志还不至于这么难!

让我们再深入一点...,理解Minecraft崩溃日志还不至于这么难!

2024-07-12 23:28| 来源: 网络整理| 查看: 265

这是第一篇总结性的修复崩溃的解决方案,以下是第二篇,算是进阶版。

我一直有打算写更深层次的修复崩溃的解决方案(出于版本更新,以及运作方式的更新没错我就是说Fabric的横空出世等缘故),但一提到更深层次,估计也不少人会头疼?不过我会尽可能地给大家解释好的!(那么,不说废话,我们就跳进主题!!!

我对代码并非特别了解w,是积累的经验写出来得啦,如果有什么东西我解释错了,也烦请告知我修改或者在评论区补充喵~

一、日志

查看日志,全英的对吧(,所以想要深入看日志,英语应该得行,能理解意思,而不能完全相信机器翻译给你的意思(也并非不让你去用喵),它们还理解不了我的世界的一些特别的术语。在下面的演示中,为了方便你理解一些崩溃日志里的一些东西,我会附带翻译上去哦~

但是,这并不意味着你不能跳过这个门槛,我们的标题叫做再深入一点,并非让你深入到全英的代码结构去分析的啦!日志本身还突出了一些能让我们发现幕后黑手的痕迹,来让我们看看吧~

(感谢群里的群友上传的一个崩溃日志,这里就拿来用啦w)

---- Minecraft Crash Report ----

// Shall we play a game?

Time: 2022/12/10 下午10:30

Description: Rendering entity in world

(在旧版本中,这个位置还会有Caused by:(导致原因))java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0

at jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) ~[?:?] {re:classloading,re:classloading,re:classloading,re:classloading}

at jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) ~[?:?] {re:classloading,re:classloading,re:classloading,re:classloading}

at jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248) ~[?:?] {re:classloading,re:classloading,re:classloading,re:classloading}

at java.util.Objects.checkIndex(Objects.java:372) ~[?:?] {}

at java.util.ArrayList.get(ArrayList.java:459) ~[?:?] {}

at com.lootbeams.LootBeamRenderer.getRawColor(LootBeamRenderer.java:217) ~[lootbeams:1.16.5-release] {re:classloading}

at com.lootbeams.LootBeamRenderer.getItemColor(LootBeamRenderer.java:191) ~[lootbeams:1.16.5-release] {re:classloading}

at com.lootbeams.LootBeamRenderer.renderLootBeam(LootBeamRenderer.java:54) ~[lootbeams:1.16.5-release] {re:classloading}

at com.lootbeams.ClientSetup.onRenderNameplate(ClientSetup.java:59) ~[lootbeams:1.16.5-release] {re:classloading}

at net.minecraftforge.eventbus.EventBus.doCastFilter(EventBus.java:247) ~[eventbus-4.0.0.jar:?] {}

at net.minecraftforge.eventbus.EventBus.lambda$addListener$11(EventBus.java:239) ~[eventbus-4.0.0.jar:?] {}

at net.minecraftforge.eventbus.EventBus.post(EventBus.java:302) ~[eventbus-4.0.0.jar:?] {}

at net.minecraftforge.eventbus.EventBus.post(EventBus.java:283) ~[eventbus-4.0.0.jar:?] {}

at jdk.internal.reflect.GeneratedMethodAccessor67.invoke(Unknown Source) ~[?:?] {re:classloading,re:classloading,re:classloading,re:classloading,re:classloading,re:classloading,re:classloading,re:classloading}

at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] {re:classloading}

at java.lang.reflect.Method.invoke(Method.java:566) ~[?:?] {}

at net.optifine.reflect.Reflector.call(Reflector.java:1144) ~[?:?] {re:classloading}

at net.optifine.reflect.Reflector.postForgeBusEvent(Reflector.java:1417) ~[?:?] {re:classloading}

at net.minecraft.client.renderer.entity.EntityRenderer.func_225623_a_(EntityRenderer.java:96) ~[?:?] {re:mixin,pl:accesstransformer:B,xf:OptiFine:default,re:classloading,pl:accesstransformer:B,xf:OptiFine:default,pl:mixin:APP:entityculling.mixins.json:EntityRendererMixin,pl:mixin:A}

at net.minecraft.client.renderer.entity.ItemRenderer.func_225623_a_(ItemRenderer.java:124) ~[?:?] {re:classloading,pl:accesstransformer:B,xf:OptiFine:default,xf:fml:itemphysic:renderer}

at net.minecraft.client.renderer.entity.ItemRenderer.func_225623_a_(ItemRenderer.java:18) ~[?:?] {re:classloading,pl:accesstransformer:B,xf:OptiFine:default,xf:fml:itemphysic:renderer}

...[省略]...

at cpw.mods.modlauncher.Launcher.main(Launcher.java:66) [modlauncher-8.1.3.jar:?] {re:classloading}

A detailed walkthrough of the error, its code path and all known details is as follows:

(以下是对该错误、其代码路径以及所有已知细节的详细清单:)

---------------------------------------------------------------------------------------

-- Head --

Thread: Render thread

Stacktrace:

at jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) ~[?:?] {re:classloading,re:classloading,re:classloading,re:classloading,re:classloading}

at jdk.internal.util.Preconditions.outOfBoundsCheckIndex(Preconditions.java:70) ~[?:?] {re:classloading,re:classloading,re:classloading,re:classloading,re:classloading}

...[省略]...

at net.minecraft.client.renderer.entity.ItemRenderer.func_225623_a_(ItemRenderer.java:18) ~[?:?] {re:classloading,pl:accesstransformer:B,xf:OptiFine:default,xf:fml:itemphysic:renderer}

-- Entity being rendered --

Details:

Entity Type: minecraft:item (net.minecraft.entity.item.ItemEntity)

Entity ID: 85

Entity Name: item.tetra.modular_double

Entity's Exact location: 454.34, 104.69, 3882.46

Entity's Block location: World: (454,104,3882), Chunk: (at 6,6,10 in 28,242; contains blocks 448,0,3872 to 463,255,3887), Region: (0,7; contains chunks 0,224 to 31,255, blocks 0,0,3584 to 511,255,4095)

Entity's Momentum: -0.29, -0.05, -0.01

Entity's Passengers: []

Entity's Vehicle: ~~ERROR~~ NullPointerException: null

-- Renderer details --

Details:

Assigned renderer: net.minecraft.client.renderer.entity.ItemRenderer@6e8f1e

...[省略]...

nui-forge.json:AccessGameRenderer,pl:mixin:A}

-- Affected level --

Details:

All players: 1 total; [ClientPlayerEntity['LaoYi'/82, l='ClientLevel', x=454.34, y=103.38, z=3882.46]]

Chunk stats: Client Chunk Cache: 5041, 121

...[省略]...

Server type: Integrated singleplayer server

Stacktrace:

at net.minecraft.client.world.ClientWorld.func_72914_a(ClientWorld.java:617) ~[?:?] {re:mixin,pl:accesstransformer:B,xf:OptiFine:default,xf:fml:xaerominimap:xaero_clientworldclass,xf:fml:xaeroworldmap:xaero_wm_clientworldclass,re:classloading,pl:accesstransformer:B,xf:OptiFine:default,xf:fml:xaerominimap:xaero_clientworldclass,xf:fml:xaeroworldmap:xaero_wm_clientworldclass,pl:mixin:APP

...[省略]...

at cpw.mods.modlauncher.Launcher.main(Launcher.java:66) [modlauncher-8.1.3.jar:?] {re:classloading}

-- System Details --

Details:

Minecraft Version: 1.16.5

Minecraft Version ID: 1.16.5

...[省略]...

[email protected]

Mod List: 

...[省略]...

ReAuth-1.16-Forge-3.9.3.jar                       |ReAuth                        |reauth                        |3.9.3               |DONE      |Manifest: 3d:06:1e:e5:da:e2:ff:ae:04:00:be:45:5b:ff:fd:70:65:00:67:0b:33:87:a6:5f:af:20:3c:b6:a1:35:ca:7e

farmersdelightintegrations-1.16.5-1.2.jar         |Farmer's Delight Compats      |farmersdelightintegrations    |1.16.5-1.2          |DONE      |Manifest: NOSIGNATURE

YungsApi-1.16.4-Forge-13.jar                      |YUNG's API                    |yungsapi                      |1.16.4-Forge-13     |DONE      |Manifest: NOSIGNATURE

armorcurve-2.4.jar                                |Armor Curve                   |armorcurve                    |2.4                 |DONE      |Manifest: NOSIGNATURE

lootbeams-1.16.5-release-aug2021.jar              |LootBeams                     |lootbeams                     |1.16.5              |DONE      |Manifest: NOSIGNATURE

randompatches-2.4.4-forge.jar                     |RandomPatches                 |randompatches                 |2.4.4-forge         |DONE      |Manifest: 92:f6:29:d4:09:89:f5:f5:98:5e:20:34:31:d0:7b:58:22:06:bd:a5:d1:6a:92:6e:ac:3d:8d:18:c5:b2:5b:d7

...[省略]...

enhancedcelestials-2.0.9-1.16.5.jar               |Enhanced Celestials           |enhancedcelestials            |2.0.9-1.16.5        |DONE      |Manifest: NOSIGNATURE

drinkbeer-1.16.5-2.3.5.jar                        |Drink Beer                    |drinkbeer                     |2.3.5               |DONE      |Manifest: NOSIGNATURE

Crash Report UUID: 51bf9b44-64df-46ea-a46e-ef4f0925b633

RoadRunner != Lithium: This instance was launched using RoadRunner, which is an *unofficial* Lithium fork! Please **do not** report bugs to them!

...[省略]...

Mipmaps: 4

Anisotropic Filtering: 1

Antialiasing: 0

Multitexture: false

Shaders: B-籽岷同款光影.zip

OpenGlVersion: 4.6.0 NVIDIA 516.94

OpenGlRenderer: NVIDIA GeForce RTX 3080/PCIe/SSE2

OpenGlVendor: NVIDIA Corporation

CpuCount: 16

[原文件无配色,为方便理解调节了字体颜色]

[为减少篇幅删减了部分内容]

较低版本的日志,还会带我上一篇文章提到的表格,可是到了高版本,它没有特别提示哪个模组出问题啦(或者很难看出)!很令人生气对吧w。不过也不要以为线索就只存在于那个表格哦,出错的模组还以新的面貌出现在另一个地方......

以这篇崩溃日志为例,我们如何快速找到出错的模组?

我们可以看到Description(描述)说明Rendering entity in world(渲染世界中的实体),导致原因是java.lang.IndexOutOfBoundsException(索引越界),什么鬼?!不懂啊!这两个部分并没有相关模组弹出来告诉你。不过这么长的报告,肯定不止报告了这个让人云里雾里的崩溃原因,对吧?

嗯,来让我们看看Description下方的语句,在这一部分中我们可以看到由以下格式组成的语句

at(代码在以下位置出错) XXX.XXX.XXX.XXX..... (XXX.java:XXX) {XXX:XXX} [XXX:XXX]

在哪里出错?那我知道错误出在哪里不就能判断是谁参与了这次崩溃了吗?

√,本篇总结,就围绕一个主题:从其它地方找到错误出在哪,然后再去处理它~

你还能在本篇文章得知,一个崩溃的引起原因和解决崩溃的方法不止一种你还能删掉MC来不让它崩溃对吧(。

二、寻找位置位置一(简单难度)

让我们先快速锁敌,我们可以在语句后面的[XXX:XXX]找到冒号前面的XXX,这是出现问题的文件。

(你有可能找不到[],如果你的崩溃日志确实没有[],你也应该接着看起码看看这部分后面我提到的Modid和模组列表的东西,在下面会提到w)

在这篇报告中,除了问号(意为未知)外,我们可以找到

lootbeams、eventbus、modlauncher

这三样东西,如果你记得你加过什么模组的话,你就会知道有一个名称跟你添加过的模组名称很相似,Loot Beams,战利品光束模组,它参与了这次崩溃。

那另外两个是什么呢,是游戏本体或运作方式的东西,它们确确实实参与了这次崩溃的代码运行,但更多的是,并不会是游戏本体主动让你游戏崩溃的,而是在它们按部就班地处理着它们的事情的时候,模组尝试让它们帮忙,自己失误了,让正常运行的代码受到连累,被崩溃日志认为是凶手的一个起码是帮凶对吧,一起作为呈堂证供啦!(也有可能是失误惹别的代码生气)

总之,Loot Beams作为一个主打渲染物品掉落的光束效果的模组,嫌疑已经大到可以确认是它的锅了。这时,一条解决崩溃的思路出现了:我们可以选择将它删掉,或者检查是否有新版本修复了,或者询问作者~

但有的时候你也可能不知道你加了什么模组,也压根不知道游戏本体会有什么东西,你可能需要将它们都挑出来唔w

提一句,模组如果在这个位置一或者下面提到的位置二被记录下来,一般会以Modid的形式出现。

挑出来之后你可以到整篇崩溃报告最下面的位置,找到排列好的模组列表,这模组列表一般都会带上所有模组的Modid(而不会带上游戏本体或运作方式的东西有你也大多对不上),再找到这个模组。然后对应到模组,去你的模组文件夹里找有没有这个模组~

这是两个主流版本(Forge和Fabric)的模组列表格式~

这种模组列表在不同版本、不同运作方式都不相同,但Modid都会在模组列表里。这里列举几种形式。

位置二(普通难度)

看到at后面我还标注了三个颜色的,用点号 “. ” 分开的地方了吗,就是接下来我要讲的部分啦

在这个位置,我们找到了更多的东西... ...让我们来看看~

internal、util、lootbeams、minecraftforge、lang、optifine、minecraft

我们除了之前找到的lootbeams,还看到forge、minecraft......你就说它们算不算这次崩溃的参与者嘛。是吧w 但你也清楚问题很少可能出现在它们身上(。再者你总也不能把它们删了去吧((((((

在这里,我们还能找到internal(内部)、util(工具)、lang(语言),可以想一想,这三个应该是游戏内的东西,怎么也不会是问题的根源。

我们还可以知道Optifine,Optifine确实跟渲染有关,所以也有可能是它的问题,有没有可能会是Optifine在处理Loot Beams模组的光束时出了冲突?

注意下喵!at后面的一般是崩溃中执行出错代码的所属部分

这一长串部分相当于我们计算机系统的文件路径,点号相当于斜杠/

因此像每个人并非按照统一的标准放自己的文件夹一样,Modid所在的位置也不一定在第二个

标注出来的三种颜色的位置中都可能是写下Modid的位置

其中第二个和第三个位置最有可能

例如me.pepperbell.continuity

只要你仔细看,有的时候作者名字会放在第二个位置,而continuity这个Modid被放到了第三个位置......

回到正题喵,在这个位置,我们找到了比位置一更多的一个崩溃原因可能,这居然给了我们的解决崩溃问题的尝试多了一条更好的!我们可以尝试先暂时禁用Optifine,让它先不要渲染物品光束进入一次存档查看是否能规避了这个问题。这不比直接删掉我心爱的模组好多啦?

位置三:(高级难度)

Description的意思,应该是在渲染世界上的某个实体除了问题...那我找到这个实体把它删掉不就好了?

没错啦~你甚至可以在-- Entity being rendered(被渲染的实体) --找到被渲染出错的实体——

Entity Name(实体名称:): item.tetra.modular_double

如果把这个实体删掉,那不也一样能不让这个崩溃发生了!新的思路!呜呼!

这个思路只会出现在少部分崩溃,并不适用所有,一般看情况而定,你也应该看看A detailed walkthrough of the error, its code path and all known details is as follows:下面有没有特别的东西,再结合描述里提到的思考哦~

至于如何处理这类特别的实体出错崩溃,到时我会有一篇特别的疑难杂症发出来,已经搓好一部分稿子了,到时候见~

三、解决方案

在以上的例子,解决方案有三种思路呢,好耶!

事实上,这个崩溃是通过第一个方案修复的,第二个方案是推理出来的一个结果,能不能实现还需要实机考证,第三个方案需要其它工具,复杂程度肯定比前两种高只是相比,它本身操作起来对我来讲不是特别困难w。

如果我们只需不要崩溃,又可以不需要这个Loot Beams模组,直接删掉,那是最快的。

但如果你想保留自己心爱的模组,第二种第三种方案都值得去做,不是喵呜?

所以内,在选择解决方案之前,需要看的全面,并结合自己的需求,同时还可能需要尝试不同方案能不能实现,这样就能解决崩溃啦喵~

话外

好耶终于写完了(

现在已经重新接受我的世界崩溃解决请求啦~

如果你看到了这里,你已经能找到大部分高版本的游戏崩溃幕后黑手啦,并且能尝试分析得到更多的崩溃解决思路啦!

如果你仍然看不懂,你还可以到评论区下方留言,我还能努力尝试修改一下表述喵!

记得...点赞哦~投币你看着就好,不投也没关系喵w~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3