rimworld吧 关注:276,660贴子:5,126,655

回复:【指南】从modder视角聊聊怎么排查游戏报错和模组冲突

只看楼主收藏回复

常见载入时报错:
3. Try to load mod with the same packageid multiple times

原因:这个报错其实从字面就能看出来,但吧里经常疑惑的是”为什么我没激活mod也有红字啊“,举个例子,你现在是一个班的班主任,然后你去上课点名,你虽然不认识每个学生,但学生名单上居然有三个人叫张三,那你可能就有点奇怪了,这里也是一样,因为你有两个mod是一样的id,游戏在读取的时候虽然没有读取具体的内容,但起码会读取名字等一些元信息,不然你根本不能在mod面板里找到mod。
解决方法:忽略,或者根据提示的那串数字找到对应的mod,删除另外相同的一份
4. Error while instancing a mod of,关键词HarmonyLib,Patching exception
还是上面这张图,很典型的报错
原因:Patch在边缘世界的mod环境下是补丁的意思,这条报错意味着某个mod的harmony补丁出了问题,通常是它想更改游戏里的某些逻辑,但mod作者写的出错了。一般从命名空间可以看出具体是哪个mod,比如上图中Error while instancing a mod of DesignatorShapeaddTranslation.xxxxx 在句点前的命名空间为DesignatorShapeaddTranslation,因此是DesignatorShape的中文翻译mod出了问题
影响:中度,这个mod的这个补丁不会起作用,因此可能体验不到mod的某些功能
解决方法:个人无法修复,找到对应的mod取消激活,或者通知mod作者修改


