rimworld吧 关注:246,081贴子:4,416,353

【经验分享】二分法排查mod的改进方案

只看楼主收藏回复

作为报错求助帖最常见的回复,二分法一直是大家喜闻乐见的解决报错方法。
然而据我观察,能够正确高效运用的人并不多。
这里提出二分法的改进方案,解释其原理和操作步骤。


IP属地:天津1楼2023-02-04 21:56回复
    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楼


    IP属地:天津来自Android客户端2楼2023-02-04 21:59
    收起回复
      2.传统二分查找方式
      再此之前:保存mod列表!!!(知道我为什么一直强调吧,已经若干个掉坑里的了)
      如果红字,将你的几百个mod禁用掉一半,剩下的一半如果能正常跑那就是禁用掉的mod里有问题,反之就是保留的mod里有问题。
      将有问题的一半重复上述步骤直到剩下三五个mod,它们可能都有问题,不如一个一个试。


      IP属地:天津3楼2023-02-04 22:04
      收起回复
        蹲直播


        IP属地:江西来自Android客户端4楼2023-02-04 22:08
        回复
          3.传统方法的弊端
          a.很多mod都有前置后置,二分的时候不是随便下哪个都行,导致实际操作时非常麻烦。
          b.有些人看到下的那部分没问题,就又全加回来再找新的下,这更是非常错误的做法,会导致大量的遗漏和重复。
          c.你在测试中保留的一直是有问题那部分mod,这会导致你每次重启都要更久。
          d.这种方法的时间消耗先大后小,很多人坚持不到后面,然而只有做到最后一步才有实际效果,导致真正能做完流程的人不多。


          IP属地:天津5楼2023-02-04 22:13
          回复
            4.改进方案
            技术角度并不复杂,只是将二分改为了归并(看不懂请无视)。
            操作流程:
            a.全部mod取消激活(不是取消订阅)
            b.从小型的、安全的(你放心的)mod开始添加回列表,并测试
            c.添加工具类mod回列表,并测试
            d.添加种族和系列类mod回列表,并测试
            e.添加兼容性差的mod回列表,并测试
            f.随时测试!!!(不要吝啬你的重启键,mod少时很快的)


            IP属地:天津6楼2023-02-04 22:24
            回复
              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.完成


              IP属地:天津7楼2023-02-04 22:39
              回复
                平均成功路径长度
                平均失败路径长度


                IP属地:福建来自Android客户端8楼2023-02-04 22:50
                收起回复
                  6.优点:
                  a.添加时一次加一系列,没有前置后置问题。
                  b.加完就完了,不像下完还得上回去,操作更加便捷。
                  c.很多确定没有问题的可以直接加上,列表增长速度和二分差不多,越往后越慢。
                  d.这种方法的时间消耗先小后大,前面重启等待并不痛苦。
                  关键优点:加上的mod列表都是没有问题的,你要是烦了可以随时以当前列表开始玩。


                  IP属地:天津9楼2023-02-04 22:51
                  收起回复
                    7.误区
                    可能有人有疑问:你废了半天劲,效果和我肉眼看怀疑是哪个不一样吗?
                    你大概也背过英文,看一遍和写一遍效果一样吗?
                    系统的方法就是帮你减少疏忽和遗漏,以及检查一些你想不到的奇怪情况。
                    大概有十分之一的报错里面什么也没写,我也会建议你干脆二分法查一下,请依照本贴检查。
                    以上。


                    IP属地:天津10楼2023-02-04 23:05
                    回复
                      想法不错,但是大部分玩家都是突然发现玩不了了,看看当天啥东西更新了就知道了。


                      IP属地:北京11楼2023-02-05 00:04
                      收起回复
                        但是问题在于,你这么排是需要动脑的,而二分法不需要什么操作


                        IP属地:北京来自iPhone客户端12楼2023-02-05 00:35
                        收起回复
                          梦回数据结构


                          IP属地:四川来自Android客户端13楼2023-02-05 00:42
                          回复
                            确实,这方法的原理是mod对游戏的影响程度是物品类mod<派系类mod<机制类mod,先从影响小的mod开始,再慢慢排查大的。不过这方法对于一键订阅合集的人来说用处不大


                            IP属地:广西来自Android客户端14楼2023-02-05 01:39
                            回复
                              我建议就是先把mod按类别分成几大块,有相互依赖的尽量放在一块,按这种大类做二分会更轻松一些。
                              同时没红字也不一定是没bug,我曾经排mod时候遇到过顺序有问题没红字但是加载派系,随机人物等操作时候还是会遇到bug


                              IP属地:北京来自Android客户端15楼2023-02-05 01:43
                              回复