मैंने अपने पायथन सी एक्सटेंशन में मेमोरी क्रैश डीबग करने का प्रयास किया है और वाल्ग्रिंड के तहत स्क्रिप्ट चलाने की कोशिश की है। मैंने पाया है बहुत ज्यादा 'शोर' valgrind उत्पादन में, भले ही मैं साधारण आदेश दौड़ा लिया है के रूप में:क्या यह सामान्य है कि वाल्ग्रिंड के तहत पाइथन चलाना स्मृति के साथ कई त्रुटियों को दिखाता है?
valgrind python -c ""
वेलग्रिंड इस तरह बार-बार जानकारी से भरा उत्पादन:
==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)
अजगर 2.5। Slackware 12.2 पर 2।
क्या यह सामान्य व्यवहार है? यदि ऐसा है तो पाइथन में स्मृति त्रुटियों को डीबग करने के लिए शायद वालग्रिंड अनुचित उपकरण है?
के रूप में एक उच्च स्तरीय नोट: सामान्य वालग्रिंड में कस्टम आवंटकों के साथ कुछ मदद की आवश्यकता होती है क्योंकि यह एक कस्टम आवंटक के व्यवहार को समझने में सक्षम नहीं है क्योंकि यह मानक कार्यान्वयन हो सकता है। – Falaina
इसलिए, यदि मैं वाल्ग्रिंड रीडमे को सही ढंग से पढ़ता हूं, तो मैं वास्तव में अपने पाइथन वितरण को संकलित किए बिना एक पायथन सी एक्सटेंशन डीबग करने के लिए वालग्रिंड का उपयोग नहीं कर सकता ?! –