Подтвердить что ты не робот

Как я могу использовать valgrind с расширениями Python С++?

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

Можно ли использовать valgrind с Python?

4b9b3361

Ответ 1

Да, вы можете использовать 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.

Ответ 2

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

Ответ 3

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

valgrind python foo.py

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

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