2012-04-06 11 views
5

Me he dado cuenta de que con Firefox/Firebug (mi entorno de desarrollo principal), algunos errores producen rastros de pila, mientras que otros no. Al principio pensé que esto tenía algo que ver con si generaba el error (por ejemplo, un nuevo error ("foo")) o si Javascript lo generaba (por ejemplo, undefinedFoo + = 1), pero he notado que está sucediendo con ambos tipos de erroresCon Firefox/Firebug, ¿por qué solo obtiene StackTraces con algunos errores?

Entonces, mi pregunta es, ¿alguien sabe cuál es la causa? ¿Es aleatorio o hay algún patrón/lógica para ello? ¿Es solo que Firefox y/o Firebug son cojos o también lo hacen otros navegadores? Y lo más importante, ¿hay algo que pueda hacer para controlarlo (específicamente para que siempre me dé rastros de pila)?

Esta no es una pregunta crucial (ya que siempre puedo arrojar un "console.trace()" justo antes de la línea en la que se produce el error), pero tengo curiosidad si alguien sabe la respuesta.

********** ********** EDITAR

me encontré con este tema: http://groups.google.com/group/firebug/browse_thread/thread/1f32df8b96ec1d30/64b9074cb99056c2?pli=1 que menciona que Firefox no proporciona Firebug con stacktraces si el el error no es una instancia de Error. En otras palabras, si arrojas algo que no es nuevo Error ("foo"), no obtendrás un stacktrace.

Sin embargo, esto no me ayuda, ya que no estoy viendo stacktraces incluso cuando arrojo un nuevo error().

+0

Aunque dudo que importe, probablemente debería mencionar que estoy en Linux (en el caso de que Firefox tenga un error específico de Linux al perder la stacktrace). – machineghost

+0

¿Soy el único que ve errores de stack-trace-less en Firefox? ¿O los ven los demás y nadie sabe por qué Firefox hace eso? – machineghost

+1

Encontré una respuesta parcial. Resulta que Firebug tiene una preferencia "secreta" (es decir, sobre: ​​config) que hace que no muestre stacktraces: extensions.firebug.showStackTrace. Cuando revisé about about: config, encontré que esta preferencia se estableció en falso (lo cual es extraño, ya que no recuerdo haberlo hecho nunca ...). Sin embargo, incluso con lo establecido en verdadero (e incluso después de reiniciar Firefox) todavía no veo rastros de pila en algunos errores :-( – machineghost

Respuesta

2

¡Lo encontré! Resulta que el patrón del módulo es el problema. Aquí hay un ejemplo simple:

var OuterModule = (function(module){ 
    module.throwError = function() { 
     throw new Error("This has no stack trace!"); 
    }; 
    return module; 
})({}); 
OuterModule.throwError(); 

Por alguna razón, ya que el patrón módulo esconde throwError función dentro del alcance del módulo, Firebug/Firefox es incapaz de rastrear correctamente.

El hombre que tomó para siempre también se da cuenta; Espero que alguien más se beneficie de mi sufrimiento :-)

+0

Como nota al margen, esto claramente no es una limitación inherente de Firebug/Firefox, porque si agregas un "console.trace()" justo antes de lanzar el nuevo Error, obtendrás un rastro de pila perfectamente utilizable. Por lo tanto, el problema no es que Firefox no pueda manejar rastros de pila que se originan desde dentro de "módulos"; el problema es que Firefox parece tener dificultades para conectar esos rastreos de pila a errores que ocurren dentro de "módulos". – machineghost

+0

Observé un comportamiento similar y también tuve la sensación de que estaba relacionado con errores de la aplicación arrojados con ** nuevo error ** en lugar de error lanzado por el sistema - ¡Gracias por esta publicación! –

Cuestiones relacionadas