2011-03-11 14 views
25

¿Es posible, en cualquier navegador, usar cualquier complemento, habilitar o deshabilitar puntos de interrupción en su código programáticamente?Controlar puntos de interrupción mediante programación en Javascript?

Ya sé sobre el establecimiento de puntos de interrupción condicional, pero estoy realmente interesado en configurarlos a través de código.

+1

Posible duplicado de [Establecer un punto de interrupción de JavaScript en el código - en Chrome?] (Http://stackoverflow.com/questions/10050465/set-a-javascript-breakpoint-in-code-in-chrome) si solo el el título contenía la palabra clave "código" SEO dioses habría gobernado de lo contrario :-) –

Respuesta

23

Puede usar debugger; en el código para hacer un punto de corte para firebug. Por ejemplo:

alert('1'); 
debugger; 
alert('2'); 

Y firebug se detiene automáticamente en esta palabra clave.

+1

¡Funciona también en la consola Firebug! – CoolEsh

+0

Sí, eso es útil, pero no es tan programático como lo necesito: por ejemplo, agregar dinámicamente un punto de interrupción al inicio de cualquier función arbitraria. – nickf

+0

Agréguelo a través de Firebug. Es realmente dinámico. lol – CoolEsh

1

Tener un vistazo a la FireBug funciona de depuración (fn) & undebug (fn) nombres que establecen un punto de interrupción en la primera línea de la función llamada.

Véase el punto # 6:

http://michaelsync.net/2007/09/30/firebug-tutorial-script-tab-javascript-debugging

+0

¿Se puede ejecutar esto desde el propio Javascript, o solo desde la línea de comandos de Firebug? Agregar 'debug (myFunctionName);' a mi código arroja un error para mí. – nickf

26

En primer lugar habría que agregar una llamada a una función como __checkDebug(); que verificará una variable global (o semi-global) y cuando dicha variable sea verdadera, llame al depurador.


function __checkDebug() { 
    if (debugme) debugger; 
} 

todas sus funciones está preocupado acerca de la depuración sería así:


function foo() { 
    __checkDebug(); 

    //.... whatever foo was gonna do. 
} 

A continuación, puede ir un poco más allá y dinámicamente decorar funciones mientras que el código se ejecuta de esta manera:


Function.prototype.debug = function(){ 
    var fn = this; 
    return function(){  
     if (debugme) debugger; 
     return fn.apply(this, arguments);  
    }; 
}; 

foo = foo.debug(); 

ahora cualquier vez que se llame foo llamará a depurador si la variable de depuración es verdadera.

Otra opción sería crear un sistema de compilación de JavaScript que inserte la llamada después de cada declaración de función; esto requiere un analizador de sintaxis, pero si solo está buscando modificar funciones, un tokenizador simple para ese caso de uso es bastante fácil de escribir - Pero te dejaré eso a ti.

Cuestiones relacionadas