2010-01-07 13 views
5

Estoy intentando iniciar una aplicación de Erlang que está fallando. Todo lo que veo en la cáscara es:¿Cómo saber por qué una aplicación Erlang no se está iniciando?

=INFO REPORT==== 7-Jan-2010::17:37:42 === 
    application: ui 
    exited: {shutdown,{ui_app,start,[normal,[]]}} 
    type: temporary 

¿Cómo puedo obtener Erlang que me diera más información sobre por qué la aplicación no se inicia? Actualmente no hay otra salida en el shell.

Respuesta

13

Usted podría intentar el lanzamiento de la cáscara con más apoyo de registro:

erl -boot start_sasl

esto podría conseguir dar un poco más detalles.

+0

Si ya tiene un Erlang shell escriba: aplicación: iniciar (SASL). –

+0

Esto no parece hacer ninguna diferencia para una falla de inicio de la aplicación. (Ejecuté la aplicación: start (sasl) desde el shell.) – goertzenator

0

Es un dolor, pero la forma en que lo hago es a la manera antigua, escribiendo io: format en la función de inicio de la aplicación (es decir, el código del módulo con el comportamiento de la aplicación) y trabajando línea de falla :(

la fuerza bruta y la ignorancia a veces es su único hombre ...

+0

Sí - I _hate_ sticking io: formatos en el código solo para descubrir dónde se produce un bloqueo ... que los rastros de la pila Erlang darían números de línea exactos para este tipo de cosas como las huellas de pila lo hacen en otros idiomas. –

+0

En lugar de usar el formato io: es mejor usar las macros eunit de depuración, como? DebugHere(),? DebugVal (Val),? DebugMsg (Msg) o? DebugFmt (String, [Arg1, Arg2, ...]) . – pedromanoel

+0

Bueno, ya que este comentario fue escrito por mí, la nueva versión (R15B) de Erlang ahora tiene los números de línea en stacktrace. –

2

Hay una patch (tp/supervisor de-pass-on-errores) que se incluyó en la liberación R16b. Este parche hace que la salida Las razones aparecen en los mensajes de registro de detención de la aplicación, que se vuelven mucho más útiles que los mensajes de estilo {shutdown,{ui_app,start,[normal,[]]}} que hemos tenido hasta ahora.

Ésta es la entrada en el README:

OTP-10490 == stdlib == 

    If a child process fails in its start function, then the 
    error reason was earlier only reported as an error report 
    from the error_handler, and supervisor:start_link would only 
    return {error,shutdown}. This has been changed so the 
    supervisor will now return {error,{shutdown,Reason}}, where 
    Reason identifies the failing child and its error reason. 
    (Thanks to Tomas Pihl) 
+1

Tampoco llegó a R15B03, pero * está * en R16B01. Este cambio es extremadamente útil. – goertzenator

+0

Gracias, actualicé la respuesta. – legoscia

Cuestiones relacionadas