JavaScript: ¿Hay alguna forma de hacer que Chrome rompa todos los errores?

258

Estoy buscando un equivalente en Chrome para la funcionalidad "romper todos los errores" de Firebug. En la pestaña Scripts, Chrome tiene una "pausa en todas las excepciones", pero esto no es lo mismo que romper todos los errores.

Por ejemplo, al cargar una página con el siguiente código, me gustaría que Chrome salte en la línea foo.bar = 42. En cambio, incluso cuando habilito la "Pausa en todas las excepciones", no obtengo el resultado esperado.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <script type="text/javascript">

            function doError() {
                foo.bar = 42;
            }

            window.onload = function() {
                try {
                    doError();
                } catch (e) {
                    console.log("Error", e);
                }
            }
        </script>
    </head>
    <body>
    </body>
</html>

Puede probar el código pegado anteriormente en esta página o usar este jsFiddle .

avernet
fuente
¿En qué otro tipo de errores estás pensando?
Matthew Crumley
1
Cualquier error, por ejemplo: una referencia a una variable indefinida (como en console.log(gaga)) o a una propiedad indefinida (como en window.foo.bar).
avernet
2
Esos deberían arrojar excepciones. La opción "pausa en excepciones" funciona para mí. Los únicos errores en los que puedo pensar que no funcionarían son los errores de sintaxis, pero ocurren antes de que se ejecute el código.
Matthew Crumley
1
Sí, estoy intentando esto ahora, y parece romperse donde está el error. Había hecho esto hace unos días, y en lugar de romper donde está el error en el código, estaba rompiendo donde se detectó una excepción causada por el error, muy por encima de la pila. ¡Imagínate!
avernet

Respuestas:

210

Editar: el enlace original con el que respondí ahora no es válido . La URL más nueva sería https://developers.google.com/web/tools/chrome-devtools/javascript/add-breakpoints#exceptions a partir del 2016-11-11.

Me doy cuenta de que esta pregunta tiene una respuesta, pero ya no es precisa. Usa el enlace de arriba ^


(enlace reemplazado por editado anteriormente): ahora puede configurarlo para que rompa todas las excepciones o solo las no controladas. (Tenga en cuenta que debe estar en la pestaña Fuentes para ver el botón).

Chrome también agregó algunas otras capacidades de punto de interrupción realmente útiles ahora, como interrumpir los cambios de DOM o eventos de red.

Normalmente no volvería a responder una pregunta, pero tenía la misma pregunta y encontré esta respuesta ahora incorrecta, así que pensé que pondría esta información aquí para las personas que vinieron más tarde en la búsqueda. :)

Brian Arnold Sinclair
fuente
1
Brian, gracias, de hecho está funcionando ahora. Esta función ya estaba disponible en febrero del año pasado, cuando publiqué esto, pero no funcionaba correctamente, aunque ahora parece estar funcionando bien. Gracias por la respuesta.
avernet
El botón al que hace referencia su enlace ya no parece estar allí (al menos en la versión actual de Chrome del canal de desarrollo). No estoy seguro de cómo hacer esto de nuevo.
Andrey Fedorov
2
Hola Andrey, estoy mirando Chrome Canary y todavía veo el botón allí. Es el cuarto botón de la izquierda, como se muestra en d.pr/i/DHwT : haga clic una vez y entrará en Pausa en todas las excepciones, donde un segundo clic lo llevará a Pausa en Excepciones no capturadas. Un tercer clic vuelve al valor predeterminado de no pausar.
Brian Arnold Sinclair
El enlace está roto, me temo :(
Rick
1
¡Disculpas por no ver el comentario antes! Parece que developers.google.com/web/tools/chrome-devtools/javascript/… tiene la esencia del contenido de antes. También enmendaré la respuesta original, si puedo.
Brian Arnold Sinclair
298

Tengo problemas para conseguirlo, así que publico fotos que muestran diferentes opciones:

Chrome 75.0.3770.142 [29 de julio de 2018]

IU muy muy similar desde al menos Chrome 38.0.2125.111 [11 de diciembre de 2014]

En pestaña Sources:

ingrese la descripción de la imagen aquí

Cuando el botón está activado, puede Pause On Caught Exceptionshacerlo con la casilla de verificación a continuación: ingrese la descripción de la imagen aquí


Versión anterior

Chrome 32.0.1700.102 [03 de febrero de 2014]

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

Chrome 27.0.1453.93 Estable

Opciones de depuración

Maxence
fuente
22
Tengo que alabar a Facebook por vincular esto directamente en sus documentos. +1
jimm101
1
También para que la gente tenga en cuenta, los botones simplemente se ocultarán si la barra lateral no se expande, sin indicación de que estén allí.
Eric Majerus
17

Esto ahora es compatible con Chrome mediante el botón "Pausa en todas las excepciones".

Para habilitarlo:

  • Vaya a la pestaña "Fuentes" en las Herramientas para desarrolladores de Chrome
  • Haga clic en el botón "Pausa" en la parte inferior de la ventana para cambiar a "Pausa en el modo de todas las excepciones".

Tenga en cuenta que este botón tiene múltiples estados. Sigue haciendo clic en el botón para cambiar entre

  • "Pausa en todas las excepciones": el botón es de color azul claro
  • "Pausa en excepciones no capturadas", el botón es de color púrpura .
  • "No pausar en excepciones" - el botón es de color gris
Brad Parks
fuente
1

Casi cualquier error arrojará una excepción. Los únicos errores que se me ocurren que no funcionarían con la opción "pausa en excepciones" son los errores de sintaxis, que ocurren antes de que se ejecute el código, por lo que no hay lugar para pausar de todos modos y ninguno de los códigos se ejecutará.

Aparentemente, Chrome no se detendrá en la excepción si está dentro de un bloque try-catch. Solo se detiene en excepciones no detectadas. No sé de ninguna manera de cambiarlo.

Si solo necesita saber en qué línea ocurrió la excepción (entonces podría establecer un punto de interrupción si la excepción es reproducible), el Errorobjeto dado al bloque catch tiene una stackpropiedad que muestra dónde ocurrió la excepción.

Matthew Crumley
fuente
Matthew, "reproduje" algo similar al caso que tenía (ver la pregunta actualizada). De alguna manera, no consigo que el depurador rompa ese error. ¿Tiene alguna idea de por qué esto no funcionaría con Chrome (lo hace con Firebug cuando se habilita "romper todos los errores").
avernet
@Mathhew, creé otra respuesta diciendo que esto es imposible, y la marqué como la respuesta. Si usted u otra persona encuentra una solución, cambiaré el marcador.
avernet
1

Desafortunadamente, parece que las Herramientas para desarrolladores en Chrome no pueden "detenerse en todos los errores", como lo hace Firebug.

avernet
fuente
Simplemente haga clic en el botón Pausa UNA VEZ (estará en color azul) y no marque la opción Pausa en excepciones capturadas. Eso es todo, se detendrá solo en caso de errores.
Roy Shoa el