Я пытаюсь memcheck расширение Python C, которое я пишу, но у меня возникли проблемы с настройкой valgrind для работы с python. Я бы очень признателен за некоторые советы. Для контекста это Ubuntu 13.10, python 2.7.5+ и valgrind 3.8.1.Как использовать valgrind с python?
Согласно рекомендации от Readme.valgrind
Я сделал следующее.
1) Скачано источник питона с
sudo apt-get build-dep python2.7
apt-get source python2.7
2) Прикладной код исправления, то есть "Раскоментируйте Py_USING_MEMORY_DEBUGGER в объектах/obmalloc.c".
3) Прикладной на подавление патч, т.е. "раскомментировать строки в Misc/VALGRIND-python.supp, подавляющие предупреждения для PyObject_Free и PyObject_Realloc"
4) Составитель питона с
./configure --prefix=/home/dejan/workspace/python --without-pymalloc
make -j4 install
Примечание что я сделал и 2 и 3, а README.valgrind говорит, чтобы сделать 2 или 3 ... больше не может повредить.
Теперь, давайте проверим это на какой-то образец кода Python в перспективе Valgrind test.py
print "Test"
Давайте на питоне с этим скриптом
valgrind --tool=memcheck --leak-check=full --suppressions=python2.7-2.7.5/Misc/valgrind-python.supp bin/python test.py
Неожиданно оказалось, есть еще нагрузки докладов Valgrind, с первый (и многие другие последующие)
==27944== HEAP SUMMARY:
==27944== in use at exit: 857,932 bytes in 5,144 blocks
==27944== total heap usage: 22,766 allocs, 17,622 frees, 4,276,934 bytes allocated
==27944==
==27944== 38 bytes in 1 blocks are possibly lost in loss record 24 of 1,343
==27944== at 0x4C2A2DB: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==27944== by 0x46B8DD: PyString_FromString (stringobject.c:143)
==27944== by 0x439631: PyFile_FromFile (fileobject.c:157)
==27944== by 0x4E9B4A: _PySys_Init (sysmodule.c:1383)
==27944== by 0x4E29E9: Py_InitializeEx (pythonrun.c:222)
==27944== by 0x4154B4: Py_Main (main.c:546)
==27944== by 0x577DDE4: (below main) (libc-start.c:260)
A Я делаю что-то не так? Есть ли способ угадать сценарий python, который не течет и получить чистый результат valgrind?
Вы видели http://stackoverflow.com/questions/1519276/is-it-normal-that-running-python-under-valgrind-shows-many-errors- с-память? rq = 1 – VooDooNOFX
@VooDooNOFX Я искал stackoverflow и дальше, и все ответы в основном говорят, что я должен делать то, что я описал, я сделал - скомпилировал python или использовал supress. Это избавляет от проблемных отчетов с настраиваемым распределением, таких как PyObject_Free (это тот, о котором вы связали), но отчеты, которые я получаю, не такие. –
Чтобы проверить расширение c, я скомпилировал debug python с инструкциями, приведенными в ответе. И я перестраиваю расширение с помощью отладочной версии python, и он получил результат сбоя. Я использовал расширение setuptools для расширения, и он хорошо работает в системной среде. Флаги сборки очень разные. – Hua