IP属地:美国16楼2021-10-30 21:08
回复
    常见载入时报错
    5. Config in xxxxx: description has leading whitespace
    原因:有个xml定义里某个东西的描述前面多了个空格
    影响:没有
    解决方法:忽略,或者自己改xml去掉空格


    IP属地:美国17楼2021-10-30 21:23
    收起回复
      2026-01-12 05:09:11
      广告
      不感兴趣
      开通SVIP免广告
      常见载入时报错
      6. xml,def相关


      首先讲一下def也就是定义,定义是rimworld里非常重要的一环,几乎所有游戏中的事物都有定义,小人,派系,事件等等,定义包含了这些事物的基本属性。
      报错影响:中度,定义出错的话游戏无法初始化这个事物,因此mod的某些特性无法使用
      解决方法:根据报错的关键字,猜测是哪个mod出错,比如上面第一张图涉及到了Wing,Shell,Animal等,基本上是一个和动物相关的mod,而第二个涉及到了许多手术,可以猜测是与仿生相关的mod(如果猜不出来,可以用Rimpy的搜索功能,后面讲Rimpy的时候细说);检查该mod是否有前置你没有激活,如果确实没有那么只能先取消激活这个mod等作者修复。


      IP属地:美国18楼2021-10-30 22:00
      回复
        支持


        IP属地:江苏来自Android客户端19楼2021-10-30 22:10
        回复
          看看


          IP属地:安徽来自Android客户端20楼2021-10-30 22:16
          回复
            16楼好像被抽了,补一下



            IP属地:美国21楼2021-10-30 22:50
            回复
              三、常见的运行时报错
              1. 关键字 MissingMethod
              原因:顾名思义引用了缺少的方法,打个比方之前去霍格沃兹学校要从九又四分之三站台去,后来泰南改了要从十又三分之四站台去,这样原来的mod就必须更新,否则就会出现这个报错,因为站台已经改了,之前的站台不在了。
              影响程度:不等,如果调用次数多可能非常严重。
              解决方法:阅读堆栈(后面细说),找到出问题的mod,取消激活或反馈作者修复
              2. 关键字NullReference
              原因:空引用大概可能占据所有报错的70%以上,还是之前的例子,空引用就是让麻瓜去找九又四分之三站台,他们根本没有的东西;用游戏里的例子来说,比如要访问pawn的文化ideo,但那个pawn是一只动物,根本没有文化,就会产生空引用。
              影响程度:一般比较严重,因为通常调用次数很多,会影响游戏性能
              解决方法:阅读堆栈(后面细说),找到出问题的mod,取消激活或反馈作者修复


              IP属地:美国22楼2021-10-30 23:36
              回复
                三补、如何阅读报错堆栈
                Exception in RimWorld.ThinkNode_ConditionalColonist TryIssueJobPackage: System.NullReferenceException: Object reference not set to an instance of an object
                at PeteTimesSix.SimpleSidearms.Intercepts.JobGiver_DropUnusedInventory_Drop.Prefix (Verse.Pawn pawn, Verse.Thing thing) [0x0003e] in <31fd213fee1b4763ad041f646e02bba2>:0
                at (wrapper dynamic-method) RimWorld.JobGiver_DropUnusedInventory.RimWorld.JobGiver_DropUnusedInventory.Drop_Patch3(RimWorld.JobGiver_DropUnusedInventory,Verse.Pawn,Verse.Thing)
                at (wrapper dynamic-method) RimWorld.JobGiver_DropUnusedInventory.RimWorld.JobGiver_DropUnusedInventory.TryGiveJob_Patch1(RimWorld.JobGiver_DropUnusedInventory,Verse.Pawn)
                at Verse.AI.ThinkNode_JobGiver.TryIssueJobPackage (Verse.Pawn pawn, Verse.AI.JobIssueParams jobParams) [0x00000] in <b64badbf3c3d41018b3ca5d3e8c77771>:0
                at Verse.AI.ThinkNode_Priority.TryIssueJobPackage (Verse.Pawn pawn, Verse.AI.JobIssueParams jobParams) [0x00022] in <b64badbf3c3d41018b3ca5d3e8c77771>:0
                (Filename: C:\buildslave\unity\build\Runtime/Export/Debug/Debug.bindings.h Line: 39)
                像这样的一条完整的报错我们称之为追踪堆栈,它就像快递员在送货时候的门派地址,不过是倒过来的,上面这段话用人话说就是”xx室,xx号,xx街道,xx区,xx市,xx省,xx国家“(每一个at都是这里的逗号,分割了地址)。那么我们怎么从里面找到哪个mod出错呢?
                第一个方法是查看命名空间,本体的命名空间只有RimworldVerse,我们从地址的上面开始检查,先忽略本体的命名空间,是否还出现的其他命名空间?
                很容易可以发现,第二条地址PeteTimesSix.SimpleSidearms.Intercepts.JobGiver_DropUnusedInventory_Drop.Prefix里出现了不是本体的命名空间,因此它可能就是对应的mod,如果你熟悉mod的英文名,很容易就能看出是SimpleSidearms副武器模组。
                如果你觉得直接看有些困难,吧里有一个贴子叫”给大家介绍一个排查红字的办法“(https://tieba.baidu.com/p/7523399359?pid=141264163102&cid=0#141264163102)里面使用rimpy和visual exception可以辅助你阅读报错堆栈


                IP属地:美国本楼含有高级字体23楼2021-10-30 23:48
                回复
                  2026-01-12 05:03:11
                  广告
                  不感兴趣
                  开通SVIP免广告
                  有时报错堆栈里没有本体外的命名空间,像
                  Exception in UI Root Update: System.Missing Method Exception: void Verse.GenDraw.DrawFieldEdges(System.Collections.Generic.List`1<Verse.IntVec3>,UnityEngine.Color)
                  at (wrapper dynamic-method) RimWorld.SelectionDrawer.RimWorld.SelectionDrawer.DrawSelectionOverlays_Patch2()
                  at (wrapper dynamic-method) RimWorld.MapInterface.RimWorld.MapInterface.MapInterfaceUpdate_Patch1(RimWorld.MapInterface)
                  at RimWorld.UIRoot_Play.UIRootUpdate () [0x00015] in <d243303f714d4dc48680ccaecd2f594e>:0
                  UnityEngine.StackTraceUtility:ExtractStackTrace ()
                  (wrapper dynamic-method) Verse.Log:Verse.Log.Error_Patch1 (string)
                  RimWorld.UIRoot_Play:UIRootUpdate ()
                  (wrapper dynamic-method) Verse.Root:Verse.Root.Update_Patch2 (Verse.Root)
                  Verse.Root_Play:Update ()
                  里面只有本体的命名空间Rimworld和Verse,此时说明报错可能是因为mod的补丁(Patch)失效了。这种情况下可以用rimpy的全文搜索功能找到具体的mod(后面细说)。
                  如果报错里只有本体的命名空间,又没有patch,那么恭喜你遇到了一个原版的bug,等泰南修复吧


                  IP属地:美国本楼含有高级字体24楼2021-10-30 23:54
                  收起回复
                    给大佬递精神茶


                    IP属地:上海来自Android客户端25楼2021-10-31 00:02
                    回复
                      四、排序神器rimpy
                      rimpy是一个可以在游戏外面调整mod和排序的工具,如果你还不知道怎么使用,可以在steam里的指南里搜索rimpy,里面有一个名为“Rimpy Mod Manager使用指南——集排序、管理、下载于一身的优秀工具”的中文指南,非常详细,吧里也有许多攻略,我就不细说了,主要讲一下怎么用搜索功能快速定位报错的mod。
                      在中间的第四个按钮File Search就是全文搜索功能

                      点击之后,会出现这样的界面

                      可以看到中间有几个选项,包括搜索范围(默认是Active mod也就是已经激活的模组),是否大小写敏感,是否跳过翻译,是否只在xml查找等等,一般来说默认设置就行。
                      我们将需要搜索的东西复制到搜索框中,点击search开始搜索,等待一会就可以找到具体的mod了。
                      比如这里我搜索了RenderPawnInternal这个方法,可以看到动态表情和我的一个mod拥有这个方法,因此如果是RenderPawnInternal这个方法出错,那么就可能是这两个mod有点问题。


                      IP属地:美国26楼2021-10-31 00:11
                      回复
                        补23、24楼



                        IP属地:美国27楼2021-10-31 00:15
                        回复
                          重访常见报错

                          有了全文搜索功能,我们能更快的找到对应的mod了,比如之前提到的这个报错,我们当时因为这张图涉及到了Wing,Shell,Animal等,猜测是一个和动物相关的mod。如果要更精确,那么就把defName后面的英文复制到全文搜索里,比如AA_BuoyangBaseAnimal,查找出具体是哪个mod引入了这些定义。
                          对这个运行时报错

                          我们可以从上面开始,先搜索DrawSelectionOverlays(方法名,在句号之后,在_Patch之前),看看对应的是哪个mod。


                          IP属地:美国28楼2021-10-31 00:21
                          回复
                            原来rimpy有这个功能
                            我之前都是用单独的文本搜索器


                            IP属地:湖北来自Android客户端29楼2021-10-31 01:21
                            回复
                              2026-01-12 04:57:11
                              广告
                              不感兴趣
                              开通SVIP免广告
                              先收藏一波,感谢大佬


                              IP属地:广西来自Android客户端30楼2021-10-31 01:56
                              回复