Как проверить наличие утечек памяти в модулях расширения Guile?

StackOverflow https://stackoverflow.com/questions/78900

Вопрос

Я разрабатываю модуль расширения для 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top