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

Project1

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

[已经解决] 不写RESCUE也有MESSAGE提示

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
154 小时
注册时间
2011-7-9
帖子
423
跳转到指定楼层
1
发表于 2011-8-17 21:21:13 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
begin
::
rescue
print $!.message
end
为什么不写后面的那些,也会出来错提示,是程序本身建立的么?
如果
  1. begin
  2. ::
  3. rescue
  4. print $!.message
  5. end
复制代码
而不
  1. begin
  2. ::
  3. end
复制代码
就不会显示当前出错行数。。。。
-----------------------------
另外求RESCUE求取错误脚本行数据和行数
New Game:  【QQ堂4.6单机版】(9月新版!【点此】)个人提供快速网盘http://ad.jlweb.tk/upload/ --- 密码:abcdefg
激零工作室孵化中.....网游make中。。招收游戏监督一名,上线时间:5~12 小时 招收脚本员,美工数位。。
本人Q:330639889 验证:zs    ----广:愿意帮我宣传签名的,站内PM
下面的东西是什么?!请进:http://tieba.baidu.com/p/1453289014【2012最新炸弹型ARPG游戏,历时2年间断坚持制作!】
[img=646,262]http://ftp.66rpg.com/WEB_PLUS/attachment/forum/201203/28/1655578kbk8bqkfazk2

Lv1.梦旅人

梦石
0
星屑
120
在线时间
953 小时
注册时间
2007-4-25
帖子
805
8
发表于 2011-8-18 08:43:56 | 只看该作者
orzfly 发表于 2011-8-17 22:41
1楼中的代码之所以会报错是因为是语法错误。是解释器在解释代码的时候就遇到问题了还没有开始运行代码。试 ...

“解释代码”这个说法更像是运行时的行为,说”词法分析时“或”语法分析时”想来歧义更小。词法、语法分析只是纯粹的构建符号表和抽象语法树的过程,而真正执行代码的过程通常才被认为是“解释”。

呃……语法错误是捕捉不到的。

嗯,不过如果是 eval 中的语法错误,就可以被捕获。
[email protected]:~> repeat 1 fortune
Matz is nice, so we are nice.
回复

使用道具 举报

Lv6.析梦学徒

Fuzzy Ginkgo
Taciturn Knight

梦石
0
星屑
60890
在线时间
1933 小时
注册时间
2010-6-26
帖子
1605

烫烫烫开拓者

7
发表于 2011-8-17 22:41:12 | 只看该作者
本帖最后由 orzfly 于 2011-8-17 23:05 编辑

1楼中的代码之所以会报错是因为是语法错误。是解释器在解释代码的时候就遇到问题了还没有开始运行代码。
  1. begin
  2.   p nil + 1
  3. rescue
  4.   p [$!, $!.message, $!.backtrace]
  5. end
  6. exit
复制代码
试试好了。爆出来:

  1. [
  2. #<NoMethodError: undefined method `+' for nil:NilClass>,
  3. "undefined method `+' for nil:NilClass",
  4. ["Section089:2"]
  5. ]
复制代码
Section089:2 就是出错的地方了。不过只是显示成Section089,不会显示编辑器里看到的名字。这个应该是第 90 个区段……

我做了测试
  1. a = []; i = 0
  2. scripts = load_data("Data/Scripts.rxdata")
  3. scripts.each {|script|
  4.   a.push([i+=1, script[1]])
  5. }
  6. p a
复制代码
确实是第90个区段。
  1. [
  2. ....
  3. [88, "Scene_Gameover"],
  4. [89, "Scene_Debug"],
  5. [90, "TEST_SECTION"],
  6. [91, "Main"]
  7. ]
复制代码
orzfly于2011-8-17 22:48补充以下内容:
才发现$RGSS_SCRIPTS已经加载了。
楼主看这个http://rpg.blue/forum.php?mod=viewthread&tid=78782


