Minecraft | 初步学会阅读错误日志 | 亡灵战争特供

[变废为宝]初步学会阅读错误日志

本文档将(试图)教会你如何从Minecraft的错误日志(即crash-report)中提取关键信息并尝试解决问题。推荐熟悉计算机基本操作、Minecraft基本文件结构的玩家阅读。推荐熟悉计算机基本操作、Minecraft基本文件结构的玩家阅读。

一崩溃就重启”的办法注定无法解决根本问题。显然绝大多数人面对Minecraft错误日志中一长串的英文都会心累,但要想解决问题就至少要初步学会读(真几把恶心的)错误日志。这便是本文档的目的所在。当然,本人才疏学浅,如果有疏漏之处,欢迎指正。
(也许你看完还是一头雾水,但我相信你还是能懂一点的~~)
——MF
请注意:加红色的部分为重点,加粗的部分需要特别注意!(括号+删除线的部分为调侃)


第一部分 错误日志的基本结构和样例分析
错误日志会生成在游戏主目录\.minecraft\crash-reports文件夹里,你需要分析的便是修改日期最晚的一份报告。
这里举一份亡灵战争弥赛亚正式版客户端1.2.9的错误日志的例子,以便让你熟悉Minecraft错误日志的基本结构。
---- Minecraft Crash Report ----
// Shall we play a game?
Time: 22-7-30 上午12:07
Description: Ticking entity
java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.remove(Unknown Source)
at net.minecraft.entity.EntityLivingBase.func_70679_bo(EntityLivingBase.java:528)
at net.minecraft.entity.EntityLivingBase.func_70030_z(EntityLivingBase.java:293)
at net.minecraft.entity.EntityLiving.func_70030_z(EntityLiving.java:214)
at net.minecraft.entity.Entity.func_70071_h_(Entity.java:318)
at net.minecraft.entity.EntityLivingBase.func_70071_h_(EntityLivingBase.java:1561)
at net.minecraft.entity.EntityLiving.func_70071_h_(EntityLiving.java:272)
at noppes.npcs.entity.EntityNPCInterface.func_70071_h_(EntityNPCInterface.java:223)
at noppes.npcs.entity.EntityCustomNpc.func_70071_h_(EntityCustomNpc.java:38)
at net.minecraft.world.World.func_72866_a(World.java:2070)
at net.minecraft.world.WorldServer.func_72866_a(WorldServer.java:648)
at net.minecraft.world.World.func_72870_g(World.java:2034)
at WorldServerOF.func_72870_g(WorldServerOF.java:347)
at net.minecraft.world.World.func_72939_s(World.java:1887)
at net.minecraft.world.WorldServer.func_72939_s(WorldServer.java:489)
at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:636)
at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:547)
at net.minecraft.server.integrated.IntegratedServer.func_71217_p(IntegratedServer.java:186)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:396)
at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:685)

