Skip to content

Instantly share code, notes, and snippets.

@masked-rpgmaker
Last active April 18, 2020 18:00
Show Gist options
  • Save masked-rpgmaker/ab51a16f0626651ccdfc6e1914c48605 to your computer and use it in GitHub Desktop.
Save masked-rpgmaker/ab51a16f0626651ccdfc6e1914c48605 to your computer and use it in GitHub Desktop.
#==============================================================================
# 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