私はそれをキャッチした後に、例外スタックトレースをerlangに書き込むことができますか?
try code_that_fails()
catch _:_ -> .....
キャッチブロックにスタックトレースを印刷するにはどうすればよいですか?そのブロックはすべての例外をキャッチしますが、スタックの印刷方法はわかりません...
私を助けてくれますか?
私はそれをキャッチした後に、例外スタックトレースをerlangに書き込むことができますか?
try code_that_fails()
catch _:_ -> .....
キャッチブロックにスタックトレースを印刷するにはどうすればよいですか?そのブロックはすべての例外をキャッチしますが、スタックの印刷方法はわかりません...
私を助けてくれますか?
get_stacktrace/0を参照すると、呼び出しプロセスで最後の例外のスタックトレースを取得できます。
try
code_that_fails()
catch
_:_ ->
erlang:display(erlang:get_stacktrace())
end
例では、try
は不要です。あなただけの例外が発生した場合
result = (catch code_that_fails()).
を行うことができ、catch
error code and stack trace含まタプルを返します。
例外をマスクできるので、これは一般的に悪い習慣とみなされます。別の答えに記述されているstacktraceアプローチは、ほぼ確実にあなたが望むものです。
try
は、元のcatch
の機能拡張です。それを使用する場合は、キャッチする例外タイプごとに句を指定し、適切に処理する必要があります。詳細および明確な例については、Erlang reference manualのセクション6.18/6.19を参照してください。
としてそれをマークしてください。あなたが*すべての例外を捕まえたいと思っているのでなければ、おそらくそれは望んでいないでしょう。いくつかのバグを見つけにくくすることができます。 –
@Adam Lindberg:ありがとう - それはdownvotesを説明するでしょう。私は私の答えを編集します。 –
皆さん、ありがとう! :) – Francesco
あなたの質問に対する答えは:
io:format("Backtrace ~p~n", [erlang:get_stacktrace()])
現在の関数は、リストの先頭にあります。 man 3erl erlang
またはerlang:get_stacktrace/0
フランチェスコあなたは答えの一つに満足している場合、単に 'catch'は一般的に悪いフォームと見なされている使用して、適切な/満足な答え – gleber