设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2508|回复: 20
打印 上一主题 下一主题

[胡扯] 检错方法【控制变量】、【中值定理】、【对照试验】

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1293
在线时间
995 小时
注册时间
2014-12-14
帖子
3016

开拓者

跳转到指定楼层
1
发表于 2016-5-19 13:59:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 Vortur 于 2016-8-23 16:14 编辑

【RM的排错方法】


一、对照实验法
二、控制变量法
三、中值定理
四、拓展
五、多余的话






  

评分

参与人数 4星屑 +20 收起 理由
3535 + 17 哈哈
RaidenInfinity + 1 只能给87分不能再多了
david_ng223 + 1 我不赞同
VIPArcher + 1 我很不赞同

查看全部评分

【RMVA教程】
---------------------
欲买桂花同载酒,终不似,少年游.

Lv3.寻梦者

梦石
0
星屑
1024
在线时间
1389 小时
注册时间
2010-8-9
帖子
3471
来自 2楼
发表于 2016-5-22 13:04:50 | 只看该作者
本帖最后由 寒冷魔王 于 2016-5-22 13:10 编辑

鉴于LZ是在查找BUG,我来说一下最常见的BUG——脚本冲突的解决方法:

有四段脚本:
RUBY 代码复制
  1. # 脚本0
  2. class A
  3.   def a
  4.     puts("A.a0")
  5.   end
  6.   def b
  7.     puts("A.b0")
  8.   end
  9. end
RUBY 代码复制
  1. # 脚本1
  2. class A
  3.   alias old_a a  # 可以正常运行的写法
  4.   def a
  5.     old_a # a0有效
  6.     puts("A.a1")
  7.   end
  8.   def b # 可能出于需要,作者有意覆盖原本的b脚本,这可能会导致后续用到原始b的脚本冲突
  9.         # 修改此问题的方法是将这段脚本放在其他修改脚本的上方,或者用if将它包装,或者将其他脚本对照着复制一遍(按照作者的写法适当修改)
  10.     puts("A.b1")
  11.   end
  12. end
RUBY 代码复制
  1. # 脚本2
  2. class A
  3.   alias old_a a # 错误根源:alias重命名为同一个名称导致循环调用
  4.                       # 修改方法:将这个old_a改成其他的名称,如old_old_a
  5.   def a # 和脚本1放在一起,会stack level too deep
  6.     old_a  # 这个要改成和本段脚本alias同样的名称
  7.     puts("A.a2")
  8.   end
  9.   alias old_b b
  10.   def b
  11.     old_b
  12.     puts("A.b2")
  13.   end
  14. end
RUBY 代码复制
  1. # 调用脚本
  2. a = A.new
  3. a.a
  4. puts("-")
  5. a.b


脚本0是原始脚本,脚本1是增添脚本1,脚本2是增添脚本2。

顺序:

【0】
脚本0
正确,输出
A.a0
A.b0

【1】
脚本0
脚本1
脚本2

