c++ python valgrind

¿Cómo puedo usar valgrind con las extensiones de Python C++?



(3)

En Python 2.7 y 3.2 ahora hay un --with-valgrind de tiempo de compilación --with-valgrind que permite al intérprete de Python detectar cuando se ejecuta bajo valgrind y deshabilita PyMalloc. Esto debería permitirle controlar con mayor precisión las asignaciones de memoria que de otra manera, ya que PyMalloc solo asigna memoria en grandes porciones.

Tengo extensiones de Python implementadas en clases de C ++. No tengo un objetivo de C ++ para ejecutar valgrind con. Quiero usar valgrind para la verificación de memoria.

¿Puedo usar valgrind con Python?


Sí, puedes: tienes un objetivo para ejecutar valgrind con - es el intérprete de Python en sí:

valgrind python foo.py

Sin embargo, los resultados de lo anterior pueden no ser muy satisfactorios: Python está construido en modo opt y con un malloc especial, que puede ahogarte en falsos positivos.

Es probable que obtenga mejores resultados construyendo primero una versión de depuración de Python. Comience here .


Sí, puedes usar valgrind con Python. Solo necesita usar el archivo de supresión de valgrind provisto por los desarrolladores de Python, para que no tenga un montón de falsos positivos debido a las funciones de asignación / reasignación de memoria personalizadas de Python.

El archivo de supresión de valgrind se puede encontrar aquí: http://svn.python.org/projects/python/trunk/Misc/valgrind-python.supp

IMPORTANTE: Necesita descomentar las líneas para PyObject_Free y PyObject_Realloc en el archivo de supresión *.

La sintaxis de uso recomendada es:

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

Vea también este archivo README del repositorio SVN de Python que describe las diferentes formas de usar Python con valgrind: http://svn.python.org/projects/python/trunk/Misc/README.valgrind

* - Alternativamente, puede recompilar Python con PyMalloc deshabilitado, lo que le permite atrapar más pérdidas de memoria que no aparecerán si solo suprime PyMalloc.