这是错误日志最开始对发生错误的原因进行描述的部分。你需要特别注意的是日志中加红色的内容,分别是报告对问题的粗略描述(Description后的部分)和发生的报错(java.lang.XXXException:XXX)。至于BugJang的调侃、发生错误的时间显然(不)可以忽略。下方的一长串at XXX则被称为栈帧,相当于调用链,最后被调用的部分(也就是出错的部分)会被错误日志放在最上方,第一个是最开始抛出异常的栈帧,最后一个是最后抛出异常的栈帧(这一部分如果看不懂可以忽略)。不过如果你能找出被调用且出错的模组/minecraft核心jar文件,用压缩软件打开后,你会发现这些栈帧的排列顺序事实上与被调用的jar的内部文件结构相同。如果栈帧中出现了Caused by: XXX,则这也是关键的报错。栈帧中往往会流露出报错的细节或者导致错误发生的原因,为解决问题提供参考。
本样例中,可以确定发生了实体出错(Ticking Entity)的问题,报错则为java.util.ConcurrentModificationException,根据下文的at java.util.HashMap$HashIterator.remove(Unknown Source)可以知道是HashMap在遍历并删除元素时出错(如果看不懂可以忽略),已经可以确定发生的是什么类型的问题(以及可能的解决方法),但为了保险起见我们继续往下看。
A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------
-- Head --
Stacktrace:
at java.util.HashMap$HashIterator.remove(Unknown Source)
at net.minecraft.entity.EntityLivingBase.func_70679_bo(EntityLivingBase.java:528)
at net.minecraft.entity.EntityLivingBase.func_70030_z(EntityLivingBase.java:293)
at net.minecraft.entity.EntityLiving.func_70030_z(EntityLiving.java:214)
at net.minecraft.entity.Entity.func_70071_h_(Entity.java:318)
at net.minecraft.entity.EntityLivingBase.func_70071_h_(EntityLivingBase.java:1561)
at net.minecraft.entity.EntityLiving.func_70071_h_(EntityLiving.java:272)
at noppes.npcs.entity.EntityNPCInterface.func_70071_h_(EntityNPCInterface.java:223)
at noppes.npcs.entity.EntityCustomNpc.func_70071_h_(EntityCustomNpc.java:38)
at net.minecraft.world.World.func_72866_a(World.java:2070)
at net.minecraft.world.WorldServer.func_72866_a(WorldServer.java:648)
at net.minecraft.world.World.func_72870_g(World.java:2034)
at WorldServerOF.func_72870_g(WorldServerOF.java:347)
at net.minecraft.world.World.func_72939_s(World.java:1887)
-- Entity being ticked --
Details:
Entity Type: customnpcs.CustomNpc (noppes.npcs.entity.EntityCustomNpc)
Entity ID: 19068
Entity Name: 被俘虏的士兵
Entity's Exact location: -2503.03, 174.00, -359.42
Entity's Block location: World: (-2504,174,-360), Chunk: (at 8,10,8 in -157,-23; contains blocks -2512,0,-368 to -2497,255,-353), Region: (-5,-1; contains chunks -160,-32 to -129,-1, blocks -2560,0,-512 to -2049,255,-1)
Entity's Momentum: -0.38, 0.40, -0.08
Stacktrace:
at net.minecraft.world.WorldServer.func_72939_s(WorldServer.java:489)
at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:636)
-- Affected level --
Details:
Level name: §3§l亡灵战争·弥赛亚 §w正式版V1.2.9
All players: 1 total; [EntityPlayerMP['daqin_6666'/912, l='§3§l亡灵战争·弥赛亚 §w正式版V1.2.9', x=-2490.81, y=176.36, z=-357.42]]
Chunk stats: ServerChunkCache: 1372 Drop: 0
Level seed: 999
Level generator: ID 00 - default, ver 1. Features enabled: true
Level generator options:
Level spawn location: World: (-1936,23,40), Chunk: (at 0,1,8 in -121,2; contains blocks -1936,0,32 to -1921,255,47), Region: (-4,0; contains chunks -128,0 to -97,31, blocks -2048,0,0 to -1537,255,511)
Level time: 94637899 game time, 60000 day time
Level dimension: 0
Level storage version: 0x04ABD - Anvil
Level weather: Rain time: 65932 (now: false), thunder time: 31954 (now: false)
Level game mode: Game mode: survival (ID 0). Hardcore: false. Cheats: true
Stacktrace:
at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:547)
at net.minecraft.server.integrated.IntegratedServer.func_71217_p(IntegratedServer.java:186)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:396)
at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:685)

