Відстеження виконання Javascript у Chrome - як?


80

На веб-сайті завантажено ~ 100-200 функцій javascript. Я хочу визначити, яка функція javascript виконується, коли я натискаю той чи інший елемент у Google Chrome. Як я можу це зробити за допомогою Інструментів веб-розробника Chrome? Дякую!

Відповіді:


89

Один простий підхід - запустити Chrome Developer Tools, перейти на панель Джерела та натиснути F8(Призупинити виконання). Це призведе до порушення першого виконаного оператора JavaScript.

Інший підхід полягає в тому, щоб встановити точку зупинки прослуховувача подій для миші або клацнути: на тій же панелі Джерела розгорніть «Точки зупинки прослуховувача подій» на правій бічній панелі. Розгорніть пункт «Миша» та перевірте події, на які ви хочете зламати (наприклад, «клацніть», «миша»). Потім натисніть на вашій сторінці і побачите перерву виконання JS у DevTools. Насолоджуйтесь!


thx багато! яку подію миші слід зловити, якщо я виділю текст у FCKeditor, "клацання лівою кнопкою миші", переміщення миші в інше місце та відпускання.
Прокласти

я спробував, але ... все ще не працює ... спробую сам. Дякую!
Прокласти

1
Добре, тоді перевірте всю категорію "Миша", щоб розірвати всі прослуховувачі подій, пов'язаних з мишею (можливо, ви хочете зняти прапорець біля пункту "Пересування миші"). Якщо це все одно не вдається для вас, ви можете перевірити всі категорії та зняти їх одну за одною, якщо потрапили у не пов’язані між собою події.
Олександр Павлов

1
Привіт, у мене подібне запитання, ситуація майже однакова, але в моєму випадку я просто хочу відстежувати виконання всього JavaScript ... я хочу побачити, які функції працюють, крок за кроком, а не просто призупиняти або встановлювати точки зупинку? Щось на зразок traceGL ... Мені потрібно зрозуміти, як працює веб-сторінка ... (мої бібліотеки javascript зараз занадто великі, тому мені потрібно зробити деякі оптимізації та знайти дублювання коду ...)
vach,

31

Альтернатива призупиненню виконання (яке зазвичай чудово працює, але погано працює на сторінках, на яких часто виконується періодичний код)

Ви можете використовувати профайлер chrome для короткого проміжку часу. Після того, як ви закінчите запис, він покаже вам підсумок часу процесора, проведеного в будь-якій з функцій, які були виконані під час запису. Ми насправді не піклуємося про час процесора, ми просто використовували цей інструмент, тому що він покаже нам, які функції були виконані.

В основному просто почніть запис:

Примітка: у Chrome 58 та новіших версіях ця вкладка перейменована на "Пам'ять". Довідково

кнопка запуску хромового профілі -

Потім виконайте свої дії (наприклад, натисніть кнопку на веб-сторінці або зробіть все, що призведе до виконання цікавого коду). Потім зупиніть запис і перегляньте результат:

підсумок результатів профілювача

Зверніть увагу, що я використовую режим перегляду "зверху вниз" - який показує вам стек викликів, і ви можете детально переглянути, які функції врешті-решт викликані. Наприклад, спочатку була викликана якась анонімна функція (ймовірно, в результаті setTimeout або, можливо, якийсь обробник події кліку), а потім вона викликала якийсь метод, ідентифікований за допомогою s.track.s.tякого потім викликався s_doPluginsтощо ... Важливо те, що в режимі зверху , записи в верхній частині дерева утворюють початок стека викликів, і тому вони , як правило , функції , зареєстрованої деякої функції таймера ( setTimeout, setInterval, requestAnimationFrameі т.д. ...) або який - або обробник події ( click, mousemove, loadі т.д .. .).

Ви також можете використовувати режим перегляду "діаграми", який показує, яка функція була викликана в той час, нанесена на діаграму зліва направо. Це допоможе вам визначити, яку функцію ви справді шукаєте, оскільки ви, мабуть, відчуваєте, скільки часу виконується код під час вашого запису (наприклад, прямо посередині).

До речі - я вважаю, що більшість інших сучасних браузерів мають подібні можливості.


14

Я хочу визначити, яка функція javascript виконується, коли я натискаю той чи інший елемент у Google Chrome.

Зараз є чудове розширення Visual Event, яке робить саме це. Він розпізнає лише обробники подій, встановлені за допомогою популярних бібліотек js (jQuery, YUI, MooTools, Prototype, Glow) та подій DOM Level 0.


працює добре. Не впевнений у безпеці, тому я зупиняюся, коли не налагоджую.
MagicLAMP

3
Схоже, розширення було знято :( Давно воно не оновлювалось
Дмитро Пашкевич,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.