J'ai essayé de déboguer la mémoire crash dans mon extension Python C et j'ai essayé d'exécuter le script sous valgrind. Je trouve qu'il ya trop de "bruit" dans la sortie valgrind, même si j'ai couru commande simple:Est-il normal que l'exécution de python sous valgrind montre de nombreuses erreurs avec la mémoire?
valgrind python -c ""
sortie Valgrind plein d'info répétée comme ceci:
==12317== Invalid read of size 4
==12317== at 0x409CF59: PyObject_Free (in /usr/lib/libpython2.5.so.1.0)
==12317== by 0x405C7C7: PyGrammar_RemoveAccelerators (in /usr/lib/libpython2.5.so.1.0)
==12317== by 0x410A1EC: Py_Finalize (in /usr/lib/libpython2.5.so.1.0)
==12317== by 0x4114FD1: Py_Main (in /usr/lib/libpython2.5.so.1.0)
==12317== by 0x8048591: main (in /usr/bin/python2.5)
==12317== Address 0x43CD010 is 7,016 bytes inside a block of size 8,208 free'd
==12317== at 0x4022F6C: free (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==12317== by 0x4107ACC: PyArena_Free (in /usr/lib/libpython2.5.so.1.0)
==12317== by 0x41095D7: PyRun_StringFlags (in /usr/lib/libpython2.5.so.1.0)
==12317== by 0x40DF262: (within /usr/lib/libpython2.5.so.1.0)
==12317== by 0x4099569: PyCFunction_Call (in /usr/lib/libpython2.5.so.1.0)
==12317== by 0x40E76CC: PyEval_EvalFrameEx (in /usr/lib/libpython2.5.so.1.0)
==12317== by 0x40E70F3: PyEval_EvalFrameEx (in /usr/lib/libpython2.5.so.1.0)
==12317== by 0x40E896A: PyEval_EvalCodeEx (in /usr/lib/libpython2.5.so.1.0)
==12317== by 0x40E8AC2: PyEval_EvalCode (in /usr/lib/libpython2.5.so.1.0)
==12317== by 0x40FD99C: PyImport_ExecCodeModuleEx (in /usr/lib/libpython2.5.so.1.0)
==12317== by 0x40FFC93: (within /usr/lib/libpython2.5.so.1.0)
==12317== by 0x41002B0: (within /usr/lib/libpython2.5.so.1.0)
Python 2.5. 2 sur Slackware 12.2.
Est-ce un comportement normal? Si oui, valgrind est peut-être un outil inapproprié pour déboguer les erreurs de mémoire en Python?
Comme une note de haut niveau: En général, Valgrind a besoin d'aide avec les allocateurs personnalisés, car il ne peut pas comprendre le comportement d'un allocateur personnalisé, comme cela pourrait être le cas avec une implémentation standard. – Falaina
donc, si je lis correctement le readme valgrind, je ne peux pas vraiment utiliser valgrind pour déboguer une extension python c sans compiler ma propre distribution python ?! –