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

Project1

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

[已经解决] 【不知道能不能实现的东西】出错后记录下出错代码的位置

[复制链接]

Lv1.梦旅人

梦石
0
星屑
170
在线时间
25 小时
注册时间
2016-6-18
帖子
58
跳转到指定楼层
1
发表于 2018-1-25 10:53:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
我在main那儿搞了几个rescue以便在根目录下存储错误的原因,再回到主菜单
但是
filename = $!.message.sub("No such file or directory - ", "")
这个玩意儿只能保存下错误的内容
请问能否把“脚本xx的第xx行 发生了xxx”这句话也保存下来呢

Lv3.寻梦者

梦石
0
星屑
1387
在线时间
184 小时
注册时间
2007-2-28
帖子
145
2
发表于 2018-1-25 11:55:45 | 只看该作者
RUBY 代码复制
  1. module ERRSettings
  2.   #▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
  3.   #请设置以下东东
  4.   # 游戏测试的时候,是否保存错误信息?(true是false不是)
  5.   SaveErrorData = true
  6.  
  7.   # 回溯跟踪错误的文件名
  8.   BackTraceFileName = "Backtrace.txt"
  9.   #▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
  10. end
  11.  
  12. module RPG
  13.   module_function
  14.   def version
  15.     case
  16.       when defined? Hangup then 1.0
  17.       else 2.0
  18.     end
  19.   end
  20.   def debug?
  21.     $TEST or $DEBUG
  22.   end
  23. end
  24. class Reset < Exception
  25. end
  26. class ScriptInterpreter
  27.  
  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.  
  45.   private
  46.  
  47.   def exception(exp)
  48.     save_backtrace(exp) if SaveErrorData or RPG.debug?
  49.     print(get_error_message(exp))
  50.     raise if CallSystemError and RPG.debug?
  51.   end
  52.  
  53.   def get_error_message(exp)
  54.     if RPG.debug?
  55.       bt = BackTrace.get_backtraces(exp.backtrace)
  56.  
  57.       if exp.class.to_s=="SyntaxError"
  58.         $outexp="语法错误"
  59.       elsif exp.class.to_s=="NameError"
  60.         $outexp="变量未定义"
  61.       elsif exp.class.to_s=="NoMethodError"
  62.         $outexp="方法未定义"
  63.       elsif exp.class.to_s=="NoMemoryError"
  64.         $outexp="内存占有过大"
  65.       elsif exp.class.to_s=="ArgumentError"
  66.         $outexp="参数错误"   #如果愿意此处可以自定义添加
  67.       else
  68.         $outexp=exp.class.to_s
  69.       end
  70.  
  71.       msg  = "◆ 发生错误\n"
  72.       msg += "\n66RPG提醒您:请养成备份游戏文件的习惯。\n \n"
  73.       msg += "错误类型 :\n\t#{$outexp}\n"
  74.       msg += "错误信息 :\n\t#{exp.message}\n" if exp.message
  75.       msg += "错误可能发生的相关位置 :"
  76.       bt.each do |i|
  77.         msg += " \n\t#{i.name} : 第 #{i.line_no} 行"
  78.         msg += " : #{i.method_name}" if i.method_name
  79.       end
  80.       msg += "  \n非常荣幸能为您发送错误报告\n"
  81.     else
  82.       msg  = "内部发生错误强制结束。\n"
  83.       msg += "66RPG提醒您:请养成备份游戏文件的习惯。\n"
  84.       msg += "▲错误报告文件「#{BackTraceFileName}」已经保存。\n\n"
  85.       msg += "  非常荣幸能为您发送错误报告\n"
  86.     end
  87.     msg
  88.   end
  89.  
  90.   def save_backtrace(exp)
  91.     bt = BackTrace.get_backtraces(exp.backtrace)
  92.  
  93.       if exp.class.to_s=="SyntaxError"
  94.         $outexp="语法错误"
  95.       elsif exp.class.to_s=="NameError"
  96.         $outexp="变量未定义"
  97.       elsif exp.class.to_s=="NoMethodError"
  98.         $outexp="方法未定义"
  99.       elsif exp.class.to_s=="NoMemoryError"
  100.         $outexp="内存占有过大"
  101.       elsif exp.class.to_s=="ArgumentError"
  102.         $outexp="参数错误"   #如果愿意此处可以自定义添加
  103.       else
  104.         $outexp=exp.class.to_s
  105.       end
  106.  
  107.     msg  = "◆ #{Time.now.strftime('%Y-%m-%d %H:%M:%S')}\n"
  108.     msg += "错误类型 :\n\t#{$outexp}\n"
  109.     msg += "错误信息 :\n\t#{exp.message}\n" if exp.message
  110.     msg += "错误可能发生的相关位置 :"
  111.     bt.each do |i|
  112.       msg += " \n\t#{i.name} : 第 #{i.line_no} 行"
  113.       msg += " : #{i.method_name}" if i.method_name
  114.     end
  115.     msg += "\n-------------66RPG-------------------\n"
  116.     File.open(BackTraceFileName, "a") do |file|
  117.       file.write(msg)
  118.     end
  119.   end
  120. end
  121.  
  122. # 回溯跟踪错误的类
  123. class BackTrace  
  124.   BacktraceRegexp = /^Section([0-9]+):([0-9]+)(:in `(.+)')?$/
  125.   def self.get_backtraces(bt)
  126.     r = []
  127.     bt.each do |i|
  128.       r << self.new(i)
  129.     end
  130.     r
  131.   end  
  132.   def initialize(line)
  133.     name, @line_no, @method_name =
  134.                                     BacktraceRegexp.match(line).to_a.values_at(1,2,4)
  135.     @name = get_section_name(name)
  136.   end  
  137.   attr_accessor :name
  138.   attr_accessor :line_no
  139.   attr_accessor :method_name  
  140.   private
  141.   def get_section_name(index)
  142.     $RGSS_SCRIPTS[index.to_i][1]
  143.   end
  144. end
  145. begin
  146.   si = ScriptInterpreter.new
  147.   si.run
  148. end

点评

成功了,感谢!  发表于 2018-1-25 14:38
好吧是因为我原来的Main没删掉  发表于 2018-1-25 13:24
emmm加上去之后游戏要关两次才能关掉  发表于 2018-1-25 13:20

评分

参与人数 1星屑 +80 +1 收起 理由
RyanBern + 80 + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-30 23:11

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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