Инструменты для отладки утечек памяти в JavaScript

У меня проблема с утечкой памяти в довольно сложном проекте JavaScript, и я надеюсь, что есть инструменты, которые могут помочь мне определить причину проблемы.

Я пробовал вкладку "Профиль разработчика" разработчика Google Chrome, где я могу делать снимки HEAP и сравнивать их с предыдущими моментальными снимками (проверьте http://www.youtube.com/GoogleDevelopers#p/c/B9EC47A6AAE4540F/1/OxW1dCjOstE для ускорения этой функции).

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

Мой вопрос: какие инструменты вы используете для отладки утечки памяти JavaScript? Есть ли инструмент, который может позволить мне увидеть ссылки и немного исходного кода, где они хранятся?

Ответ 1

Я, кажется, часто сталкивался с этой проблемой и никогда не имел отличного ответа, кроме выбора умных точек останова в вашем javascript. Иногда есть инструмент для вашей конкретной ситуации, который может помочь найти проблему, иногда для меня это долгий процесс, чтобы найти утечку.

Посмотрите на Профилирование распределения в Chrome DevTools, который дает вам пользовательский интерфейс для ваших распределений, а затем позволяет вам вернуться к своим хранителям.

Вот хороший список инструментов утечки для Mozilla. Кроме того, есть некоторые скринкасты о том, как использовать инструменты. В частности, вас может заинтересовать раздел "Постобработка трасс стека", поскольку он упоминает о возможности получения лучших символов и информации о имени файла/строке из трассировки стека.

Если вы в порядке используете Internet Explorer в Windows, вот Детектор утечки JavaScript JavaScript, который также может оказаться полезным.

Наконец, я нашел этот хороший инструмент для github под названием MemoryLeakChecker после прочтения здесь, который ищет большие структуры данных и пытается помочь вам определить, где вы протекаете память.

Надеюсь, что это поможет и сообщит мне, какой из них (если есть) поможет вам. Извините за отсутствие актуальных гиперссылок, потому что сейчас у меня менее 10 репутации, я не могу поместить их в сообщение.