Недавно столкнулся в исследованиях с проектом trimpath. Лично для себя ничего интересного не обнаружил, кроме интересного способа расстановки точек останова (я его немного видоизменил от оригинала — иначе длинные строки некорректно отображались в опере и ИА)
Теперь чтобы поставить току останова нужно написать что-то вроде этого:
Обратите внимание на функцию function (_$) { return eval(_$); } — так точке останова передаётся контекст вызывающей функции. Имя _$ использовано как редко встречаемый идентификатор.
Пригодиться этот механизм может там, где нет фаербага или других нормальных отладчиков, например в ИА. Просто и со вкусом. :^)
Прошу прощения, если написал боян — для меня это было новым подходом.
UPD#1 08.12.09
Если изменить код точек останова вот так:
то можно будет писать вот так:
Спасибо asmolianinov за идею (см. комментарии).
- breakpoint = function (_name, _context)
- {
- if(!breakpoint.allow)
- {
- return;
- }
- var expr, result, output;
- while(true)
- {
- expr = prompt('Debug into breakpoint "' + _name + '"' , '');
- if(!expr)
- {
- break;
- }
- else
- {
- output = true;
- try
- {
- result = result = _context(expr);
- }
- catch(e)
- {
- alert('[!] caught exception with message "' + e.message + '"');
- output = false;
- }
- if(output)
- {
- alert(result);
- }
- }
- }
- }
-
- breakpoint.allow = true;
* This source code was highlighted with Source Code Highlighter.
Теперь чтобы поставить току останова нужно написать что-то вроде этого:
- function f(_a, _b, _c)
- {
- var a = 10;
- var b = 20;
- var c = 30;
- breakpoint("breakpoint1", function (_$) { return eval(_$); });
- }
-
- f(40, 50, 60);
* This source code was highlighted with Source Code Highlighter.
Обратите внимание на функцию function (_$) { return eval(_$); } — так точке останова передаётся контекст вызывающей функции. Имя _$ использовано как редко встречаемый идентификатор.
Пригодиться этот механизм может там, где нет фаербага или других нормальных отладчиков, например в ИА. Просто и со вкусом. :^)
Прошу прощения, если написал боян — для меня это было новым подходом.
UPD#1 08.12.09
Если изменить код точек останова вот так:
- debug = true;
-
- breakpoint = '(new Breakpoint(\'anonymous\')).exec(function (_$) { return eval(_$); });';
-
- Breakpoint = function (_name)
- {
- this.name = _name ? 'anonymous' : _name;
- this.allow = true;
- }
-
- Breakpoint.prototype.exec = function (_context)
- {
- if(!(debug && this.allow))
- {
- return;
- }
- ...
- }
* This source code was highlighted with Source Code Highlighter.
то можно будет писать вот так:
- eval(breakpoint);
* This source code was highlighted with Source Code Highlighter.
Спасибо asmolianinov за идею (см. комментарии).