Просмотр вызовов Javascript по мере их возникновения?

Я унаследовал довольно большой проект, и я пытаюсь отследить надоедливую ошибку, но для жизни я не могу найти, где вызывается и выполняется это конкретное действие. Есть ли способ просмотреть вызовы Javascript по мере их возникновения? Я могу приостановить выполнение в Firebug, но оно всегда останавливается при вызове addDomListenerOnce.


person Don    schedule 18.09.2012    source источник
comment
Если вы можете найти, где в коде происходит действие, вы можете поставить точку останова там, а затем посмотреть на трассировку стека, чтобы увидеть, откуда исходит вызов.   -  person some    schedule 18.09.2012
comment
Вот в чем проблема, я не могу найти, где в коде происходит действие.   -  person Don    schedule 18.09.2012
comment
Так как вы называете это конкретное действие? Как это определяется? В любом приложении существует огромное количество вызовов методов, и они происходят слишком быстро, чтобы вы могли их увидеть.   -  person Denys Séguret    schedule 18.09.2012
comment
Может быть, вы хотите увидеть, какие события запускаются? Однажды я написал функцию at, которая заменила addEventListener моей собственной, чтобы я мог регистрировать каждое инициированное событие. Я думаю, что кто-то сделал для этого библиотеку, но я не помню названия. Но вы также должны обрабатывать код, который запускается через setTimeout и setInterval.   -  person some    schedule 18.09.2012


Ответы (3)


вы можете добавить эту строку

debugger;

где вы хотите. Например, в качестве первой строки функции, которую вы хотите проверить, выполняется ли она. Это остановит выполнение скрипта, и вы сможете проверить все в firebug.

person Nicola Peluchetti    schedule 18.09.2012
comment
[правильный вопрос, а не критика] Это кроссбраузерность? Где он определен? - person Denys Séguret; 18.09.2012
comment
@dystroy не знаю, является ли он полностью кросс-браузерным, нужно проверить, но он точно работает с Firebug/Firefox (который использует постер) - person Nicola Peluchetti; 18.09.2012
comment
Он определен в ECMA262-5 12.15. Оценка производства DebuggerStatement может позволить реализации вызвать точку останова при запуске под отладчиком. Если отладчик отсутствует или активен, этот оператор не имеет заметного эффекта. Согласно этой записи в блоге, он работает в Firefox с firebug, IE8 и Chrome 9. - person some; 18.09.2012

В Opera's Dragonfly у вас есть опция «Перерыв на первом операторе нового скрипта» (спасибо, @some)

Это пятая кнопка в верхнем левом углу.

person Ortiga    schedule 18.09.2012
comment
Точное название — «Перерыв при первом утверждении нового скрипта» (в Opera 12.02). - person some; 18.09.2012

Все современные браузеры предлагают функции отладки.

Взгляните, например, на функции отладки инструментов Chrome Developer. Очень легко устанавливать точки останова и отслеживать выполнение строка за строкой. Конечно, у вас есть стек вызовов, поэтому вы видите, откуда вызывается функция.

person Denys Séguret    schedule 18.09.2012