Программно контролировать точки останова в Javascript? - PullRequest
28 голосов
/ 11 марта 2011

Возможно ли в любом браузере с помощью какого-либо плагина программно включать или отключать точки останова в вашем коде?

Я уже знаю об установке условных точек останова, но мне действительно интересно их устанавливать с помощью кода.

Ответы [ 3 ]

29 голосов
/ 18 апреля 2011

Сначала вы можете добавить вызов функции, такой как __checkDebug ();которая проверит глобальную (или полуглобальную) переменную, а когда указанная переменная имеет значение true, вызовите отладчик.

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

все ваши функции, которые вас интересуют в отладке, будут выглядеть так:

  
function foo() {
   __checkDebug();

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

Затем вы можете продвинуться немного дальше и динамически декорировать функции во время выполнения кода следующим образом:


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

foo = foo.debug();  

теперь каждый раз, когда вызывается foo, он будет вызывать отладчик, если переменная debugmeэто правда.

Другой вариант - создать систему сборки javascript, которая вводит вызов после каждого объявления функции - для этого требуется синтаксический анализатор, но если вы хотите модифицировать функции, просто токенизатор для этого варианта использованиядовольно легко написать - но я оставлю это на ваше усмотрение.

24 голосов
/ 11 марта 2011

Вы можете использовать debugger; в коде, чтобы сделать точку останова для firebug.Например:

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

И firebug автоматически останавливается на этом ключевом слове.

1 голос
/ 11 марта 2011

Посмотрите на функции FireBug debug (fn) & undebug (fn) имена, которые устанавливают точку останова в первой строке именованной функции.

См. Пункт № 6:

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

...