Last active
April 18, 2020 18:00
-
-
Save masked-rpgmaker/ab51a16f0626651ccdfc6e1914c48605 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#============================================================================== | |
# Error Trace | v1.0.1 | por Brandt | |
# | |
# para RPG Maker VX Ace | |
#------------------------------------------------------------------------------ | |
# Sobrescreve o gerenciamento de erros padrão do RPG Maker para mostrar | |
# mensagens mais esclarecedoras para scripters. Tem efeito apenas quando o | |
# jogo é executado em modo de teste. | |
#============================================================================== | |
module ErrorTrace | |
VERSION = [1, 0, 1] | |
end | |
#============================================================================== | |
# ** ErrorTrace | |
#------------------------------------------------------------------------------ | |
# Módulo principal do script. | |
#============================================================================== | |
module ErrorTrace | |
#-------------------------------------------------------------------------- | |
# * Rastreia uma exceção | |
#-------------------------------------------------------------------------- | |
def self.trace(exception) | |
RGSSScriptTrace.new(exception) | |
end | |
end | |
#============================================================================== | |
# ** ErrorTrace::Trace | |
#------------------------------------------------------------------------------ | |
# Classe para rastreamento de exceção. | |
#============================================================================== | |
class ErrorTrace::Trace < Exception | |
#-------------------------------------------------------------------------- | |
# * Inicialização do objeto | |
# exception : Exception | |
#-------------------------------------------------------------------------- | |
def initialize(exception) | |
@exception = exception | |
super(message) | |
end | |
#-------------------------------------------------------------------------- | |
# * Converte o objeto em string | |
#-------------------------------------------------------------------------- | |
def to_s | |
[headline, *format_backtrace].join("\n\t") | |
end | |
#-------------------------------------------------------------------------- | |
# * Classe da exceção | |
#-------------------------------------------------------------------------- | |
def class | |
@exception.class | |
end | |
#-------------------------------------------------------------------------- | |
# * Mensagem da exceção | |
#-------------------------------------------------------------------------- | |
def message | |
[*format_backtrace].join("\n") | |
end | |
#-------------------------------------------------------------------------- | |
# * Rastreamento | |
#-------------------------------------------------------------------------- | |
def backtrace | |
@exception.backtrace | |
end | |
#-------------------------------------------------------------------------- | |
# * Cabeçalho | |
#-------------------------------------------------------------------------- | |
def headline | |
"#{@exception.class}: #{@exception.message}" | |
end | |
#-------------------------------------------------------------------------- | |
# * Formata o backtrace da exceção | |
#-------------------------------------------------------------------------- | |
def format_backtrace | |
@exception.backtrace | |
end | |
end | |
#============================================================================== | |
# ** ErrorTrace::RGSSScriptTrace | |
#------------------------------------------------------------------------------ | |
# Classe para rastreamento de exceção em um script RGSS. | |
#============================================================================== | |
class ErrorTrace::RGSSScriptTrace < ErrorTrace::Trace | |
#-------------------------------------------------------------------------- | |
# * Formata o backtrace da exceção | |
#-------------------------------------------------------------------------- | |
def format_backtrace | |
super.map do |entry| | |
entry.sub(/{(\d+)}/) { $RGSS_SCRIPTS[$1.to_i][1] } | |
end | |
end | |
end | |
#============================================================================== | |
# ** rgss_main | |
#------------------------------------------------------------------------------ | |
# Esta função executa um bloco de código que pode ser reiniciado usando a | |
# tecla F12. | |
#============================================================================== | |
alias rgss_main_without_error_trace rgss_main | |
def rgss_main(&block) | |
begin | |
rgss_main_without_error_trace(&block) | |
rescue Exception => e | |
e = ErrorTrace.trace(e) if $TEST | |
raise e | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment