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

Project1

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

有办法在报错前,P一个对话框出来么?

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
60
在线时间
61 小时
注册时间
2006-9-15
帖子
946
跳转到指定楼层
1
发表于 2009-1-12 20:09:35 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
比如  NilClass 或 NoMethod  报错了  

在报错的对话框出来之前。。前出现一个脚本

p "出错拉!"  

的对话框,有办法么?
版务信息:版主帮忙结贴~

Lv1.梦旅人

梦石
0
星屑
60
在线时间
61 小时
注册时间
2006-9-15
帖子
946
3
 楼主| 发表于 2009-1-12 20:15:33 | 只看该作者
刚才我自己解决了。。。。。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
60
在线时间
9 小时
注册时间
2006-9-7
帖子
303
2
发表于 2009-1-12 20:12:49 | 只看该作者


  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================

  4. module ERRSettings
  5. #▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
  6. #请设置以下东东
  7. # 游戏测试的时候,是否保存错误信息?(true是false不是)
  8. SaveErrorData = true

  9. # 回溯跟踪错误的文件名
  10. BackTraceFileName = "Backtrace.txt"
  11. #▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
  12. end

  13. module RPG
  14. module_function
  15. def version
  16.    case
  17.      when defined? Hangup then 1.0
  18.      else 2.0
  19.    end
  20. end
  21. def debug?
  22.    $TEST or $DEBUG
  23. end
  24. end
  25. class Reset < Exception
  26. end
  27. class ScriptInterpreter

  28. include ERRSettings
  29. CallSystemError = true
  30. def run
  31.    Graphics.freeze
  32.    $scene = Scene_Title.new
  33.    $scene.main until $scene.nil?
  34.    Graphics.transition(RPG.version == 1 ? 20 : 30)
  35.    exit
  36. rescue Reset => exp
  37.    raise
  38. rescue SystemExit => exp
  39.    raise
  40. rescue Exception => exp
  41.    exception(exp)
  42.    exit
  43. end

  44. private

  45. def exception(exp)
  46.    save_backtrace(exp) if SaveErrorData or RPG.debug?
  47.    print(get_error_message(exp))
  48.    raise if CallSystemError and RPG.debug?
  49. end

  50. def get_error_message(exp)
  51.    if RPG.debug?
  52.      bt = BackTrace.get_backtraces(exp.backtrace)
  53.      
  54.      if exp.class.to_s=="SyntaxError"
  55.        $outexp="语法错误"
  56.      elsif exp.class.to_s=="NameError"
  57.        $outexp="变量未定义"
  58.      elsif exp.class.to_s=="NoMethodError"
  59.        $outexp="方法未定义"
  60.      elsif exp.class.to_s=="NoMemoryError"
  61.        $outexp="内存占有过大"
  62.      elsif exp.class.to_s=="ArgumentError"
  63.        $outexp="参数错误"   #如果愿意此处可以自定义添加
  64.      else
  65.        $outexp=exp.class.to_s
  66.      end

  67.      msg  = "◆ 发生错误\n"
  68.      msg += "\n66RPG提醒您:请养成备份游戏文件的习惯。\n \n"
  69.      msg += "错误类型 :\n\t#{$outexp}\n"
  70.      msg += "错误信息 :\n\t#{exp.message}\n" if exp.message
  71.      msg += "错误可能发生的相关位置 :"
  72.      bt.each do |i|
  73.        msg += " \n\t#{i.name} : 第 #{i.line_no} 行"
  74.        msg += " : #{i.method_name}" if i.method_name
  75.      end
  76.      msg += "  \n非常荣幸能为您发送错误报告\n"
  77.    else
  78.      msg  = "内部发生错误强制结束。\n"
  79.      msg += "66RPG提醒您:请养成备份游戏文件的习惯。\n"
  80.      msg += "▲错误报告文件「#{BackTraceFileName}」已经保存。\n\n"
  81.      msg += "  非常荣幸能为您发送错误报告\n"
  82.    end
  83.    msg
  84. end

  85. def save_backtrace(exp)
  86.    bt = BackTrace.get_backtraces(exp.backtrace)
  87.    
  88.      if exp.class.to_s=="SyntaxError"
  89.        $outexp="语法错误"
  90.      elsif exp.class.to_s=="NameError"
  91.        $outexp="变量未定义"
  92.      elsif exp.class.to_s=="NoMethodError"
  93.        $outexp="方法未定义"
  94.      elsif exp.class.to_s=="NoMemoryError"
  95.        $outexp="内存占有过大"
  96.      elsif exp.class.to_s=="ArgumentError"
  97.        $outexp="参数错误"   #如果愿意此处可以自定义添加
  98.      else
  99.        $outexp=exp.class.to_s
  100.      end
  101.    
  102.    msg  = "◆ #{Time.now.strftime('%Y-%m-%d %H:%M:%S')}\n"
  103.    msg += "错误类型 :\n\t#{$outexp}\n"
  104.    msg += "错误信息 :\n\t#{exp.message}\n" if exp.message
  105.    msg += "错误可能发生的相关位置 :"
  106.    bt.each do |i|
  107.      msg += " \n\t#{i.name} : 第 #{i.line_no} 行"
  108.      msg += " : #{i.method_name}" if i.method_name
  109.    end
  110.    msg += "\n-------------66RPG-------------------\n"
  111.    File.open(BackTraceFileName, "a") do |file|
  112.      file.write(msg)
  113.    end
  114. end
  115. end

  116. # 回溯跟踪错误的类
  117. class BackTrace  
  118. BacktraceRegexp = /^Section([0-9]+):([0-9]+)(:in `(.+)')?$/
  119. def self.get_backtraces(bt)
  120.    r = []
  121.    bt.each do |i|
  122.      r << self.new(i)
  123.    end
  124.    r
  125. end  
  126. def initialize(line)
  127.    name, @line_no, @method_name =
  128.                                    BacktraceRegexp.match(line).to_a.values_at(1,2,4)
  129.    @name = get_section_name(name)
  130. end  
  131. attr_accessor :name
  132. attr_accessor :line_no
  133. attr_accessor :method_name  
  134. private
  135. def get_section_name(index)
  136.    $RGSS_SCRIPTS[index.to_i][1]
  137. end
  138. end
  139. begin
  140. si = ScriptInterpreter.new
  141. si.run
  142. end

  143. #==============================================================================
  144. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  145. #==============================================================================
复制代码

系统信息:本贴由本区版主认可为正确答案,66RPG感谢您的热情解答~
十年磨一剑,蓦然回首,年华如水,青春如歌。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-19 16:11

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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