gamemaker吧 关注:13,633贴子:95,071
  • 12回复贴,共1

【bug问题研究】关于dll异常的研究过程。。

取消只看楼主收藏回复

目前还未解决,看上去似乎是一个很有历史的少见难题吗。。


IP属地:重庆来自Android客户端1楼2023-06-14 23:16回复
    情况说明:
    1、游戏使用了外部dll(玉米的增强和小狐狸的中文)
    2、在此前的操作中dll一直正常使用,知道有一天只是写了一个新角色(完全拖拽)之后不知为何出现奇怪的报错,游戏没有使用触发器trigger
    3、在正常运行模式下,报错为镇楼图的trigger event<deleted> Error defineing an external function,未知触发器的错误定义拓展功能
    4、在调试模式下,出现疯狂的弹窗,内容如图,似乎是内存和地址的什么问题


    IP属地:重庆来自Android客户端2楼2023-06-14 23:21
    收起回复
      bug排查
      0、检查dll,放置位置正确,之前也一直可以运行
      1、首先怀疑是经典的系统安全设置阻拦了gm调用外部dll,彻底关闭之,无效
      2、怀疑是不知道什么时候给这个新版本gmk加了保护,于是将其移出电脑,改名换姓再倒回去,无效
      3、打开之前预留的老版本未加入角色的gmk(处于同一目录下),可以正常运行,懵逼了
      4、怀疑是角色什么代码所导致,但是角色只是一个简单的拖拽产物,全部删除后仍然报错,尝试将整个包体的实例全部删除,报错内容变为更奇怪的未知实例创造事件的<deleted>触发器,这个delect不是销毁事件(没有尖括号的destory),感觉像是系统找不到文件所以认为是一个deleted的东西?
      5、尝试删除dll,把dll全部移出后,报错变为正常的不能识别拓展函数,尝试4的方法叠加,全部删除+dll删除=正常,全部删除+dll保留=鬼畜报错(镇楼),全部保留+dll删除=正常报错拓展函数
      6、根据调试模式的报错,怀疑是底层的文件导致dll的问题(但为什么老版本gmk可以。。反正姑且试了试。。),使用另一台电脑打开纯洁的虚拟机调试,仍然报错,报错内容一模一样(指调试模式中的那一串地址)


      IP属地:重庆来自Android客户端3楼2023-06-14 23:32
      回复
        查阅贴吧内容,发现几个比较类似的上古时代问题,其中一个情况一模一样,但是楼主并没有给出结果,根据楼中评论,都指向dll的问题,这个和我的实验相同,但奇怪的是同一目录的老版本的gmk却可以正常运行,也尝试过把两个版本和新装的dll排列组合移来移去,都是一样的结果这似乎又排除了dll损坏的可能。。
        虽然有老版本和新版本的gmk,可以直接回滚来解决,但是还是好奇究竟是什么原因,也害怕治标不治本后期留下隐患,所以发出此贴讨论,也希望能补充一下吧内这个bug的解决途径,不过我自己目前还在研究中。。对于引擎外的底层还是不太了解。。有点头大


        IP属地:重庆来自Android客户端4楼2023-06-14 23:38
        回复
          不过我对gm也了解甚少,对电脑数据原理更是蜻蜓点水,恐怕最后还是会选择回滚版本,这个bug也就成什么千古迷案(?)了。。如果有大佬愿意帮忙一起研究一下原理的话,这里是压缩包内容,除了拓展文件外,有一个旧版本(正常打开)gmk和问题文件(没修改ene版本),不胜感激!


          IP属地:重庆来自Android客户端5楼2023-06-14 23:44
          收起回复
            通过百度网盘分享的文件:bug(1).z…
            链接:网页链接
            提取码:46id
            复制这段内容打开「百度网盘APP 即可获取」


            IP属地:重庆来自Android客户端6楼2023-06-14 23:55
            收起回复
              回滚版本后开始做新角色,居然又出现了同样的bug,这次可真真正正的懵逼了,每一步操作都有确认和备份,现在怀疑是不是obj数量到了上限,先放个问题研究研究再说


              IP属地:重庆来自Android客户端7楼2023-06-18 22:21
              回复
                又要开始穷举法了,让我们来猜猜是哪个大佬的dll忘写obj上限了嘞


                IP属地:重庆来自Android客户端8楼2023-06-18 22:43
                回复
                  希望小狐狸和苞米的dll能挺进决赛圈,我真的离不开他们


                  IP属地:重庆来自Android客户端9楼2023-06-18 22:45
                  回复
                    有点思路,但还没完全确定
                    在此发出呼吁:请听糖豆姐姐的话,不要使用已经没有维护的gm8制作长线大型游戏,更不要乱用dll,指不准哪天就埋了个定时炸弹💣


                    IP属地:重庆来自Android客户端10楼2023-06-18 23:12
                    回复
                      进行了一个排除法实验,现在的情况是—

                      尝试删去所有实例,这时小狐狸的中文插件成为变量,一旦去掉就可以正常进入房间

                      —在此思路下,在原版中删去所有该dll的函数并卸载dll,报错为(unexpected erro,是不同于gm报错的windows弹窗)

                      —更加纳闷了。。卸完了怎么还报错


                      IP属地:重庆来自Android客户端14楼2023-06-21 22:57
                      回复
                        已锁定问题触发,当有图片的精灵超过260多个时就会触发该bug,同时,经过调试,删除精灵至该数以下后即可正常运行,对此表示疑惑。。我试试不打包dll的话gm8有没有精灵上限


                        IP属地:重庆来自Android客户端16楼2023-06-24 22:02
                        收起回复
                          几乎可以下定论了,已经找到了恢复gmk运行的方法,原因大概是因为这个游戏内存过大(100m多),dll本身写入了一个内存上限之类的东东,删去一部分精灵后恢复运作,也是因此在调试模式下显示为access violation+十六进制地址,不过暂时没想到该怎么彻底解决,考虑到gm8本身的内存上限也不高,在写下去极有可能会变成💩山,并不打算继续扩展内存,而是以一种版本包或者外载精灵的形式进行更新。。不过以上都是纯实验出来的没有科学依据的猜想,也欢迎各位大佬继续补充交流


                          IP属地:重庆来自Android客户端17楼2023-06-24 23:11
                          回复