JavaScript: ¿Hay una manera de obtener Chrome para romper en todos los errores?


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

Por ejemplo, al cargar una página con el siguiente código, me gustaría que Chrome se rompa 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 arriba en esto page o usando este jsFiddle.

Author: Venkat, 2010-02-10

5 answers

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

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


(enlace reemplazado por edited above) - ahora puede configurarlo para romper en todas las excepciones o solo en las no manejadas. (Tenga en cuenta que usted necesita estar en el Sources pestaña para ver el botón.)

Chrome también ha añadido algunas otras capacidades de punto de interrupción realmente útiles ahora, tales como romper en los cambios DOM o eventos de red.

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

 199
Author: Brian Arnold Sinclair,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-03 21:50:12

Tengo problemas para conseguirlo, así que posteo imágenes que muestran diferentes opciones:

Cromo 58.0.3029.96 [30 Mayo de 2017]

Verdadero desde al menos Chrome 38.0.2125.111 [11 de diciembre 2014]

En la pestaña Sources : introduzca la descripción de la imagen aquíScreenshot for Chrome 50.0.2661.75

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


Versiones anteriores

Cromo 32.0.1700.102 [03 feb 2014]

introduzca la descripción de la imagen aquí

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

Chrome 27.0.1453.93 Estable

Opciones de depuración

 232
Author: Maxence,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-05 03:10:57

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

Para habilitarlo:

  • Vaya a la pestaña "Fuentes" en Chrome Developer Tools
  • Haga clic en el botón "Pause" en la parte inferior de la ventana para cambiar a "Pause on all exceptions mode".

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

  • "Pausa en todas las excepciones" - el botón está coloreado azul claro
  • "Pausa en excepciones no capturadas", el botón es de color púrpura .
  • "Dont pause on exceptions" - el botón está coloreado gris
 17
Author: Brad Parks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-10 14:23:27

Casi cualquier error generará excepciones. Los únicos errores que se me ocurren que no funcionarían con la opción" pause on exceptions " son los errores de sintaxis, que ocurren antes de que se ejecute cualquiera de los códigos, por lo que no hay lugar para pausar de todos modos y ninguno de los códigos se ejecutará.

Al parecer, Chrome no se detendrá en la excepción si está dentro de un bloque try-catch aunque. Solo se detiene en excepciones no capturadas. No conozco ninguna forma de cambiarlo.

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

 1
Author: Matthew Crumley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-14 04:30:03

Desafortunadamente, las Herramientas para desarrolladores en Chrome parecen ser incapaces de "detener todos los errores", como Firebug hace.

 1
Author: avernet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-23 19:49:11