Как я могу использовать valgrind с расширениями Python C ++? - PullRequest
32 голосов
/ 21 октября 2010

У меня есть расширения Python, реализованные на классах C ++. У меня нет цели C ++ для запуска valgrind. Я хочу использовать valgrind для проверки памяти.

Могу ли я использовать valgrind с Python?

Ответы [ 3 ]

42 голосов
/ 18 мая 2011

Да, вы можете использовать valgrind с Python. Вам просто нужно использовать файл подавления valgrind, предоставленный разработчиками Python, поэтому вы не получите кучу ложных срабатываний из-за пользовательских функций распределения / перераспределения памяти в Python.

Файл подавления valgrind можно найти здесь: http://svn.python.org/projects/python/trunk/Misc/valgrind-python.supp

ВАЖНО: Вам необходимо раскомментировать строки для PyObject_Free и PyObject_Realloc в файле подавления *.

Рекомендуемый синтаксис использования:

$ valgrind --tool=memcheck --suppressions=valgrind-python.supp \
                                          python -E -tt ./my_python_script.py

См. Также этот файл README из репозитория Python SVN, в котором описаны различные способы использования Python с valgrind: http://svn.python.org/projects/python/trunk/Misc/README.valgrind

* - В качестве альтернативы вы можете перекомпилировать Python с отключенным PyMalloc, что позволяет обнаруживать больше утечек памяти, которые не будут отображаться, если вы просто отключите PyMalloc.

8 голосов
/ 22 октября 2011

В Python 2.7 и 3.2 теперь есть флаг --with-valgrind времени компиляции, который позволяет интерпретатору Python определять, когда он работает под valgrind, и отключает PyMalloc. Это должно позволить вам более точно отслеживать распределение памяти, чем в противном случае, так как PyMalloc просто выделяет память большими кусками.

0 голосов
/ 27 октября 2010

Да, вы можете: у вас есть есть цель для запуска valgrind - это сам интерпретатор python:

valgrind python foo.py

Однако результаты выше могут быть не очень удовлетворительными- Python построен в режиме opt и имеет специальный malloc, который может утопить вас в ложных срабатываниях.

Скорее всего, вы получите лучшие результаты, если сначала создадите отладочную версию Python.Начало здесь .

...