orzfly于2011-8-17 22:56补充以下内容:
随便写了下,可以得到在什么地方出错了。
  1. begin
  2.   class A
  3.     def test
  4.       return 15 / B.new.orz
  5.     end
  6.   end
  7.   class B
  8.     def orz
  9.       return 1 + nil
  10.     end
  11.   end
  12.   return A.new.test * 5
  13. rescue
  14.   info = ""
  15.   $!.backtrace.each{ |item|
  16.     sectionno = item.sub("Section", "").split(/:/)[0].to_i
  17.     lineno = item.split(/:/)[1].to_i
  18.     method = item.split(/in `/)[1].to_s.sub("'","")
  19.     section = $RGSS_SCRIPTS[sectionno][1]
  20.     line = Zlib::Inflate.inflate($RGSS_SCRIPTS[sectionno][2]).split(/\r\n/)[lineno - 1]
  21.     info += "脚本 #{sectionno}:#{section} 第 #{lineno} 行 #{method}\n#{line} \n\n"
  22.   }
  23.   print("DAMN! #{$!.class.to_s}! #{$!.message}\n\n#{info}")
  24. end
  25. exit
复制代码
输出
  1. DAMN! TypeError! nil can't be coerced into Fixnum

  2. 脚本 89:TEST_SECTION 第 9 行 +
  3.       return 1 + nil

  4. 脚本 89:TEST_SECTION 第 9 行 orz
  5.       return 1 + nil

  6. 脚本 89:TEST_SECTION 第 4 行 test
  7.       return 15 / B.new.orz

  8. 脚本 89:TEST_SECTION 第 12 行
  9.   return A.new.test * 5
复制代码
我的言论只代表我个人的观点,不代表雇主及/或任何第三方的立场。
Opinions expressed are solely my own and do not express the views or opinions of my employer and/or any third parties.
捐赠 | GitHub
回复

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
41993
在线时间
7656 小时
注册时间
2009-7-6
帖子
13527

开拓者贵宾

6
发表于 2011-8-17 21:50:05 | 只看该作者
灵魂の补给 发表于 2011-8-17 21:38
捕捉不到脚本出错的行数吗??

抛出的异常是内部抛出的,这里根本没有扑捉到

点评

呃……语法错误是捕捉不到的。  发表于 2011-8-17 23:06
RGDirect - DirectX驱动的RGSS,点我了解.
(排满,暂停)RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
154 小时
注册时间
2011-7-9
帖子
423
5
 楼主| 发表于 2011-8-17 21:38:22 | 只看该作者
捕捉不到脚本出错的行数吗??
  1. #==============================================================================
  2. # ■ Main
  3. #------------------------------------------------------------------------------
  4. #  各定义结束后、从这里开始实际处理。
  5. #==============================================================================

  6. begin
  7.   # 准备过渡
  8.   # 设置系统默认字体
  9.   Font.default_name = (["黑体"])
  10.   Graphics.freeze
  11.   # 生成场景对像 (标题画面)
  12.   $scene = Scene_Title.new
  13.   # $scene 为有效的情况下调用 main 过程
  14.   while $scene != nil
  15.     $scene.main
  16.   end
  17.   # 淡入淡出
  18.   Graphics.transition(20)
  19. rescue Errno::ENOENT
  20.   # 补充 Errno::ENOENT 以外错误
  21.   # 无法打开文件的情况下、显示信息后结束
  22.   filename = $!.message.sub("No such file or directory - ", "")
  23.   print("找不到文件 #{filename}。 ")
  24. end
复制代码
New Game:  【QQ堂4.6单机版】(9月新版!【点此】)个人提供快速网盘http://ad.jlweb.tk/upload/ --- 密码:abcdefg
激零工作室孵化中.....网游make中。。招收游戏监督一名,上线时间:5~12 小时 招收脚本员,美工数位。。
本人Q:330639889 验证:zs    ----广:愿意帮我宣传签名的,站内PM
下面的东西是什么?!请进:http://tieba.baidu.com/p/1453289014【2012最新炸弹型ARPG游戏,历时2年间断坚持制作!】
[img=646,262]http://ftp.66rpg.com/WEB_PLUS/attachment/forum/201203/28/1655578kbk8bqkfazk2
回复

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
41993
在线时间
7656 小时
注册时间
2009-7-6
帖子
13527

开拓者贵宾

4
发表于 2011-8-17 21:32:11 | 只看该作者
灵魂の补给 发表于 2011-8-17 21:31
那么怎么像系统抛出异常信息那样,获取出错的脚本的哪一行

你敢看一下Main么

点评

我看过N便了。。。main咋咯  发表于 2011-8-17 21:32
RGDirect - DirectX驱动的RGSS,点我了解.
(排满,暂停)RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
154 小时
注册时间
2011-7-9
帖子
423
3
 楼主| 发表于 2011-8-17 21:31:35 | 只看该作者
本帖最后由 灵魂の补给 于 2011-8-17 21:32 编辑
fux2 发表于 2011-8-17 21:23
本来储存异常情况的就是$!和$@,捕捉到这两个变量不为空的时候可以由用户处理,而不捕捉系统则直接抛出这个 ...


那么怎么像系统抛出异常信息那样,获取出错的脚本的哪一行

点评

今天我看见我的一个游戏里还多了几行,都要捕捉,如果捕捉了就不会出来系统提示咯  发表于 2011-8-17 21:39
你没看见只扑捉了Errno::ENOENT么!  发表于 2011-8-17 21:35
New Game:  【QQ堂4.6单机版】(9月新版!【点此】)个人提供快速网盘http://ad.jlweb.tk/upload/ --- 密码:abcdefg
激零工作室孵化中.....网游make中。。招收游戏监督一名,上线时间:5~12 小时 招收脚本员,美工数位。。
本人Q:330639889 验证:zs    ----广:愿意帮我宣传签名的,站内PM
下面的东西是什么?!请进:http://tieba.baidu.com/p/1453289014【2012最新炸弹型ARPG游戏,历时2年间断坚持制作!】
[img=646,262]http://ftp.66rpg.com/WEB_PLUS/attachment/forum/201203/28/1655578kbk8bqkfazk2
回复

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
41993
在线时间
7656 小时
注册时间
2009-7-6
帖子
13527

开拓者贵宾

2
发表于 2011-8-17 21:23:19 | 只看该作者
本来储存异常情况的就是$!和$@,捕捉到这两个变量不为空的时候可以由用户处理,而不捕捉系统则直接抛出这个异常报告.
RGDirect - DirectX驱动的RGSS,点我了解.
(排满,暂停)RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-7-22 08:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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