假设我有这样一个东西:
try code_that_fails()
catch _:_ -> .....
在捕获块中如何打印堆栈跟踪?该块捕获所有异常,但我不知道如何打印堆栈...
你能帮我吗?
从Erlang 21.0起,有一种新的官方方法可以获取堆栈跟踪。在异常的第三个参数中,try表达式中的可选模式匹配将包含堆栈跟踪:
try
code_that_fails()
catch
_:_:Stacktrace ->
erlang:display(Stacktrace)
end
对于 Erlang/OTP 版本 20 及以下,您需要使用 get_stacktrace/0 函数,该��数允许您获取调用进程中最后一个异常的堆栈跟踪:
try
code_that_fails()
catch
_:_ ->
erlang:display(erlang:get_stacktrace())
end
你的问题的答案是:
io:format("Backtrace ~p~n", [erlang:get_stacktrace()])
man 3erl erlang
或erlang:get_stacktrace/0。try
;您只需要执行result = (catch code_that_fails()).
catch
会返回一个包含错误代码和堆栈跟踪的元组。try
是原始catch
功能的扩展;如果使用它,您需要为每个要捕获的异常类型指定子句,并适当地处理它们。有关详细信息和清晰的示例,请参见Erlang参考手册的6.18/6.19节。catch
通常被认为是不好的形式。如果您不知道要捕获每个异常,那么您可能不需要它。它可能会使一些错误更难以发现。 - Adam Lindberg