У меня есть расширения Python, реализованные на классах С++. У меня нет цели С++ для запуска valgrind. Я хочу использовать valgrind для проверки памяти.
Можно ли использовать valgrind с Python?
У меня есть расширения Python, реализованные на классах С++. У меня нет цели С++ для запуска valgrind. Я хочу использовать valgrind для проверки памяти.
Можно ли использовать valgrind с Python?
Да, вы можете использовать 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 из репозитория SVN Python, который описывает различные способы использования Python с valgrind: http://svn.python.org/projects/python/trunk/Misc/README.valgrind
*. Кроме того, вы можете перекомпилировать Python с отключенным PyMalloc, что позволяет вам улавливать больше утечек памяти, которые не будут отображаться, если вы просто подавите PyMalloc.
В Python 2.7 и 3.2 теперь есть флаг --with-valgrind
времени компиляции, который позволяет интерпретатору Python обнаруживать, когда он работает под valgrind и отключает PyMalloc. Это должно позволить вам более точно контролировать распределение памяти, чем в противном случае, поскольку PyMalloc просто выделяет память в больших кусках.
Да, вы можете: у вас есть цель для запуска valgrind с - это сам интерпретатор python:
valgrind python foo.py
Однако результаты выше могут быть не очень удовлетворительными - Python построен в режиме opt и со специальным malloc, который может утопить вас в ложных срабатываниях.
Вероятнее всего, вы получите лучшие результаты, сначала создав отладочную версию Python. Начните здесь.