什么是崩溃报告?
不少大佬遇到过游戏玩着玩着,突然游戏崩溃,跳出来一个内容乱七八糟的窗口,满纸都写着这样的东西:
- [11:41:09] [main/INFO] [FML]: Loading tweaker fr.lolo13lolo.mctitle.TheTweaker from [美化]mctitle.jar
- [11:41:09] [main/WARN] [FML]: The coremod mods.defeatedcrow.asm.AppleMilkCorePlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft
- [11:41:09] [main/WARN] [FML]: The coremod codechicken.core.launch.CodeChickenCorePlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft
- at org.lwjgl.opengl.WindowsPeerInfo.nChoosePixelFormat(Native Method)
- at org.lwjgl.opengl.WindowsPeerInfo.choosePixelFormat(WindowsPeerInfo.java:52)
- at org.lwjgl.opengl.WindowsDisplay.createWindow(WindowsDisplay.java:252)
有一些启动器甚至不会把这个窗口弹出来,这导致很多大佬对于自己游戏的崩溃一头雾水,拿到MCBBS来问其他大佬的时候,
却描述不出自己的游戏出了什么问题,除了“它崩溃了!”似乎什么也说不出。
这可就很难受了。MCBBS有大佬能解决你的崩溃问题,但是他们没有看到你的游戏是怎么崩溃的,不可能直接告诉你解决的办法。
而要想让他们看到你的游戏出了什么问题,最直接的就是贴上这个又长又臭的崩溃报告。
崩溃报告在哪儿?
不是所有的启动器都有自动弹出崩溃报告的功能,我也只见到PCL启动器会这样干。
它会被放在你的游戏文件夹.minecraft下的一个crash-reports文件夹,以游戏崩溃的时刻年-月-日-时-分-秒.txt格式命名。
或者不在那个文件夹里,而是以hrr_pid开头命名的一个txt文件。
这看不懂的玩意,有什么用?
用处可大了!但是首先,它得遇到一个看得懂它的人。
因此,对于实在不想读这个崩溃报告的朋友,
如果你选择在MCBBS发帖求助,应该设法让它出现在求助帖子里;
代替实际上没什么用的一句“我的MC崩溃了!救命!”,让那些有“救命”能力的大佬看到你的崩溃报告。
我常常打一个比方,去医院和医生说:“我肚子疼!”
糟了,肚子疼的病因是最复杂的(不信你可以找个医学专业的朋友或亲属验证一下)
医生一定会问:哪儿疼?有多疼?是持续的还是一阵一阵的?
只向医生抱怨“我很难受”是治不好病的,医生还需要更加详细的信息。
对于解决Minecraft的崩溃问题,也是同样道理。而这个信息就体现在崩溃报告里。
把它贴在你的求助帖子里,可以帮助别的大佬了解你的游戏崩溃的可能原因,并提出一些靠谱的建议。
但是,如果你愿意读一读这坨报告,并有一定的技巧,你不需要懂得太多编程知识,
也可以粗略地知道自己的Minecraft出了什么问题。这个我会在后面稍微讲解一些。
我的水平也非常有限,欢迎大佬们在回复里补充,我也长长知识。
崩溃报告怎么贴比较好?
终于进入正题。直接复制粘贴在帖子里虽然也可以,但是看起来总有一点不舒服。
这里提供一个简单易行的方法,可以让大家避免上传文件和下载文件,以一种优雅的方式贴上崩溃报告。
打开这个网页:https://paste.ubuntu.com/
可以看到里面有四个框,最下面有一个“Paste!”按钮。
第一个框随便填点什么,第二行和第三行的框不用管,
把你的崩溃报告全选、复制、粘贴到最大的第四个框,然后点击“Paste!”
过了一会,会打开一个新的网页,上面是你的崩溃报告。
把这个网页的链接复制,粘贴到你的求助帖子里,就显得优雅多了。
除了把崩溃报告往求助帖子里一甩,你有没有产生过自己读读看的想法?
不要怕!点一下下面的分页按钮!
任何崩溃报告都可以读一读,自己推测一下原因。
尤其对于那些停更、停止维护的模组,自己想办法就更加重要了。
崩溃报告这么长,全部读下来吗?我自己也做不到。
我个人的一个方法是,读重点。
接下来我将用三个案例,来介绍一些实用的方法。
案例一 - 一眼就可以看穿的崩溃原因
有些游戏崩溃报告是可以非常直接地看出崩溃原因的,例如下面这个:
- Description: Initializing game
- java.lang.OutOfMemoryError: Java heap space
Out Of Memory. 内存不足。
其他的东西什么都不需要看,就可以断定问题出在了 Minecraft 的内存空间不足上。
根据楼下 @.gooding300 大佬的补充,
内存不足分为几种不同的情况:
一种是常见的内存不足,在启动器里多给 Minecraft 分配内存,或者加内存条,或者改用独立显卡,就可以解决这个问题。
另一种是某些特殊的内存空间不足,可以参考楼下,这种情形需要用到 Java 的启动参数。
如何看出这个区别:只需要看 OutOfMemoryError: 冒号后面的东西,
它是内存不足的那个内存空间的名字,本案例当中的 Heap Space 是堆空间,
不足的解决方法就和我们平时解决内存不足的方法一样,加内存,就可以了。
是不是很简单?
我想,读到这里,你已经充满了决心。
案例二 - 容易抓住的模组崩溃
有一些安装了模组的 Minecraft 游戏崩溃了,崩溃报告还是又长又臭。
但是,高版本的 Forge 提供了一个贴心的功能:
在模组列表的开头,展示模组的加载状态,一旦某个模组出现错误,
就可以将问题的范围缩小到这几个模组上。
再去查阅这些模组的官方网站,例如 CurseForge 主页或者 GitHub,甚至百科,
就有可能找到答案。
我举一个例子:
- | UCH | cofhworld | 1.2.0 | [前置]CoFHWorld-1.12.2-1.2.0.5-universal.jar | 8a6abf2cb9e141b866580d369ba6548732eff25f |
- | UCEE | thermalfoundation | 2.5.0 | [热力]ThermalFoundation-1.12.2-2.5.0.19-universal.jar | 8a6abf2cb9e141b866580d369ba6548732eff25f |
- | UC | brandonscore | 2.4.4 | [前置]BrandonsCore-1.12.2-2.4.4.173-universal.jar | None |
这是我截取的崩溃报告的一段,它的上下文是崩溃的游戏所安装的所有模组列表。
Forge 把模组列表用竖线符号划分了一下,
第一列“UCH”之类的,是模组的加载状态符号;
第二列是模组的内部名称,在不打开模组的 jar 文件并进行修改的情况下,这个名字很难改动;
第三栏是模组的内部版本号,与内部名称一样不易改动。
第四栏是模组的文件名,与文件夹里它显示的名称相同,偶尔可以见到乱码。
第五栏是数字签名,此处不提。
这个状态符号怎么读?
每一份带有状态符号的崩溃报告都有一段这样的说明文字:
- States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized
- 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
U 表示未加载,D 表示禁用。如果所有的模组都是 U 或者 UD,说明游戏从一开始就没有加载正常,
一般预示着一个比较严重而且怪异的问题。
A 表示可用,一般一旦出现了“UCHIJA”这样的一串,表明模组已经加载完成。
此时仍然崩溃,就可以知道不是模组冲突,而是游戏过程中发生的崩溃,
应当考虑实体出错、方块出错这样的游戏中崩溃情况了。
模组在加载时出现问题的情况,往往会出现:
UE,UCE 甚至 UCEE,以及 UCHE 等。
凡是带有“E”状态符号的都是出错的。
因此,如果你看崩溃报告,第一眼看不出来,
就用 Ctrl+F 查找功能,查找这些特定的字串。
一旦发现,你就赚大了。
案例三 - 更复杂的情形
正如一位大佬在楼下指出的那样,如果要阅读更复杂的崩溃报告,
那么要阅读的重点就在于头尾。
如果你想替别人解决问题,拿一些爱心,那你需要读一读最后的游戏运行信息,
以免别人贴了崩溃报告,你还问“MC版本?Java版本?”那就有点明知故问了。
如果你读的是自己的游戏崩溃的报告,你对自己游戏的信息应当相当清楚,甚至连尾都可以不读,
只读Description和第一个at的前一行,也就是上面这段的倒数二、三行。
同样,我举一个例子。
- ---- Minecraft Crash Report ----
- // On the bright side, I bought you a teddy bear! //这是崩溃报告的头部,从这里开始。
- Time: 18-8-6 上午11:41
- Description: Initializing game //这是崩溃的概述,说明问题出在了什么地方。
- org.lwjgl.LWJGLException: Pixel format not accelerated
- at org.lwjgl.opengl.WindowsPeerInfo.nChoosePixelFormat(Native Method)
这个 Description 是这么一句:“org.lwjgl.LWJGLException: Pixel format not accelerated”,
机翻一下,“像素格式没有加速”?这是个什么玩意?
我们先猜猜看。像素,与图像有关;加速,图像处理有“硬件加速”,图像,硬件,可能与显卡有关。
这时候搬出搜索引擎:复制这句话,丢给百度搜索。
搜索结果是:
第二个搜索结果开篇就这样说(我画了重点)
果不其然!
我们不仅验证了猜测,而且还找到了解决问题的办法。
对这个问题,@gooding300 大佬给出的更专业的解释:http://www.mcbbs.net/forum.php?mod=redirect&goto=findpost&ptid=826103&pid=13447117
虽然有那么一点麻烦,但是这同样也是一个探索未知的过程,
算是一个硬核METAGAME吧(笑)。
选读内容 - 更高明的求助手段:向模组作者反馈
如果你知道某个模组的官方页面,比如Minecraft CurseForge,比如Minecraft Forum,
比如某些大佬在MCBBS发布了原创模组——他们如果仍然在更新和维护这个模组,
一定会留下一个联系方式:“反馈Bug请到xxx网址”。
这个网址,如果是GitHub,
(例如我们认识的交错次元模组,它的Bug反馈网址是 https://github.com/Angry-Pixel/The-Betweenlands/issues ),
那就太好了!
这种情况在1.12.2模组中非常常见。它们常常是测试版本,在不断更新和完善当中,
如果的确是模组本身的问题,
你完全可以告诉模组的作者,让TA知道,你写的这Bug把我游戏搞崩溃了!
不仅非常解气,而且还帮助了模组作者修复了模组的问题,之后的玩家就不会遇到这个情况了。
岂 不 美 哉。
那我们应该怎么做呢?
1. 按照上一节的步骤,准备好一个崩溃报告的链接。
我之所以选择了ubuntu提供的粘贴板,是因为它大多数时候都能轻松打开,不需要魔法;外国友人也很容易打开它。
2. 记录下你的Minecraft版本、Forge版本号(如果是LiteLoader模组,可能要有LiteLoader的版本号)、Mod版本号。
3. 所有模组的名单。如果你所玩的整合包在CurseForge、FTB等国外知名MC网站发布过,就用那个发布网页的链接代替。
4. 简单描述一下Bug的状况,或者简单描述一下如何制造这个Bug
比如:用你这个模组的xx镐子挖xx方块会导致游戏崩溃、在安装了xx模组时,用你这个模组的yy物品会崩溃,等等。
然后找到作者给你提供的那个反馈Bug的地方——
等等!虽然你是去投诉别人的产品,但是礼貌还是要有的。
如果你要反馈的那个模组作者说英语,
请尽你所能避免严重影响阅读的语言错误,不要求全对满分;不要滥用大写和感叹号。用简单的句子就好。
如果你实在不想写英语,可以略去第4项内容,
这样崩溃报告只是一个链接、那些版本号都是数字,Mod名称可以查到,复制粘贴即可,完全不需要英语能力。
之后,或许在一段时间后,作者就会给你回话了。如果TA解决了你的问题,记得回复一个Thanks.
如果TA没有... 原谅他。制作模组不是一个职业,或许那位作者很忙。他会看到你的反馈的。
指明引用源和致谢
本文中的崩溃报告示例来自这篇MCBBS的求助帖子。如果我这篇教程里讲的没有很好地解决问题,
大佬们可以拿着解决问题的法子来打我的脸,我非常欢迎,毕竟人都是在尝试和错误中进步的。
我在引用时没有征得那位求助者的同意,如果将来引起任何的不愉快,我在此先作深刻的道歉。
被以截图形式引用的教程“解决 Win8 系统下 Minecraft 错误 Pixel format not accelerated”,
特向此教程原作者和网站致谢,原链接:https://haizs.com/post/how-to-fi ... ccelerated-in-win8/
另外,推荐各位阅读一篇其他大佬编写的,更加详细的崩溃报告阅读教程:
https://bbs.mcmod.cn/thread-1456-1-1.html
对希望了解崩溃报告的朋友一定会有帮助。
写在最后的一些话
大概就是这样。
小声哔哔几句,尽管你可以使用Vanilla Fix之类的模组阻止游戏崩溃,也可以用其他玄学方法解决崩溃,
但是崩溃报告往往能帮助模组作者发现 Bug,这对于正在开发中的新模组,比如不少 1.12.2 的模组是很重要的。
没准就被作者修好了呢?
再说,也比干着急好得多。
最后,祝各位的游戏永不崩溃。