¿Cómo establecer un punto de interrupción de JavaScript desde el código en Chrome?

686

Quiero forzar al depurador de Chrome a que se rompa en una línea a través del código , o de lo contrario usar algún tipo de etiqueta de comentario como algo así console.break().

Pablo
fuente
46
¿Has probado debugger;o solo has usado puntos de interrupción regulares en la barra de herramientas del desarrollador?
diaho
¿te refieres a establecer puntos de interrupción desde el código en lugar de establecerlos usando el observador de scripts en las herramientas del desarrollador?
Faris M
99
No es un duplicado "en Chrome" vs "en código" son dos cosas diferentes, y esta pregunta es aplicable a muchos escenarios que no son XHR. Sí 1 de las respuestas en la otra pregunta responde a esta pregunta, pero otras no son aplicables. Literalmente busqué en Google "establecer el punto de interrupción de JavaScript desde el código Chrome" y este es el primer resultado, y la otra pregunta ni siquiera está en la primera página.
AaronLS

Respuestas:

1158

Puede usar debugger;dentro de su código. Si la consola del desarrollador está abierta, la ejecución se interrumpirá. Funciona en firebug también.

xn.
fuente
8
Un buen truco es activar el depurador después de unos segundos:setTimeout(function(){debugger;}, 3000);
Shahar
30
¿Es el truco del temporizador una práctica común? Verificación / justificación?
Justus Eapen
44
Esto es muy útil. Note también debugger;es compatible con todos los principales navegadores. Para más información: w3schools.com/jsref/jsref_debugger.asp
ScottyG
16
@ScottyG MDN es menos brillante, más útil: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
jpaugh
@JustusEapen El problema es que Javascript tiene un solo subproceso, por lo que no puede interrumpir el código en ejecución.
Vitruvio
27

Configure un botón haga clic en escucha y llame al debugger;

Ejemplo

$("#myBtn").click(function() {
 debugger;   
});

Manifestación

http://jsfiddle.net/hBCH5/

Recursos sobre depuración en JavaScript

martynas
fuente
1
Eso establece un punto de interrupción en el controlador de clics, probablemente no lo que OP quería
ᆼ ᆺ ᆼ
@PeterV Me resultaría útil si solo intentara abrir mi código en un lugar que estuviera cerca de un bloque de código que estaba depurando ... pero no quería depurar todo el tiempo ... pero sí , si es solo para abrir el depurador ... entonces hay que presionar una tecla para eso.
Armstrongest
27

También puedes usar debug(function), para romper cuandofunction se llama.

Referencia de la API de línea de comandos: depuración

Protector uno
fuente
2
Muy bien: parece ser Chrome solo en este momento, pero esa es mi plataforma principal de todos modos. Ahora solo necesito recordar dejar de llamar a mi bandera de depuración global "debug" ...
brichins
La Referencia de la API de línea de comandos del depurador de Chrome en realidad contiene algunas otras cosas bastante útiles que no conocía. ¡Gracias!
Peter T.
8

En la pestaña "Scripts", ve a donde está tu código. A la izquierda del número de línea, haga clic en. Esto establecerá un punto de interrupción.

Captura de pantalla:

captura de pantalla del punto de interrupción en cromo

Entonces podrá rastrear sus puntos de interrupción dentro de la pestaña derecha (como se muestra en la captura de pantalla).

Florian Margaine
fuente
41
Esto no responde a la pregunta, que quiere ser capaz de hacerlo en código
robertc
39
xn .: "Aquí hay una foto de mi respuesta, cuando era solo un bebé con 0 votos. Ahora todo ha crecido".
AaronLS
3
Si carga un script JS con una llamada Ajax, no se mostrará aquí, de ahí la necesidad de un punto de interrupción en el código.
Petruza
@FlorianMargaine, ya no hay pestaña Scripts. Por favor actualice la imagen.
Pacerier
En algunos marcos, como Drupal, el JS obtiene un sufijo de cadena de consulta que revienta la memoria caché. Si vacía las memorias caché, a menudo actualiza este sufijo que puede eliminar cualquier punto de interrupción que haya establecido en la carga anterior.
Nick
7

debugger es una palabra clave reservada por EcmaScript y recibe semántica opcional desde ES5

Como resultado, se puede usar no solo en Chrome, sino también en Firefox y Node.js a través denode debug myscript.js .

El estándar dice :

Sintaxis

DebuggerStatement :
    debugger ;

Semántica

La evaluación de la producción de DebuggerStatement puede permitir que una implementación provoque un punto de interrupción cuando se ejecuta bajo un depurador. Si un depurador no está presente o activo, esta declaración no tiene ningún efecto observable.

La producción DebuggerStatement: debugger; se evalúa de la siguiente manera:

  1. Si una instalación de depuración definida por la implementación está disponible y habilitada, entonces
    1. Realizar una implementación definida acción de depuración.
    2. Deje que el resultado sea un valor de finalización definido por la implementación.
  2. Más
    1. Deje que el resultado sea (normal, vacío, vacío).
  3. Devolver resultado.

No hay cambios en ES6.

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
fuente
3

Es posible y hay muchas razones por las que es posible que desee hacer esto. Por ejemplo, depurar un bucle infinito de JavaScript cerca del inicio de la carga de la página, que impide que el conjunto de herramientas de desarrollador de Chrome (o firebug) se cargue correctamente.

Ver sección 2 de

http://www.laurencegellert.com/2012/05/the-three-ways-of-setting-breakpoints-in-javascript/

o simplemente agregue una línea que contenga la palabra depurador a su código en el punto de prueba requerido.

usuario2539341
fuente
3

Punto de interrupción: -

el punto de interrupción dejará de ejecutarse y le permitirá examinar los valores de JavaScript.

Después de examinar los valores, puede reanudar la ejecución del código (generalmente con un botón de reproducción).

Depurador: -

El depurador; detiene la ejecución de JavaScript y llama a la función de depuración.

La declaración del depurador suspende la ejecución, pero no cierra ningún archivo ni borra ninguna variable.

Example:-
function checkBuggyStuff() {
  debugger; // do buggy stuff to examine.
};
Parth Raval
fuente
2

Hay muchas formas de depurar el código JavaScript. Los siguientes dos enfoques se usan ampliamente para depurar JavaScript a través del código

  1. Utilizando console.log()para imprimir los valores en la consola del navegador. (Esto lo ayudará a comprender los valores en ciertos puntos de su código)

  2. Palabra clave del depurador. Agregue debugger;a las ubicaciones que desea depurar, abra la consola de desarrollador del navegador y navegue a la pestaña de fuentes.

Para obtener más herramientas y formas de depurar el código JavaScript, W3School proporciona este enlace .

Keet Sugathadasa
fuente
1
+1 y el uso de console.log también es útil para localizar su código, porque generalmente el archivo / línea # se muestra junto al mensaje, y puede hacer clic para abrir su código en el depurador, establecer un punto de interrupción, etc.
John Henckel
0

No recomendaría debugger;si solo desea matar y detener el código de JavaScript, ya debugger;que solo congelará temporalmente su código de JavaScript y no lo detendrá permanentemente.

Si desea matar y detener correctamente el código javascript en su comando, use lo siguiente:

throw new Error("This error message appears because I placed it");

S a
fuente