Pregunta

Desarrollo un módulo de extensión para Guile, escrito en C.Este módulo de extensión incorpora un intérprete de Python.

Dado que este módulo de extensión invoca al intérprete de Python, necesito verificar que administre correctamente la memoria ocupada por los objetos de Python.

Descubrí que el intérprete de Python se comporta bien en su propio manejo de memoria, de modo que al ejecutar valgrind puedo encontrar pérdidas de memoria debido a errores en el código de incrustación de mi propio intérprete de Python, si no hay otros factores que interfieran.

Sin embargo, cuando ejecuto Guile en valgrind, valgrind informa pérdidas de memoria.Estas pérdidas de memoria oscurecen cualquier pérdida de memoria debida a mi propio código.

La pregunta es qué puedo hacer para separar las pérdidas de memoria debidas a errores en mi código de las pérdidas de memoria informadas por valgrind como debidas a Guile.¿Otra herramienta en lugar de valgrind?¿Opciones especiales de valgrind?¿Renunciar y confiar en el código manual?

¿Fue útil?

Solución

Tienes un par de opciones.Una es escribir un archivo de supresiones para valgrind que desactive los informes de cosas en las que no estás trabajando.Python tiene un archivo de este tipo, por ejemplo:http://svn.python.org/projects/python/trunk/Misc/valgrind-python.supp

Si a valgrind no le gusta su configuración, otra posibilidad es usar libmudflap;compilas tu programa con gcc -fmudflap -lmudflap, y el código resultante está instrumentado para la depuración de punteros.Descrito en los documentos de gcc y aquí: http://gcc.gnu.org/wiki/Mudflap_Pointer_Debugging

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top