这一部分是错误日志对出错部分的较为详细的描述,分别包含了头部(Head)所调用的栈帧、出错部分的细节、发生错误的存档的细节,以及相应的被调用的栈帧。如果已经确定了问题,则这部分一般可以忽略。
本样例中,我们可以发现出错的是自定义NPC mod(CustomNPCs)的实体,且可以确定其名称为“被俘虏的士兵”,出错原因为“Entity being ticked””,根据经验推断可以知道这个问题是由于药水核心(Potion Core)或者RC’sEffect’的药水效果与原版的药水效果相冲突导致的;同时发生错误的存档为“§3§l亡灵战争·弥赛亚 §w正式版V1.2.9”,也就是亡灵战争·弥赛亚标准版1.2.9的主存档。
-- System Details --
Details:
Minecraft Version: 1.7.10
Operating System: Windows 10 (amd64) version 10.0
Java Version: 1.8.0_131, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 4158115688 bytes (3965 MB) / 6075449344 bytes (5794 MB) up to 13314818048 bytes (12698 MB)
JVM Flags: 6 total; -XX:+UseG1GC -XX:-UseAdaptiveSizePolicy -XX:-OmitStackTraceInFastThrow -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xmn256m -Xmx12697m
AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
IntCache: cache: 0, tcache: 0, allocated: 13, tallocated: 95
FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.4.1558 Optifine OptiFine_1.7.10_HD_U_E7 40 mods loaded, 40 mods active
States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
UCHIJAAAAAAAAA mcp{9.05} [Minecraft Coder Pack] (minecraft.jar)
UCHIJAAAAAAAAA FML{7.10.99.99} [Forge Mod Loader] (forge-1.7.10-10.13.4.1558-1.7.10.jar)
UCHIJAAAAAAAAA Forge{10.13.4.1558} [Minecraft Forge] (forge-1.7.10-10.13.4.1558-1.7.10.jar)
UCHIJAAAAAAAAA CodeChickenCore{1.0.7.47} [CodeChicken Core] (minecraft.jar)
UCHIJAAAAAAAAA smoothfontcore{1.7.10-1.15.1} [Smooth Font Core] (minecraft.jar)
UCHIJAAAAAAAAA xaerominimap_core{1.7.10-1.0} [XaeroMinimapCore] (minecraft.jar)
UCHIJAAAAAAAAA InputFix{1.7.10-v5} [InputFix] (minecraft.jar)
UCHIJAAAAAAAAA splan{2.65-1.7.10} [Server Properties for LAN] (minecraft.jar)
UCHIJAAAAAAAAA FastCraft{1.25} [FastCraft] ([迅速工艺]fastcraft-1.25.jar)
UCHIJAAAAAAAAA smoothfont{1.7.10-1.15.3} [Smooth Font] (SmoothFont-1.7.10-1.15.3.jar)
UCHIJAAAAAAAAA rcseffect{NEO-Special} [RCsEffect] (RC`s Effect Mod NEO-Special.jar)
UCHIJAAAAAAAAA rcecustomitem{Beta 1.0} [RCE Extend:Custom Items] ([RCE附属]自定义物品-亡灵战争Only.jar)
UCHIJAAAAAAAAA customnpcs{1.2.1} [CustomNpcs] ([亡灵战争Only]CustomNPC-Plus-1.22.jar)
UCHIJAAAAAAAAA AencEx{0.0.1} [AencEx] ([更多附魔1]MoreEnchantments-1.7.10-1.3.2.1.jar)
UCHIJAAAAAAAAA me{1.3.2.1} [More Enchantments] ([更多附魔1]MoreEnchantments-1.7.10-1.3.2.1.jar)
UCHIJAAAAAAAAA MoreEnchants{1.3.0} [MoreEnchants] ([更多附魔]MoreEnchants-MC1.7-1.3.1.jar)
UCHIJAAAAAAAAA Stacksize{1.0} [Stacksize Mod] ([重置堆放数量]stacksize-1.7.10-1.2.jar)
UCHIJAAAAAAAAA chunkpregenerator{2.1} [Chunk Pregenerator] (Chunk+Pregenerator+V1.7.10-2.1.jar)
UCHIJAAAAAAAAA CompatibilityLayerForCustomSkinLoader{ALPHA-7} [CompatibilityLayerForCustomSkinLoader] (CompatibilityLayerForCustomSkinLoader-ALPHA-7.jar)
UCHIJAAAAAAAAA creativecore{1.3.14} [CreativeCore] (CreativeCore v1.3.24 mc1.7.10.jar)
UCHIJAAAAAAAAA CustomMainMenu{1.8} [Custom Main Menu] (CustomMainMenu-MC1.7.10-1.8.jar)
UCHIJAAAAAAAAA flansmod{@VERSION@} [Flan's Mod Ultimate] (FlansModPlusUltimate1.1-1.7.10.jar)
UCHIJAAAAAAAAA inventorytweaks{1.59-dev-152-cf6e263} [Inventory Tweaks] (InventoryTweaks-1.59-dev-152.jar)
UCHIJAAAAAAAAA moreevent-key{1.0} [KeyEvent Mod] (KeyEvent-1.5.jar)
UCHIJAAAAAAAAA MoreBows2{1.1} [More Bows 2] (MoreBows2-1.1【IcyCrystal汉化】.jar)
UCHIJAAAAAAAAA opframe{0.1} [OnlinePictureFrame] (OnlinePicFrame+v1.0+mc1.7.10.jar)
UCHIJAAAAAAAAA squidless{0.6.1} [Squidless] (squidless-1.7.10-0.6.1.jar)
UCHIJAAAAAAAAA XaeroMinimap{21.10.27} [Xaero's Minimap] (Xaeros_Minimap_21.10.27_Forge_1.7.10.jar)
UCHIJAAAAAAAAA DamageIndicatorsMod{3.2.0} [Damage Indicators] (【1.7.10伤害与血量显示mcmap.cc】DamageIndicators++v3.2.0 (1).jar)
UCHIJAAAAAAAAA MSM3{3.0.0a} [More Swords 3] (【更多剑】MSM-SNAP-3.0.0b-For-MC-1.7.10.jar)
UCHIJAAAAAAAAA Backpack{2.0.1} [Backpack] (【更多背包】backpack-2.0.1-1.7.x.jar)
UCHIJAAAAAAAAA PTRModelLib{1.0.0} [PTRModelLib] (【装饰工艺品】2.4.2_1.7.10.jar)
UCHIJAAAAAAAAA props{2.4.2} [Decocraft] (【装饰工艺品】2.4.2_1.7.10.jar)
UCHIJAAAAAAAAA chisel{2.9.5.11} [Chisel] (凿子-2.9.5.11.jar)
UCHIJAAAAAAAAA wolffsmod{1.0} [Wolff's NPCs] (坦克模型-vehicles-for-custom-npcs-1-1b.zip)
UCHIJAAAAAAAAA malisiscore{1.7.10-0.14.3} [MalisisCore] (更多门附属-1.7.10-0.14.3.jar)
UCHIJAAAAAAAAA malisisdoors{1.7.10-1.13.2} [Malisis' Doors] (更多门-1.7.10-1.13.2.jar)
UCHIJAAAAAAAAA CarpentersBlocks{3.3.8.2} [Carpenter's Blocks] (木匠方块v3.3.8.2_MC_1.7.10.jar)
UCHIJAAAAAAAAA potioncore{@VERSION@} [Potion Core] (药水核心[修改].jar)
UCHIJAAAAAAAAA bspkrsCore{6.16} [bspkrsCore] ([1.7.10]bspkrsCore-universal-6.16.jar)
Chisel: Errors like "[FML]: Unable to lookup ..." are NOT the cause of this crash. You can safely ignore these errors. And update forge while you're at it.
Profiler Position: N/A (disabled)
Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
Player Count: 1 / 10; [EntityPlayerMP['daqin_6666'/912, l='§3§l亡灵战争·弥赛亚 §w正式版V1.2.9', x=-2490.81, y=176.36, z=-357.42]]
Type: Integrated Server (map_client.txt)
Is Modded: Definitely; Client brand changed to 'fml,forge'
OptiFine Version: OptiFine_1.7.10_HD_U_E7
Render Distance Chunks: 16
Mipmaps: 4
Anisotropic Filtering: 1
Antialiasing: 0
Multitexture: false
Shaders: null
OpenGlVersion: 4.6.0 NVIDIA 516.59
OpenGlRenderer: NVIDIA GeForce RTX 3080 Ti Laptop GPU/PCIe/SSE2
OpenGlVendor: NVIDIA Corporation
CpuCount: 20

这一部分是错误日志对系统信息和Minecraft模组加载情况的描述,如使用的jre版本、启动的游戏版本、基本配置信息等(一般可以忽略)。之后的一长串UCHIJA及后面的内容是模组加载情况,如果在启动过程中崩溃,建议仔细检查这一部分的内容,正常加载的模组前方的标识不会含有字母E(如果一切正常,则启动完毕后的标识是UCHIJA,A可能有多个),而出错的模组前方的标识一定会含有字母E。
注释:
'U' = Unloaded 未加载
'L' = Loaded已加载
'C' = Constructed 已构建
'H' = Pre-initialized 预初始化
'I' = Initialized 已初始化
'J' = Post-initialized 后初始化
'A' = Available 已可用
'D' = Disabled 禁用
'E' = Errored 错误
本样例中模组加载没有出错,故此部分可以忽略。

第二部分 通过报错寻找解决方法和样例解决
通过分析错误报告,我们可以知道发生的报错是什么。但是知道问题还不够,如果要解决问题,则需要寻找对应的解决方法。
不会(懒得)自己解决问题的玩家:
1.到mcbbs(我的世界中文论坛)的mod问答版提问(记住一定要上传错误日志)
2.亡灵战争官方交流一群里寻找热心市民或者常见问题解答(仅针对标题所示地图)
想自己解决问题的玩家:
1. 去百度搜索(请尽可能参考mcbbs或mcmod或github之类比较权威的网站的搜索结果)发生的报错(即java.lang.XXXException:XXX或Description:后的内容),但一定要加上与我的世界有关的内容(否则会有一大堆Java编程出错的解决方法)
搜索引擎:谷歌>必应>百度
来自David_Black的吐槽
2.根据报错的类型、错误日志最开头对问题的描述,以及抛出异常的栈帧和细节描述中流露出来的关键信息结合个人经验进行推断(废话)。如果是mod出错则可以尝试更新mod版本、回退mod版本或删除mod等。请务必事先阅读mod在mcmod或mcbbs上的说明和用户的评论!!!
在此样例中,这是由于实体的药水效果矛盾而导致的崩溃,而且去除矛盾的药水效果并不具有可操作性,因此比较适合的解决方法就是删除错误实体然后重新进入存档。
1.使用mcedit/amulet打开存档,然后删除错误实体;
2.利用forge自带的功能,到.minecraft\config\forge.cfg里把removeErroringEntities的选项由false改成true。
一部分常见的崩溃原因及其相应的解决方法也已加入到亡灵战争常见问题解决方案4.0中,如有需要请自行查阅。

尾声:
错误日志的分析是一个经验积累的过程,并不是一蹴而就的,优秀的分析者也是从零开始一步步走上来的。本文档的目的仅仅只是为了让你初步掌握错误日志的基本结构、以及最基本的分析方法,初步学会提取关键信息。
如果这篇文档有一句话能帮到你,我就已经成功了。
祝各位尽可能避免遇到崩溃而(被迫)打开此文档~~
——MF(文档作者,制作组成员)
David_Black(屁也不是)

