【经验分享】二分法排查mod的改进方案
rimworld吧
全部回复
仅看楼主
level 12
作为报错求助帖最常见的回复,二分法一直是大家喜闻乐见的解决报错方法。
然而据我观察,能够正确高效运用的人并不多。
这里提出二分法的改进方案,解释其原理和操作步骤。
2023年02月04日 13点02分 1
level 12
1.二分查找的理论基础
二分法查找适用于数据量较大时,在有序的有N个元素的数组中查找用户输进去的数据x。
算法如下:
1).确定查找范围front=0,end=N-1,计算中项mid=(front+end)/2。
2).若a[mid]=x或front>=end,则结束查找;否则,向下继续。
3).若a[mid]<x,说明待查找的元素值只可能在比中项元素大的范围内,则把mid+1的值赋给front,并重新计算mid,转去执行步骤2;
若a[mid]>x,说明待查找的元素值只可能在比中项元素小的范围内,则把mid-1的值赋给end,并重新计算mid,转去执行步骤2。
看不懂没事,说人话就是:
如果红字,将你的几百个mod禁用掉一半,剩下的一半如果能正常跑那就是禁用掉的mod里有问题,反之就是保留的mod里有问题
配合Mod Manager的列表暂存功能,可以很快定位到问题mod
这是查错的最有效(最快)方法
摘自:红字?报错?BUG?来看问题解决办法 28楼
2023年02月04日 13点02分 2
坏坏坏,完全不懂[阴险]
2023年02月04日 17点02分
什么数据结构
2023年02月05日 00点02分
死去的数据结构突然攻击我
2023年02月05日 01点02分
level 12
2.传统二分查找方式
再此之前:保存mod列表!!!(知道我为什么一直强调吧[滑稽],已经若干个掉坑里的了)
如果红字,将你的几百个mod禁用掉一半,剩下的一半如果能正常跑那就是禁用掉的mod里有问题,反之就是保留的mod里有问题。
将有问题的一半重复上述步骤直到剩下三五个mod,它们可能都有问题,不如一个一个试。
2023年02月04日 14点02分 3
好好好,这个听懂了[滑稽]
2023年02月04日 17点02分
level 11
蹲直播[哈哈]
2023年02月04日 14点02分 4
level 12
3.传统方法的弊端
a.很多mod都有前置后置,二分的时候不是随便下哪个都行,导致实际操作时非常麻烦。
b.有些人看到下的那部分没问题,就又全加回来再找新的下,这更是非常错误的做法,会导致大量的遗漏和重复。
c.你在测试中保留的一直是有问题那部分mod,这会导致你每次重启都要更久。
d.这种方法的时间消耗先大后小,很多人坚持不到后面,然而只有做到最后一步才有实际效果,导致真正能做完流程的人不多。
2023年02月04日 14点02分 5
level 12
4.改进方案
技术角度并不复杂,只是将二分改为了归并(看不懂请无视)。
操作流程:
a.全部mod取消激活(不是取消订阅)
b.从小型的、安全的(你放心的)mod开始添加回列表,并测试
c.添加工具类mod回列表,并测试
d.添加种族和系列类mod回列表,并测试
e.添加兼容性差的mod回列表,并测试
f.随时测试!!!(不要吝啬你的重启键,mod少时很快的)
2023年02月04日 14点02分 6
level 12
5.操作实例
假设你有600个mod,其中有3处错误
按流程来:
a.全部mod取消激活
b.添加贴图修改,连接线修改等250个mod,测试无误
c.添加list everything\camera++等100个mod,测试副武器和双持和移动射击同时用攻击时出问题,留下一个。
d.添加ratkin、revia、fluffy系列、ve系列等150个mod,测试vanilla expanded framework和某种族冲突,去掉vef。
e.添加ce、多线程、联机、黑客等100个mod,测试ce某炮塔不能正常开火,去掉该炮塔。
f.完成
2023年02月04日 14点02分 7
level 10
平均成功路径长度
平均失败路径长度
2023年02月04日 14点02分 8
路径长度都是全部,人家事先又不会告诉你一共几个问题[滑稽]
2023年02月04日 14点02分
level 12
6.优点:
a.添加时一次加一系列,没有前置后置问题。
b.加完就完了,不像下完还得上回去,操作更加便捷。
c.很多确定没有问题的可以直接加上,列表增长速度和二分差不多,越往后越慢。
d.这种方法的时间消耗先小后大,前面重启等待并不痛苦。
关键优点:加上的mod列表都是没有问题的,你要是烦了可以随时以当前列表开始玩。[真棒]
2023年02月04日 14点02分 9
e.最可能出错的mod最后测试,可以检查其和所有其他mod的兼容情况,避免下了一些mod报错没了
2023年02月04日 17点02分
level 12
7.误区
可能有人有疑问:你废了半天劲,效果和我肉眼看怀疑是哪个不一样吗?
你大概也背过英文,看一遍和写一遍效果一样吗?
系统的方法就是帮你减少疏忽和遗漏,以及检查一些你想不到的奇怪情况。
大概有十分之一的报错里面什么也没写,我也会建议你干脆二分法查一下,请依照本贴检查。
以上。
2023年02月04日 15点02分 10
level 14
想法不错,但是大部分玩家都是突然发现玩不了了,看看当天啥东西更新了就知道了。
2023年02月04日 16点02分 11
你不常看报错帖吧,天天都有问我的,多数都不是更新问题[汗]
2023年02月04日 16点02分
@夜雨涤风🌌 你是好人,按我来说自己不会排错的伸手党如果不是纯萌新,根本没必要搭理吧[你懂的]
2023年02月05日 01点02分
level 11
但是问题在于,你这么排是需要动脑的,而二分法不需要什么操作
2023年02月04日 16点02分 12
你看我上面说的了吗[喷] 下mod有一大堆依赖关系要遵守,也不是闭着眼点哪个都行的
2023年02月04日 16点02分
@夜雨涤风🌌 所以我二分法是倒着来,先从最下面的开始,也就是后半截,这样就不用考虑依赖的问题,因为需要依赖的mod是最先去掉的。
2023年02月04日 17点02分
@anhey◎ 好吧,我在9楼加了一条
2023年02月04日 17点02分
@夜雨涤风🌌 用rimpy添加依赖也就几秒的事
2023年02月05日 00点02分
level 9
梦回数据结构
2023年02月04日 16点02分 13
level 7
我建议就是先把mod按类别分成几大块,有相互依赖的尽量放在一块,按这种大类做二分会更轻松一些。
同时没红字也不一定是没bug,我曾经排mod时候遇到过顺序有问题没红字但是加载派系,随机人物等操作时候还是会遇到bug
2023年02月04日 17点02分 15
1 2 尾页