Почему Perl's Devel :: LeakTrace :: Fast указывает на пустые файлы и ошибки? - PullRequest
1 голос
/ 23 марта 2010

Я использую Devel :: LeakTrace :: Fast для отладки утечки памяти в Perl-скрипте, разработанном как демон, который выполняет бесконечный цикл со сном до прерывания. У меня возникли проблемы с чтением вывода и поиском документации, чтобы помочь мне понять вывод. Perldoc не содержит много информации о выводе. Большая часть этого имеет смысл, например, указание на глобальные переменные в DBI. Вместе с выходом смешиваются несколько

leaked SV(<LOCATION>) from (eval #) line #

Где цифры - это числа, а - это место в памяти. Сам сценарий не использует eval ни в какой момент - я не исследовал каждый используемый модуль, чтобы увидеть, присутствуют ли evals. В основном я хочу узнать, как найти эти уловки (если это возможно).

Я также обнаружил, что следующие записи повторяются снова и снова

leaked SV(<LOCATION>) from  line #

Где строка # всегда одинакова #. Не очень помогает отследить, в каком файле находится эта строка.

1 Ответ

3 голосов
/ 23 марта 2010

Возможно, вы нигде не используете eval напрямую , но, скорее всего, используется какой-то модуль, который вы используете. Кроме того, может быть проблема в коде XS, на который вы ссылаетесь.

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

...