在valgrind下运行python是否正常显示许多内存错误? [英] Is it normal that running python under valgrind shows many errors with memory?

查看:280
本文介绍了在valgrind下运行python是否正常显示许多内存错误?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在我的Python C扩展中调试内存崩溃,并尝试在valgrind下运行脚本。我发现valgrind输出中有太多的噪音,即使我运行简单的命令如下:

  valgrind python -c

Valgrind输出的重复信息如下所示:

  == 12317 ==无效读取大小4 
== 12317 ==在0x409CF59:PyObject_Free(在/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 ==地址0x43CD010是一个大小为8,208的块中的7,016个字节free'd
== 12317 ==在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 == 0x41095D7:PyRun_StringFlags(在/ usr / lib / lib中python2.5.so.1.0)
== 12317 == by 0x40DF262 :(在/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 == 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 :(在/usr/lib/libpython2.5.so.1.0中)
== 12317 == by 0x41002B0 :(在/ usr / lib / libpython2内.5.so.1.0)

Python 2.5.2在Slackware 12.2上。



是正常行为吗?如果是这样,那么valgrind可能是Python调试内存错误的不适当工具?

解决方案

你可以尝试使用抑制文件附带的python源



阅读 Python Valgrind README 是一个好主意!


I've tried to debug memory crash in my Python C extension and tried to run script under valgrind. I found there is too much "noise" in the valgrind output, even if I've ran simple command as:

valgrind python -c ""

Valgrind output full of repeated info like this:

==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 on Slackware 12.2.

Is it normal behavior? If so then valgrind maybe is inappropriate tool for debugging memory errors in Python?

解决方案

You could try using the suppression file that comes with the python source

Reading the Python Valgrind README is a good idea too!

这篇关于在valgrind下运行python是否正常显示许多内存错误?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