module ERRSettings
#▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
#请设置以下东东
# 游戏测试的时候,是否保存错误信息?(true是false不是)
SaveErrorData = true
# 回溯跟踪错误的文件名
BackTraceFileName = "Backtrace.txt"
#▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲
end
module RPG
module_function
def version
case
when defined? Hangup then 1.0
else 2.0
end
end
def debug?
$TEST or $DEBUG
end
end
class Reset < Exception
end
class ScriptInterpreter
include ERRSettings
CallSystemError = true
def run
Graphics.freeze
$scene = Scene_Title.new
$scene.main until $scene.nil?
Graphics.transition(RPG.version == 1 ? 20 : 30)
exit
rescue Reset => exp
raise
rescue SystemExit => exp
raise
rescue Exception => exp
exception(exp)
exit
end
private
def exception(exp)
save_backtrace(exp) if SaveErrorData or RPG.debug?
print(get_error_message(exp))
raise if CallSystemError and RPG.debug?
end
def get_error_message(exp)
if RPG.debug?
bt = BackTrace.get_backtraces(exp.backtrace)
if exp.class.to_s=="SyntaxError"
$outexp="语法错误"
elsif exp.class.to_s=="NameError"
$outexp="变量未定义"
elsif exp.class.to_s=="NoMethodError"
$outexp="方法未定义"
elsif exp.class.to_s=="NoMemoryError"
$outexp="内存占有过大"
elsif exp.class.to_s=="ArgumentError"
$outexp="参数错误" #如果愿意此处可以自定义添加
else
$outexp=exp.class.to_s
end
msg = "◆ 发生错误\n"
msg += "\n66RPG提醒您:请养成备份游戏文件的习惯。\n \n"
msg += "错误类型 :\n\t#{$outexp}\n"
msg += "错误信息 :\n\t#{exp.message}\n" if exp.message
msg += "错误可能发生的相关位置 :"
bt.each do |i|
msg += " \n\t#{i.name} : 第 #{i.line_no} 行"
msg += " : #{i.method_name}" if i.method_name
end
msg += " \n非常荣幸能为您发送错误报告\n"
else
msg = "内部发生错误强制结束。\n"
msg += "66RPG提醒您:请养成备份游戏文件的习惯。\n"
msg += "▲错误报告文件「#{BackTraceFileName}」已经保存。\n\n"
msg += " 非常荣幸能为您发送错误报告\n"
end
msg
end
def save_backtrace(exp)
bt = BackTrace.get_backtraces(exp.backtrace)
if exp.class.to_s=="SyntaxError"
$outexp="语法错误"
elsif exp.class.to_s=="NameError"
$outexp="变量未定义"
elsif exp.class.to_s=="NoMethodError"
$outexp="方法未定义"
elsif exp.class.to_s=="NoMemoryError"
$outexp="内存占有过大"
elsif exp.class.to_s=="ArgumentError"
$outexp="参数错误" #如果愿意此处可以自定义添加
else
$outexp=exp.class.to_s
end
msg = "◆ #{Time.now.strftime('%Y-%m-%d %H:%M:%S')}\n"
msg += "错误类型 :\n\t#{$outexp}\n"
msg += "错误信息 :\n\t#{exp.message}\n" if exp.message
msg += "错误可能发生的相关位置 :"
bt.each do |i|
msg += " \n\t#{i.name} : 第 #{i.line_no} 行"
msg += " : #{i.method_name}" if i.method_name
end
msg += "\n-------------66RPG-------------------\n"
File.open(BackTraceFileName, "a") do |file|
file.write(msg)
end
end
end
# 回溯跟踪错误的类
class BackTrace
BacktraceRegexp = /^Section([0-9]+):([0-9]+)(:in `(.+)')?$/
def self.get_backtraces(bt)
r = []
bt.each do |i|
r << self.new(i)
end
r
end
def initialize(line)
name, @line_no, @method_name =
BacktraceRegexp.match(line).to_a.values_at(1,2,4)
@name = get_section_name(name)
end
attr_accessor :name
attr_accessor :line_no
attr_accessor :method_name
private
def get_section_name(index)
$RGSS_SCRIPTS[index.to_i][1]
end
end
begin
si = ScriptInterpreter.new
si.run
end