Я пытаюсь memcheck расширение Cython C, которое я пишу, но у меня возникли проблемы с настройкой valgrind для работы с python. Я бы очень признателен за некоторые советы. Для контекста это Ubuntu 13.10, python 2.7.5+ и valgrind 3.8.1.
В соответствии с рекомендацией Readme.valgrind
я сделал следующее.
1) Загрузил источник python с помощью
sudo apt-get build-dep python2.7
apt-get source python2.7
2) Применил патч кода, то есть "Uncomment 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 в test.py
print "Test"
Пусть запущен valgrind на python с помощью этого script
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)
Я что-то делаю неправильно? Есть ли способ сбросить python script, который не течет и не очистится от вывода valgrind?