2009-05-22 15 views
0

例:ここCommandLine :: Applicationは私の例外をメインで呑み込み、避ける方法は?

$ ruby test.rb 
ERROR: foo 

し、問題が開始さで

require 'commandline' 
class App < CommandLine::Application 
    def initialize 
    end 
    def main 
     raise 'foo' 
    end 
end 

結果:開発中は常に私のコードに深いどこかで発生した例外があるだろうと私はスタックトレースを確認する必要があり、いくつかのマングルされていませんメッセージ。 ホタルブクロ

おかげで、私は今、このソリューションを使用しています:もちろん

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 

フォーマッタは必要ありませんが、私はそれ彼らが最初にフォーマットされている方法を好みます。

答えて

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 
+0

が、私はあまりにも私のQおよびフォーマッタにこれを追加しました。 – mark

0

私がこれまでに見つかった解決策:使用されていない他の何かに

  1. 変更CommandLine::Application
  2. CommandLine::Application_wo_AutoRunにリネーム方法main、例えば `インスタンスを返します
  3. 呼び出し静的メソッド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 

documentationApplication_wo_AutoRunに言及しているが、さらに進行する方法を支援していません。勉強しているのはここだけでした。

関連する問題