Как проверить утечки памяти в модулях расширения Guile? - PullRequest
5 голосов
/ 17 сентября 2008

Я разрабатываю модуль расширения для Guile, написанный на C. Этот модуль расширения встраивает интерпретатор Python.

Поскольку этот модуль расширения вызывает интерпретатор Python, мне необходимо убедиться, что он правильно управляет памятью, занятой объектами Python.

Я обнаружил, что интерпретатор Python хорошо себя ведет в собственной обработке памяти, поэтому, запустив valgrind, я могу обнаружить утечки памяти из-за ошибок в моем собственном коде встраивания интерпретатора Python, если нет других мешающих факторов.

Однако, когда я запускаю Guile под valgrind, valgrind сообщает об утечках памяти. Такие утечки памяти скрывают любые утечки памяти из-за моего собственного кода.

Вопрос в том, что я могу сделать, чтобы отделить утечки памяти из-за ошибок в моем коде от утечек памяти, о которых Valgrind сообщил из-за Guile. Еще один инструмент вместо валгринда? Специальные варианты valgrind? Сдаться и положиться на ручное прохождение кода?

1 Ответ

6 голосов
/ 17 сентября 2008

У вас есть пара вариантов. Одним из них является написание файла supressions для valgrind, который отключает отчеты о том, над чем вы не работаете. У Python есть такой файл, например: http://svn.python.org/projects/python/trunk/Misc/valgrind-python.supp

Если valgrind не нравится ваша настройка, другая возможность использует libmudflap; Вы компилируете свою программу с gcc -fmudflap -lmudflap, и полученный код инструментируется для отладки указателя. Описано в документации gcc, а здесь: http://gcc.gnu.org/wiki/Mudflap_Pointer_Debugging

...