2009-08-26 14 views

Respuesta

19

Vea get_stacktrace/0 que le permiten obtener la pila de la última excepción en el proceso de llamada.

try 
    code_that_fails() 
catch 
    _:_ -> 
     erlang:display(erlang:get_stacktrace()) 
end 
4

En su ejemplo, no necesita el try; sólo se puede hacer

result = (catch code_that_fails()). 

Si se produce una excepción catch, devuelve una tupla que contiene el error code and stack trace.

Tenga en cuenta que esto generalmente se considera una mala práctica, ya que puede enmascarar excepciones. El enfoque de stacktrace descrito en otra respuesta es casi seguramente lo que quieres.

try es una extensión de la funcionalidad original catch; si lo usa, debe especificar cláusulas para cada tipo de excepción que le gustaría captar y manejarlas de manera adecuada. Consulte las secciones 6.18/6.19 del Erlang reference manual para obtener detalles y ejemplos claros.

+2

Sólo el uso de 'catch' generalmente se considera de mala educación. Si no sabe que quiere capturar * cada * excepción, probablemente no lo quiera. Puede hacer que algunos errores sean mucho más difíciles de encontrar. –

+1

@ Adam Lindberg: Gracias - eso explicaría los votos a la baja. Editaré mi respuesta. –

+0

¡Muchas gracias a todos ustedes! :) – Francesco

4

una respuesta para su pregunta es:

io:format("Backtrace ~p~n", [erlang:get_stacktrace()]) 

La función actual está a la cabeza de la lista. Lea más en man 3erl erlang o erlang:get_stacktrace/0

Cuestiones relacionadas