2012-10-10 68 views
24

Cuando está en el bucle infinito o llamadas recursivas, básicamente el navegador deja de responder a cualquier cosa (ya sea en Chrome o FF). No puede ver los registros, no puede acceder al depurador, incluso no puede abrir la consola. El navegador simplemente se congela. Esto es muy molesto Parece que no puedo hacer nada más que sentarme aquí rascándome la cabeza ... ¿Alguien puede arrojar luz sobre cómo resolver esto?¿Cómo depurar javascript cuando entra en bucles infinitos y llamadas recursivas en Javascript?

+3

Establecer un punto de interrupción en el depurador antes de iniciar el bucle? – PhonicUK

+0

@PhonicUK no funciona ..... – lkahtz

Respuesta

44

Otro truco que podría intentar es tener abiertas las herramientas de desarrollador web en Chrome e intentar presionar Pause cuando aparentemente se bloquea el navegador. Entonces debería romperse en la línea donde se está ejecutando actualmente. Con algunos pasos, debes llegar al fondo de esto.

Suponiendo que usted sabe (o cree) la función donde el bucle infite ocurre que podría añadir un código como éste:

var calls = 0; 
function iSuspectToBeLoopingInfititely() { 
    calls += 1; 
    if (calls > 100) { debugger; } 
} 

Esto detendrá el depurador de JavaScript en Chrome una vez que el método ha sido llamado 100 veces. Nota: Chrome solo interrumpirá las llamadas debugger; si realmente tiene la ventana Herramientas del desarrollador abierta.

+1

Gracias, @Tigraine. ¡Esto funciona! – lkahtz

+2

Buena respuesta. Nunca pensé en usar el botón 'pausa' (tenía un error difícil de reproducir que causaba una alta carga de cpu) –

+2

Sigo volviendo a esta respuesta. Configurar relojes arbitrarios en # de ejecuciones por segundo y romper cualquier función que viole sería una excelente adición a las herramientas de desarrollo del navegador. – Barney

0

Tuve problemas en Chrome, me gustaría ver en la ventana del navegador 'Paused in depurador', pero no pude ver dónde, ya que tal vez Chrome se confundió porque estaba en un bucle ... En Firefox, reconoció que también tomaba largo y luego aparece una ventana emergente después de 30 segundos a 1 minuto diciendo que el archivo y la línea general # está congelada, lo que ayuda a depurar aún más y establecer puntos de interrupción en esa área.

-2

Puede detener un bucle infinito utilizando el siguiente código.

debugger;

Cuestiones relacionadas