Ich habe versucht, Speicherabsturz in meiner Python C-Erweiterung zu debuggen und versucht, Skript unter Valgrind auszuführen. Ich fand es zu viel „Lärm“ in der valgrind Ausgang, auch wenn ich einfach Befehl ausgeführt haben, wie:Ist es normal, dass das Ausführen von Python unter valgrind viele Fehler mit dem Speicher zeigt?
valgrind python -c ""
Valgrind Ausgabe voller wiederholt Informationen wie folgt aus:
==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 auf Slackware 12.2.
Ist es normales Verhalten? Wenn ja, dann ist Valgrind vielleicht ein ungeeignetes Tool zum Debuggen von Speicherfehlern in Python?
As (beachten Sie, dass die soname für Benutzer Zuordnungsfunktionen sollten
NONE
sein) eine Anmerkung auf hoher Ebene: Im Allgemeinen benötigt Valgrind Hilfe bei benutzerdefinierten Zuordnern, da es das Verhalten eines benutzerdefinierten Zuordners nicht verstehen kann, da dies eine Standardimplementierung sein könnte. – FalainaAlso, wenn ich die Valgrind-Readme richtig gelesen habe, kann ich Valgrind nicht wirklich verwenden, um eine Python-c-Erweiterung zu debuggen, ohne meine eigene Python-Distribution zu kompilieren ?! –