2012-07-18 13 views
26

En una aplicación JavaScript compleja (con jQuery y Ember), el JavaScript ocasionalmente se bloquea aleatoriamente, durante la carga de la página o cuando realizo una acción en la página. El error es el siguiente (screenshot):Google Chrome: Cómo depurar errores aleatorios "Número máximo de la pila de llamadas excedidas"

Uncaught RangeError: Maximum call stack size exceeded 
    Class.proto 
    Class.proto 
    ... 

... con varias páginas de líneas traza Class.proto pila, pero no hay información de la fuente/línea en absoluto, incluso en la parte inferior de la traza.

Sé que esto apunta a la recursión infinita, y esto podría ocurrir en el sistema de eventos, pero no hay un punto de partida obvio para mí.

He podido reproducir este solo en Chrome Canary (22.0.1209.0), no Chrome estable o Firefox. La aplicación no está hablando con ningún servicio externo ni realiza ninguna solicitud de Ajax.

Dado que ocurre ocasionalmente, y sin causa aparente, y como no hay un rastro de pila utilizable, tengo problemas para encontrar la causa.

Mi pregunta es: ¿Qué puedo hacer para solucionar este problema?

+0

Probablemente ya haya considerado esto, pero como esto solo está sucediendo en la versión canaria, ¿podría ser un error canario? ¿Has probado las compilaciones beta o dev Chrome para ver si el problema ocurre allí? –

+0

Puede identificar la función problemática en el generador de perfiles. Debe ser la pieza más larga. – katspaugh

+0

Existe una alta probabilidad de que sea un error canario. – JL235

Respuesta

15

Habilite 'Romper las excepciones' en la barra de herramientas del desarrollador de Chrome. Utilice esta This is the icon icono en el pie de página de la barra de herramientas en la pestañaFuentes (hay 3 estados!)

Se debe dejar su código y se puede ver la pila!

+7

¡Gran idea, gracias! Curiosamente, Chrome se rehúsa a identificarlo con cualquier línea fuente. "Break on Uncaught" no se rompe en realidad en "Unbeught RangeError", y con "break on all" no he podido reproducir el crack. Entonces eso apunta a un problema en Chrome. Las fuentes informadas me dicen que hay un error en V8 (en Canary y dev) que está causando esto, y ya hay una solución, esperando a ser lanzada. Así que dejaré este tema y probaré mi aplicación en Chrome estable por ahora. –

+0

Recientemente me encontré con un bloqueo de desbordamiento de pila muy complicado en el paquete de react-native. Lo que ayuda es pasar: --stack_trace_limit = 32 ya que el tamaño de pila predeterminado que se muestra en el depurador es demasiado bajo :( –

Cuestiones relacionadas