Как проверить наличие утечек памяти в модулях расширения Guile?
-
09-06-2019 - |
Вопрос
Я разрабатываю модуль расширения для Guile, написанный на C.В этот модуль расширения встроен интерпретатор Python.
Поскольку этот модуль расширения вызывает интерпретатор Python, мне нужно убедиться, что он правильно управляет памятью, занимаемой объектами Python.
Я обнаружил, что интерпретатор Python хорошо справляется с собственной обработкой памяти, так что, запустив valgrind, я могу обнаружить утечки памяти из-за ошибок в коде внедрения моего собственного интерпретатора Python, если нет других мешающих факторов.
Однако когда я запускаю Guile под управлением valgrind, valgrind сообщает об утечках памяти.Такие утечки памяти скрывают любые утечки памяти из-за моего собственного кода.
Вопрос в том, что я могу сделать, чтобы отделить утечки памяти из-за ошибок в моем коде от утечек памяти, о которых valgrind сообщает как из-за Guile.Другой инструмент вместо valgrind?Специальные параметры valgrind?Сдаться и положиться на ручное прохождение кода?
Решение
У вас есть пара вариантов.Один из них — написать файл подавлений для 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