错误1:
in `a': stack level too deep (SystemStackError)

检查名称为a的函数,看看alias是否将两个a函数重命名为同一个a函数
如两个alias old_a a。
有,改为不同名,如:
alias old_a1 a
alias old_a2 a
注意各自a函数里的调用也要改。

错误2:
改完后,输出
A.a0
A.a1
A.a2
-
A.b1
A.b2
如果b0是我们不需要的,那么就是正确结果,如果需要的话,那么需要在脚本2中调用原本的b
直接将脚本2放在脚本1上方,是不行的。因为这样的话只会输出b1。
修改这一问题的方法是在脚本0的b函数后面加一条alias:
RUBY 代码复制
  1. #(脚本0)
  2.   def b
  3.     puts("A.b0")
  4.   end
  5.   alias default_b b
  6.  
  7. #(脚本2)
  8.   def b
  9.     default_b # 这个是为b0准备的
  10.     old_b     # 这个是为b1以及基于b1修改的各种脚本准备的
  11.     puts("A.b2")
  12.   end



【2】
脚本0
脚本2
脚本1

修改好stack错误后,会发现只输出b1。
这是因为b1粗暴地将原本的代码全部覆盖了(其实这个很多时候是作者不得不这么做的)
解决方法之一是调整顺序(见上)。
如果不想调整顺序,或者调整顺序依旧出现很多问题的话,就需要按照代码的逻辑进行修改。
将多个重载函数合成为一个函数,通过if case等语句控制,是一个比较好的方法。




许多兼容性问题,其实根源大抵都是这种重载问题。
当然还有使用同一个变量导致冲突之类。
理解增添脚本的修改内容,根据情况适当调整,是万能的解决方案。

点评

脚本冲突的最好解决办法是重构!【大雾  发表于 2016-5-22 15:25

评分

参与人数 2星屑 +50 收起 理由
Vortur + 41 今天所有的糖,敬最认真的人!.
zaiy2863 + 9 6翻了,大大大大好评,克总给你发糖.

查看全部评分

SRPG on RM 项目研发组 正式成立。目前SRPG·RMVA系统进度88.8%。SMRC Kernel 进度90%
↖(^ω^)↗热烈庆祝~SMRC Ver5.1 SRPG战棋地图移动范围生成脚本正式发布~~
-----------------------------------------------------------------------------------------
SMRC具有高性能、高兼容、定制自由、使用方便的特点。
1.性能,100移动力轻松算出,无压力;
2.兼容,RGSS1-3通吃,效率保证;
3.支持移动形状定制,支持4方位、6方位、正方形或其他任意有移动规律的形状;
4.可以充当高性能寻路来使用。
【链接点此】
-----------------------------------------------------------------------------------------
【2016/01/06更新 | 改版】RM脚本编辑器Gemini
-----------------------------------------------------------------------------------------
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9497
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

3
发表于 2016-5-19 19:12:14 | 只看该作者
不要走上民科之路。

评分

参与人数 2星屑 +93 收起 理由
正太君 + 90 头像好评...
Vortur + 3 对那些需要这些姿势的人,何其忍!?.

查看全部评分

回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
121
在线时间
1914 小时
注册时间
2013-9-2
帖子
1770

剧作品鉴家

4
发表于 2016-5-19 19:17:48 | 只看该作者
克总表示你成功地降低了他的san值
因此就不给你发糖了

评分

参与人数 1星屑 +3 收起 理由
Vortur + 3 原帖链接在下就不发了,阁下自己看去.

查看全部评分

RM新人,尚在摸索熟悉软件中。对您的指教十分感谢。(鞠躬
RM的新手教程新手教程新手教程
喵雪大触的像素绘画教程
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
12157
在线时间
4435 小时
注册时间
2014-4-11
帖子
5955

开拓者

5
发表于 2016-5-19 21:57:25 | 只看该作者
道理我都懂,用这种书面法来说,感觉想睡觉

点评

诚恳地为阁下高兴,因为阁下用不到此教程  发表于 2016-5-19 22:04
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
5300
在线时间
1099 小时
注册时间
2013-7-8
帖子
2005

极短23参与

6
发表于 2016-5-22 13:41:36 | 只看该作者
检错方法【找到错误代码的位置,仔细核对是否有拼写或语法错误,如果没有,重申全代码】
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1239
在线时间
668 小时
注册时间
2009-11-11
帖子
2787
7
发表于 2016-5-23 20:13:39 | 只看该作者
你是说断点?

点评

绝对不是这个。-.-!  发表于 2016-5-24 00:08
代码民工用的东西  发表于 2016-5-23 20:54
不,应该不是。在下不清楚什么是断点。断点是什么呢?  发表于 2016-5-23 20:45
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4135
在线时间
1893 小时
注册时间
2010-8-16
帖子
811

短篇八RM组季军

8
发表于 2016-5-26 10:57:37 | 只看该作者
到底要不要和我合为一体!!!

点评

黑人问号  发表于 2016-9-5 20:54
只会点简单的事件脚本  发表于 2016-8-25 20:59
真假,会脚本吗!  发表于 2016-8-25 20:38
合体。  发表于 2016-8-24 18:56
合体!  发表于 2016-8-24 17:51
Steam页面:
http://store.steampowered.com/app/486850
https://store.steampowered.com/app/865180/
志同道合QQ&E-mail:[email protected]
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
704
在线时间
91 小时
注册时间
2018-9-30
帖子
56
9
发表于 2018-10-16 02:00:06 | 只看该作者
楼主你好,我已经照着你的输入来了,能进游戏了,但是进去菜单栏还是会黑屏出现堆栈过深错误。
想做一款 吞食天地2重制版 游戏
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-25 20:16

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表