Project1

标题: 请问下如何根据运行游戏时的报错提示定位script脚本的错误 [打印本页]

作者: taeckle    时间: 2019-10-7 04:11
标题: 请问下如何根据运行游戏时的报错提示定位script脚本的错误
每次测试运行游戏报错都不知道是脚本里哪里出错的...

所以想求个脚本,一旦报错就能定位出错误的语句和位置

大神们要是有现成的话就分享个给咱吧,多谢了!


作者: hyrious    时间: 2019-10-7 11:10
1. 修改 Main,在最后一个 end 前添加一段捕捉错误的代码:
  1. rescue Exception => e
  2.   [email protected] if $@
  3.   msg = ["#{e.class}: #{e.message}"]
  4.   e.backtrace.each do |c|
  5.     break if c[':1:']
  6.     if c =~ /^(.+):(\d+)(?::in `(.*)')?$/
  7.       file, line, code = $1, $2, $3
  8.       next if file == __FILE__
  9.       cd = Regexp.escape(File.join(Dir.getwd, ''))
  10.       file = file.sub(/^#{cd}/, '')
  11.       if inner = file =~ /^Section(\d+)$/
  12.         id = $1.to_i
  13.         file = "[#{$RGSS_SCRIPTS[id][1]}]"
  14.       end
  15.       code = code && ": #{code}"
  16.       msg << "   #{file} #{line}#{code}"
  17.     else
  18.       msg << "   #{c}"
  19.     end
  20.   end
  21.   print msg.join("\n")
复制代码
和本来就有的 rescue Errno::ENOENT 对齐放
2.修改 Interpreter 7,在 def command_355 对应的 end 前添加以下代码,方便输出报错事件的位置
  1.   rescue Exception
  2.     event = get_character(@event_id)
  3.     print "Map: #{@map_id}, Event: #{@event_id} (#{event.x}, #{event.y})"
  4.     raise
复制代码

效果大致如下:



作者: soulsaga    时间: 2019-10-7 15:17
本帖最后由 soulsaga 于 2019-10-7 15:20 编辑

可以定位事件脚本的事件位置么..
作者: taeckle    时间: 2019-10-8 23:15
hyrious 发表于 2019-10-7 11:10
1. 修改 Main,在最后一个 end 前添加一段捕捉错误的代码:
和本来就有的 rescue Errno::ENOENT 对齐放
2. ...

求大神再发一个定位出脚本出错的位置吧
作者: taeckle    时间: 2019-10-15 03:01
本帖最后由 taeckle 于 2019-10-15 03:02 编辑
soulsaga 发表于 2019-10-7 15:17
可以定位事件脚本的事件位置么..


大神请问下报错定位可以到行的脚本你有嘛,比如像这个:

报错.PNG (4.33 KB, 下载次数: 8)

报错.PNG

作者: taeckle    时间: 2019-10-17 12:22
继续求一个能定位到行的报错脚本................







欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1