ceval.c中的引用计数问题

我的调试python 2.5.2可执行使用py_ref_debug有问题
和py_trace_refs设置.有了我的一个脚本,我得到了:
...
致命的Python错误:Python/Ceval.c:947对象在0x2AA3F4D840的涉及负率为-26042462221760230
程序收到信号sigabrt,中止.
[切换到线程182905044128(LWP 2595)]
0x0000002A95DDE479在RAISE()中,来自/lib64/tls/libc.so.6
(gdb)p((PyObject*)0x2AA3F4D840) - > ob_type
$ 1 =(struct _typeobject *)0xDBDBDBDBDBDBDBDB
(GDB)P((PyObject*)0x2AA3F4D840) - > ob_refcnt
$ 2 = -2604246222170760230
(gdb)p((PyObject*)0x2AA3F4D840) - > _ ob_next
$ 3 =(struct _Object *)0xDBDBDBDBDBDBDBDB
(gdb)p((PyObject*)0x2AA3F4D840) - > _ ob_prev
$ 4 =(struct _Object *)0xDBDBDBDBDBDBDBDB
(GDB)
是否有任何"常见"原因可以在命令上使用这种奇怪的对象
堆栈,或者我的任何扩展模块都更有可能导致
破坏?
亲切的问候
berthold
- -
__ 地址:
g / \ l Germanischer lloyd
电话:+49-40-36149-7374-+-----+ - Vorsetzen 35 P.O.Box 111606
传真: +49-40-36149-7320 \ __/ D-20459 Hamburg D-20416 Hamburg(_@_ _)
BertholdHöllmann写道:
您的扩展程序很可能具有参考计数错误.它
看起来您要么缺少py_incref,要么有py_decref
太多了.新释放的内存充满了0xDB(请参阅对象/obmalloc.c.c
Deadbyte).
狂野的猜测:您是否使用pytypeobject w/o使用pymodule_addobject
py_incref()类型对象?
克里斯蒂安

# 回答1


Christian Heimes
  • 您的扩展程序很可能具有参考计数错误.它
    看起来您要么缺少py_incref,要么有py_decref
    太多了.新释放的内存充满了0xDB(请参阅
    对象/obmalloc.c deadByte).
    我怀疑这一点,这就是为什么我构建调试版本的原因
    Python.我希望我能在代码附近的某个地方收到错误消息
    导致错误,但我似乎必须继续搜索.
    那本来很容易:-)我只有一次
    pymodule_addobject,其pytypeobject是py_incref()ed
    谢谢
    berthold
    - -
    __ 地址:
    g / \ l Germanischer lloyd
    电话:+49-40-36149-7374-+-----+ - Vorsetzen 35 P.O.Box 111606
    传真: +49-40-36149-7320 \ __/ D-20459 Hamburg D-20416 Hamburg
    -----开始PGP签名-------------
    版本:gnupg v1.4.0(gnu/linux)
    id8dbqfiymtevnklbupgt+8rarwiakcby40o5x7cfxeajtie34 aii67keqccfdute
    SCGFJCXTTA5FD3EVQCY7NZM =
    = z6xr
    -----结束PGP签名-----
  • 标签: python

    添加新评论