示例:
require 'commandline'
class App < CommandLine::Application
def initialize
end
def main
raise 'foo'
end
end
结果
$ ruby test.rb
ERROR: foo
这里问题就出现了:在开发过程中,我的代码中总会有异常抛出异常,我需要查看堆栈跟踪而不是一些错误的消息。
感谢猖獗,我现在正在使用此解决方案:
require 'commandline'
class App < CommandLine::Application
def initialize
end
def main
raise 'foo'
rescue Exception => e
puts format_like_real_exception e
end
def format_like_real_exception(e)
s = ''
b = e.backtrace
s << b.shift << ': ' << e.message << "\n"
b.each { |l| s << "\t" << l << "\n" }
s
end
end
当然格式化程序不是必需的,但我更喜欢它们最初格式化的方式。
答案 0 :(得分:1)
或者,你可以拯救main
中的错误:
require 'rubygems'
require 'commandline'
class App < CommandLine::Application
def initialize
end
def main
raise 'foo'
rescue Exception => e
puts "BACKTRACE:"
puts e.backtrace
end
end
答案 1 :(得分:0)
到目前为止我找到的解决方案:
CommandLine::Application
更改为CommandLine::Application_wo_AutoRun
main
重命名为未使用的其他内容,例如`start App.run
,它返回实例,然后在其上调用start
方法完整示例:
require 'commandline'
class App < CommandLine::Application_wo_AutoRun
def initialize
end
def start
raise 'foo'
end
end
app = App.run
app.start
documentation提及Application_wo_AutoRun
,但没有协助如何进一步处理。只有来源学习在这里有所帮助。