Tôi đã cố gỡ lỗi bộ nhớ trong phần mở rộng Python C của mình và cố gắng chạy tập lệnh theo valgrind. Tôi thấy có quá nhiều "tiếng ồn" trong đầu ra valgrind, ngay cả khi tôi đã chạy lệnh đơn giản như:Có bình thường khi chạy python dưới valgrind cho thấy nhiều lỗi với bộ nhớ?
valgrind python -c ""
Valgrind đầu ra đầy đủ các thông tin lặp đi lặp lại như thế này:
==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 trên Slackware 12.2.
Hành vi bình thường có phải không? Nếu vậy thì valgrind có thể là công cụ không thích hợp để gỡ lỗi lỗi trong Python?
Như một lưu ý cấp cao: Nói chung Valgrind cần một số trợ giúp với các trình phân bổ tùy chỉnh vì nó không thể hiểu được hành vi của một trình phân bổ tùy chỉnh vì nó có thể là một cài đặt chuẩn. – Falaina
vì vậy, nếu tôi đọc readme valgrind một cách chính xác, tôi không thể thực sự sử dụng valgrind để gỡ lỗi một phần mở rộng python c mà không biên dịch phân phối python của riêng tôi ?! –