while infinito for ejemplos ciclo bucle javascript google-chrome infinite-loop jsfiddle

javascript - infinito - Cancelar ejecución infinita de bucle en jsfiddle



ciclo while en javascript (7)

Cuando obtiene un bucle infinito en jsfiddle en Chrome, su única opción (que yo sepa) es cerrar la pestaña. ¡Por supuesto, esto significa que pierdes todo tu trabajo en la ventana actual! ¿Hay alguna manera fácil de detener un script infinitamente ejecutado?

  1. Tengo las herramientas de desarrollador abiertas porque estaba depurando.
  2. Puedo pausar el script y pasar por el ciclo.
  3. No puedo encontrar ningún lugar para detener el guión.
  4. No puedo modificar el script o las variables para detener el ciclo infinito (porque la ejecución del script se produce en un iframe en un dominio diferente, por lo que no se permite modificar los datos en el iframe con JavaScript y se genera una excepción en la consola).

Todo comenzó porque decidí cambiar direcciones en mi loop desde

for (var c = 0; c <= 11; c++)

a

for (var c = 12; c > 0; c++)

Pero como puedes ver arriba, olvidé cambiarlo de c++ a c-- .

¿¿Algunas ideas?? Todavía tengo la pestaña abierta y espero recuperarla sin cerrar la pestaña :-)


Cómo hacerlo sin el modo desarrollador:

  • Abre una nueva pestaña
  • Abra el Administrador de tareas con Shift-Escape
  • Matar la tarea
  • Use el botón Atrás para la pestaña eliminada (JSFiddle no ejecutará el script)
  • Arreglar error
  • Actualizar

Con el modo de desarrollador, vaya a los recursos y encuentre su secuencia de comandos y cópiela y péguelo en un documento de texto o una nueva ventana. Si no puede encontrarlo en los recursos, haga una búsqueda de una variable o línea de código que utilizó.


Ejecuta Process Explorer y elimina el proceso de Chrome que usa mucha CPU ... "bloqueará" la página y te permitirá volver a cargar ...


El mismo problema surgió aquí, abrí la consola de JavaScript en un estado de secuencia de comandos en pausa. (Lo pausó usando las herramientas de desarrollo)

Luego cambié el valor de la variable para que el ciclo while termine.


En caso de que otros estén bloqueados después de leer las otras respuestas, esto es lo que funcionó para mí (Chrome, Mac). Para mí, la pestaña JSFiddle estaba ''bloqueada'' pero el resto de Chrome respondía. Tenía la Consola de JavaScript abierta en el panel de Recursos, pero tampoco respondía. Recargar la página en este estado no ayudó porque JSFiddle me daría el script antes de obtener nada.

Al final, esto funcionó para mí; tal vez te ayude también ...

  • Si bien la página no responde, ve a Chrome > Preferences > Privacy y deshabilita JavaScript.
  • Espere a que la página muera (unos 4 o 5 minutos para mí); el ícono de la cara triste aparece en esa pestaña.
  • Presiona el botón Atrás. Debería parecer que JSFiddle se está cargando, pero no lo hará porque curiosamente, JSFiddle necesita JavaScript solo para representar una página.
  • View > Developer > View source
  • Mi guión, solo un poco destrozado, estaba sentado inocente como en un div llamado ''panel_js'' .
  • Resalta, copia, respira de nuevo, aprende la lección.

No pude iniciar el Administrador de tareas de Chrome mientras la pestaña de bucle estaba activa. Tuve que seleccionar otra pestaña. Luego presioné Shift-Escape para iniciar el Administrador de tareas, eliminar el proceso JSFiddle, volver a seleccionar la pestaña y presionar el botón Atrás para mostrar la página sin ejecutar el script.

JSFiddle carga el panel "resultado" utilizando un iframe. A partir de junio de 2016, la URL del marco es la URL Fiddle más "/ show /". Inspeccioné el código fuente del iframe y descubrí que carga otra URL con "/ light /". Una de estas URL debe contener su código fuente.

Si su navegador es compatible con el esquema de URI view-source , puede acceder al código fuente de su violín de la siguiente manera:

  • view-source: jsfiddle.net/user_name/fiddle_hash/revision/light/
  • view-source: jsfiddle.net/user_name/fiddle_hash/revision/show/

Una forma de romper el ciclo infinito es lanzar una excepción no controlada, que detendrá la ejecución de la pila de llamadas actual. Para hacerlo:

  1. pausar el debutante
  2. encuentre una declaración prometedora dentro del ciclo, por ejemplo, una llamada a la función: foo.bar(args)
  3. en la consola, sobrescriba la función para lanzar: foo.bar=function(){throw 42;}
  4. reanudar el depurador

trabajó para mi. No lo he intentado, pero creo que al sobrecargar getter o setter puede utilizar el truco descrito anteriormente también para asignaciones y lecturas, no solo para llamadas a funciones. Además, al establecer una variable como indefinida, puede causar un error fatal (y así romper el ciclo) si el campo de esta variable se utiliza en el ciclo. Por ejemplo, delete foo.tab romperá foo.tab[42] o foo.tab.bar . Por alguna razón, simplemente escribiendo foo=undefined en la consola, no funcionará (tal vez defina una variable local para la ventana de la consola denominada foo).