debugging abrir - ¿Cómo configurar un punto de ruptura de JavaScript desde el código en Chrome?




paused significa (9)

Es posible y hay muchas razones por las que podría querer hacer esto. Por ejemplo, la depuración de un bucle infinito de javascript cerca del inicio de la carga de la página, impide que el conjunto de herramientas del desarrollador de Chrome (o firebug) se cargue correctamente.

Ver la 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.

Quiero forzar al depurador de Chrome a interrumpir una línea a través del código , o bien usar algún tipo de etiqueta de comentario como algo como console.break() .


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:

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




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

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

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

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




debugger es una palabra clave reservada de EcmaScript y se le da una 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 de la node debug myscript.js .

La norma 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 está disponible y habilitada, entonces
    1. Realizar una acción de depuración definida por la implementación.
    2. Que el resultado sea un valor de finalización definido por la implementación.
  2. Más
    1. Dejemos que el resultado sea (normal, vacío, vacío).
  3. Resultado de retorno.

No hay cambios en ES6.


El término que ha usado en el título de su pregunta Remove a property from a JavaScript object , puede interpretarse de diferentes maneras. La primera es eliminarla por completo de la memoria y la lista de claves de objeto o la otra es eliminarla de su objeto. Como se ha mencionado en algunas otras respuestas, la palabra clave de delete es la parte principal. Digamos que tienes tu objeto como:

myJSONObject = {"ircEvent": "PRIVMSG", "method": "newURI", "regex": "^http://.*"};

Si lo haces:

console.log(Object.keys(myJSONObject));

El resultado sería:

["ircEvent", "method", "regex"]

Puede eliminar esa clave específica de sus claves de objeto como:

delete myJSONObject["regex"];

Entonces su clave de objetos usando Object.keys(myJSONObject) sería:

["ircEvent", "method"]

Pero el punto es que si le importa la memoria y desea que el objeto se elimine de la memoria, se recomienda establecerlo en nulo antes de eliminar la clave:

myJSONObject["regex"] = null;
delete myJSONObject["regex"];

El otro punto importante aquí es tener cuidado con sus otras referencias al mismo objeto. Por ejemplo, si creas una variable como:

var regex = myJSONObject["regex"];

O agregarlo como un nuevo puntero a otro objeto como:

var myOtherObject = {};
myOtherObject["regex"] = myJSONObject["regex"];

Entonces, incluso si lo elimina de su objeto myJSONObject , ese objeto específico no se eliminará de la memoria, ya que la variable regex y myOtherObject["regex"] aún tienen sus valores. Entonces, ¿cómo podríamos eliminar el objeto de la memoria con seguridad?

La respuesta sería eliminar todas las referencias que tiene en su código, apuntadas a ese mismo objeto y no usar las declaraciones var para crear nuevas referencias a ese objeto . Este último punto con respecto a las declaraciones var , es uno de los problemas más cruciales con los que nos enfrentamos habitualmente, porque el uso de las declaraciones var evitaría que el objeto creado se elimine.

Lo que significa que en este caso no podrá eliminar ese objeto porque ha creado la variable regex través de una declaración var , y si lo hace:

delete regex; //False

El resultado sería false , lo que significa que su declaración de eliminación no se ha ejecutado como esperaba. Pero si no había creado esa variable anteriormente, y solo tenía myOtherObject["regex"] como su última referencia existente, podría haberlo hecho simplemente eliminándolo como:

myOtherObject["regex"] = null;
delete myOtherObject["regex"];

En otras palabras, un objeto JavaScript se anula tan pronto como no queda ninguna referencia en su código que apunta a ese objeto.

Actualización: Gracias a @AgentME:

Establecer una propiedad en nulo antes de eliminarlo no logra nada (a menos que Object.seal haya sellado el objeto y se produzca un error en la eliminación. Ese no suele ser el caso a menos que lo intente específicamente).

Para obtener más información sobre Object.seal : Object.seal()







javascript debugging google-chrome breakpoints