怎么看崩溃日志(入门) 您所在的位置:网站首页 压缩错误报告怎么办 怎么看崩溃日志(入门)

怎么看崩溃日志(入门)

2023-11-08 09:47| 来源: 网络整理| 查看: 265

总有人问我怎么看崩溃日志,这里我简单讲一下。

日志(崩溃日志、崩溃报告、log、crash-report),是诊断问题的主要途径。

(严格来讲,崩溃报告和日志不一样,但这里我就不做区分了,因为它们在崩溃的时候几乎完全一样,不崩溃的时候都没什么人看。)

看日志有三步:

看报错类型,看看是不是内存不足之类的

看堆栈,找是哪个mod

看游戏当前状态,合理分析

当然,这只是给新手做的划分。像我实际看的时候,都是凭感觉随便翻翻就行。熟练之后你也可以。

图1,崩溃报告核心部分

上图是日志的核心部分举例。

一篇日志可能前后都有很长的内容,但,

核心部分的开头一定是“---- Minecraft Crash Report ----”(意思是“我的世界崩溃报告”)(Mohist服务器则是中文的“---- Mohist 崩溃报告 ----”)

后面有一句“A detailed walkthrough of the error, its code path and all known details is as follows:”(意思是“错误的详细信息,其代码路径和所有已知的细节如下所示:”)

大部分情况是英文的,但,如果你用的是mohist服务器,你会发现这些都变成了中文,那么你就要找到中文的这两句话。

这两句的后面都有着明显的开头空格对齐的文字,开头都是“at”,特征很明显。有经验的人只要一眼就能找到这部分,如果你是新手,可以靠Ctrl+F搜索“detailed walkthrough”一词来寻找。

当然,如果你发现日志里真的没有这一段,那可能是非常严重的底层错误,就得找大佬了。

举例:

图2,一个Java本身报错,无堆栈的日志

像这种没头没尾的日志,就算是大佬都不一定能搞定。我只能祝你遇到的不是这种情况。

回到图1,看正常的例子。“Description: ”后面的一句话是报错类型,有时候还跟着几行,告诉你为什么崩溃。当然,这句话是给程序员看的,很多时候不写代码的人并不能看懂。

一眼就能确诊的有:

Description: Not Enough Memory ——内存不足

Wrong Minecraft Versions! —— 装到了错误的MC版本。举例来说,你把1.12.2的mod装到了1.7.10里。

没法一眼确诊的典型:

Description: Exception ticking world

Description: Exception in server tick loop

Description: Unexpected error

Description: Initializing game

Description: Batching chunks

……

好,一眼不能确诊的话,我们往下看“堆栈”区。堆栈区的格式是这样的:

某某错误

  at 某某.某某.某某……(某文件的某行)

  at 某某.某某.某某……(某文件的某行)

  at 某某.某某.某某……(某文件的某行)

  ……

崩溃例子A:

java.lang.NoClassDefFoundError: net/minecraft/world/World$2

  at net.minecraft.world.World.func_190524_a(World.java:557)

  at net.minecraft.world.World.func_175685_c(World.java:492)

  at net.minecraft.world.World.func_175722_b(World.java:440)

  at net.minecraft.world.World.markAndNotifyBlock(World.java:381)

  at net.minecraft.world.World.func_180501_a(World.java:361)

  at net.minecraft.block.BlockBush.func_176475_e(BlockBush.java:68)

  at net.minecraft.block.BlockBush.func_180650_b(BlockBush.java:60)

  at com.rumaruka.thaumicbases.common.block.BlockTBSapling.func_180650_b(BlockTBSapling.java:59)

  at net.minecraft.block.Block.func_180645_a(Block.java:508)

  at net.minecraft.world.WorldServer.func_147456_g(WorldServer.java:476)

  at net.minecraft.world.WorldServer.func_72835_b(WorldServer.java:225)

  at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.java:756)

  at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:668)

  at net.minecraft.server.integrated.IntegratedServer.func_71217_p(IntegratedServer.java:185)

  at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:526)

  at java.lang.Thread.run(Unknown Source)

后面一大堆“at”开头的行,你会发现他们的开头格式固定为“某某点某某点某某……”,这一般是com.作者名.mod名,mod名就藏在这一部分。当然,也有可能是其他的格式,这取决于mod作者怎么写的。后面会讲到,你不需要知道所有的情况,你只需要知道这里是最与众不同的部分即可。

准确地说,这里的不是mod名,而是modid,一个用来区分mod的词。比如,匠魂是“tconstruct”,神兵是“dweapon”,别指望这里有汉字的名称。

那,怎么判断哪行来自mod呢?

排除以下开头的行,剩下的基本就是了:

net.minecraft

net.minecraftforge

java.

sun.reflect

cpw.mods.modlauncher

com.google.

说白了,mod运行在MC上,MC运行在Java上,崩溃了你既不能删mc也不能删java,只好删mod,所以日志里提到的mc和java相关的东西都无视掉就好。

例子A里,唯一提到的mod是“com.rumaruka.thaumicbases”,那么九成九的情况下它就是罪魁祸首。可是,这是什么mod呢?如果你经验丰富,你会知道“thaumic”是神秘时代。如果你经验不丰富,那么就把这一段的每个单词(除了“com”“github”以外)拿出来Ctrl+F搜索,看看他会不会在某个列表里出现。如果你发现你的日志没有mod列表,或者根本查不到,那就得去网上搜搜这是个啥了。

1.12.x的mod列表1.15.x的mod列表

1.12.x的mod列表

1.16.x的崩溃列表

查出来是哪个mod的问题了,怎办?如果你毫无头绪,那就更新这个mod的版本。如果还不行,删了这mod。

当然,也有的时候有好几个mod都被点名了。比如这个例子:(这里com/xxx/xxx视同com.xxx.xxx来看)

java.lang.NoClassDefFoundError: com/animania/common/entities/sheep/EntityEweBase

at org.orecruncher.dsurround.client.renderer.AnimaniaBadge.scale(AnimaniaBadge.java:109)

at org.orecruncher.dsurround.client.renderer.BadgeRenderLayer.doRenderLayer(BadgeRenderLayer.java:127)

at net.minecraft.client.renderer.entity.RenderLivingBase.renderLayers(RenderLivingBase.java:561)

at net.minecraft.client.renderer.entity.RenderLivingBase.doRender(RenderLivingBase.java:270)

这里,“animania”是动物谷,“dsurround”是动态环绕。出现多个mod的时候,往往是它们冲突了。这也很正常,各个mod作者各写各的,谁也不能保证互相全都兼容。世界上少说几万个,谁也不能逐一测试。遇到这情况,请果断裁决,删掉哪个。如果是我的话……我可能会删动态环绕。

到此,你已经能查出一些基本的问题了。剩下的第三步,通俗点说就是整篇日志全都看一遍,然后看哪里可疑。这个过程需要比较好的英语水平,以及对MC和mod运作原理的认知,还要有丰富的经验。对于小白来说,知道前面的看报错类型和堆栈就已经差不多了。

第三步的举例,以后我再讲解吧。

(待续)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有