1

見つけられなかったエラーで長い間髪を引っ掻いていただけです。それはアリティの例外であることが判明しましたが、どうやら EDT で発生したため、「見る」ことができませんでした。ターミナルから実行すると「lein run」ターミナルに表示されず、Emacs から実行すると Emacs バッファに表示されませんでした。

非常に長い時間の後、私はこれをやることになりました:

(try (function-call-with-arity-error ...) (catch Exception e (println e)

そして、ついに、これのおかげで、これが印刷されているのを見ることができました:

#<ArityException clojure.lang.ArityException: wrong number of args passed to...

したがって、エラーを見つけることができました。

そして、私がこれを行うと:

(do 
   (println "trying...")
   (arity-error-here-on-purpose) ; this ones throws the arity error
   (println "done")
)

次に、端末は「trying...」を出力しますが、「done...」にはなりません。

デフォルトのキャッチされない例外ハンドラーを設定しようとしました: 例外がキャッチされません。あたかもプログラムまたは EDT がアリティ例外の後に「スタック」したかのようです (どこにも何も表示されません)。

次回はどのように対処すればよいでしょうか。どこにもメッセージが表示されなかったので、見つけるのに非常に長い時間がかかりました。繰り返しますが、'lein run' ターミナルには何もありません。また、Emacs バッファーにも何もありません。

EDT で発生するはずの呼び出しを try / catch 手動でラップし、例外をログ/印刷する関数を作成する必要がありますか?

また、これは比較的「長い」Clojure アプリであることに注意してください: 1000 行のコードなので、ここに貼り付けることができず、短い例でその動作を再現できませんでした (ただし、私のアプリでは一貫して発生します)。

4

1 に答える 1

0

キャッチされていない例外ハンドラーをスレッドに登録できるため、EDT で発生する可能性のあるすべての呼び出しをラップする必要はありません。

1 つを EDT に登録して、目的の動作が得られるかどうかを確認してください。

于 2013-03-26T18:23:38.127 に答える