如何调试free():Python/Kivy中的无效nex大小错误?

如何调试free():Python/Kivy中的无效nex大小错误?,python,kivy,Python,Kivy,在Kivy中,有时会出现以下错误: *** Error in `python': free(): invalid next size (fast): 0x0000000001d67800 *** Aborted (core dumped) 这并不是每次我测试程序时都会发生的,这让我很困惑 搜索错误消息使我相信它与C代码有关。 我想象我正在用python做一些事情,导致kivy C代码中出现这个错误 我想知道我怎么能追踪这样的虫子 版本: Python版本:2.7.5-5ubuntu3 Cyt

在Kivy中,有时会出现以下错误:

*** Error in `python': free(): invalid next size (fast): 0x0000000001d67800 ***
Aborted (core dumped)
这并不是每次我测试程序时都会发生的,这让我很困惑

搜索错误消息使我相信它与C代码有关。 我想象我正在用python做一些事情,导致kivy C代码中出现这个错误

我想知道我怎么能追踪这样的虫子

版本:

  • Python版本:2.7.5-5ubuntu3

  • Cython版本:0.20.1+git90-g0e6e38e-1ubuntu2

  • Kivy版本:1.8.0-stable0+201401301617^pkg23^ubuntu13.10


首先,安装gdb和Python调试:
sudo-apt-get-install-gdb-python2.7-dbg

然后在gdb中加载应用程序:
gdb--args python

您应该会收到gdb提示
(gdb)
。键入
r
并按Enter键。您的程序将开始正常运行(尽管速度较慢)

一旦应用程序崩溃,Kivy窗口将保持打开状态,gdb外壳将再次显示提示。在此提示符下键入
bt
,查看回溯

例如:

$ gdb --args python segtest.py
GNU gdb (GDB) 7.6.1-ubuntu
Copyright (C) 2013 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /usr/bin/python2.7...Reading symbols from /usr/lib/debug/usr/bin/python2.7...done.
done.
(gdb) r
Starting program: /usr/bin/python segtest.py
warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7ffff7ffa000
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[INFO   ] [Logger      ] Record log in /home/ryan/.kivy/logs/kivy_14-07-28_13.txt
[INFO   ] [Factory     ] 169 symbols loaded
[DEBUG  ] [Cache       ] register <kv.image> with limit=None, timeout=60s
[DEBUG  ] [Cache       ] register <kv.atlas> with limit=None, timeout=Nones
[INFO   ] [Image       ] Providers: img_tex, img_dds, img_pygame, img_pil, img_gif 
[DEBUG  ] [Cache       ] register <kv.texture> with limit=1000, timeout=60s
[DEBUG  ] [Cache       ] register <kv.shader> with limit=1000, timeout=3600s
[DEBUG  ] [Cache       ] register <kv.lang> with limit=None, timeout=Nones
[INFO   ] [Text        ] Provider: pygame
[DEBUG  ] [Cache       ] register <textinput.label> with limit=None, timeout=60.0s
[DEBUG  ] [Cache       ] register <textinput.width> with limit=None, timeout=60.0s
[INFO   ] Kivy v1.8.1-dev
[INFO   ] [Python      ] v2.7.6 (default, Mar 22 2014, 22:59:56) 
[GCC 4.8.2]
[DEBUG  ] [Window      ] Ignored <egl_rpi> (import error)
[INFO   ] [Window      ] Provider: pygame(['window_egl_rpi'] ignored)
[DEBUG  ] [Window      ] Display driver x11
[DEBUG  ] [Window      ] Actual window size: 800x600
[DEBUG  ] [Window      ] Actual color bits r8 g8 b8 a8
[DEBUG  ] [Window      ] Actual depth bits: 24
[DEBUG  ] [Window      ] Actual stencil bits: 8
[DEBUG  ] [Window      ] Actual multisampling samples: 4
[INFO   ] [GL          ] OpenGL version <3.0 Mesa 10.1.3>
[INFO   ] [GL          ] OpenGL vendor <Intel Open Source Technology Center>
[INFO   ] [GL          ] OpenGL renderer <Mesa DRI Intel(R) Sandybridge Mobile >
[INFO   ] [GL          ] OpenGL parsed version: 3, 0
[INFO   ] [GL          ] Shading version <1.30>
[INFO   ] [GL          ] Texture max size <8192>
[INFO   ] [GL          ] Texture max units <16>
[DEBUG  ] [Shader      ] Fragment compiled successfully
[DEBUG  ] [Shader      ] Vertex compiled successfully
[DEBUG  ] [ImagePygame ] Load </home/ryan/git/aeris2/kivy/kivy/data/glsl/default.png>
[DEBUG  ] [Modules     ] Start <inspector> with config {}
[INFO   ] [Window      ] virtual keyboard not allowed, single mode, not docked
[DEBUG  ] [App         ] Loading kv <./test.kv>

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff5971db6 in __pyx_f_4kivy_8graphics_12instructions_6Canvas_add (__pyx_v_self=0x7fffe2ec4a68, 
    __pyx_v_c=0x920190 <_Py_NoneStruct>, __pyx_skip_dispatch=<optimized out>) at kivy/graphics/instructions.c:8532
8532        ((struct __pyx_vtabstruct_4kivy_8graphics_12instructions_Instruction *)__pyx_v_c->__pyx_vtab)->radd(__pyx_v_c, ((struct __pyx_obj_4kivy_8graphics_12instructions_InstructionGroup *)__pyx_v_self));
(gdb) bt
#0  0x00007ffff5971db6 in __pyx_f_4kivy_8graphics_12instructions_6Canvas_add (__pyx_v_self=0x7fffe2ec4a68, 
    __pyx_v_c=0x920190 <_Py_NoneStruct>, __pyx_skip_dispatch=<optimized out>) at kivy/graphics/instructions.c:8532
#1  0x00007ffff597487e in __pyx_pf_4kivy_8graphics_12instructions_6Canvas_6add (
    __pyx_v_c=0x920190 <_Py_NoneStruct>, __pyx_v_self=0x7fffe2ec4a68) at kivy/graphics/instructions.c:8611
#2  __pyx_pw_4kivy_8graphics_12instructions_6Canvas_7add (
    __pyx_v_self=<kivy.graphics.instructions.Canvas at remote 0x7fffe2ec4a68>, __pyx_v_c=None)
    at kivy/graphics/instructions.c:8591
#3  0x000000000052ccbc in call_function (oparg=<optimized out>, pp_stack=0x7fffffffd870) at ../Python/ceval.c:4008
#4  PyEval_EvalFrameEx (
    f=f@entry=Frame 0x7fffdfa10050, for file /home/ryan/git/aeris2/kivy/kivy/core/window/__init__.py, line 647, in add_widget (self=<WindowPygame(_context=<Context(sandbox=None) at remote 0x7ffff659a740>, single_vkeyboard=True, _keyboards={'system': <Keyboard(widget=None, callback=None, window=<...>, target=None) at remote 0x7fffe2ebf0b8>}, _vkeyboard_cls=None, _system_keyboard=<...>, _pos=(0, 0), allow_vkeyboard=False, use_syskeyboard=True, flags=1073741843, trigger_keyboard_height=<ClockEvent(_last_dt=0, cid=207, clock=<ClockBase at remote 0x7ffff65c4a28>, weak_callback=<WeakMethod(_func=<function at remote 0x7fffe2e9fed8>, _obj=<weakref at remote 0x7fffe2ec2050>, _class=<type at remote 0x1029ac0>) at remote 0x7fffe2ebc9d0>, callback=None, timeout=<float at remote 0xf0ea98>, _is_triggered=False, _dt=<float at remote 0xa83608>, loop=False) at remote 0x7fffe2ebc990>, initialized=True, docked_vkeyboard=False, dpi=<float at remote 0xf0e930>, trigger_create_window=<ClockEvent(_last_dt=0, cid=207, clock=<...>, weak_callback=<W...(truncated), throwflag=throwflag@entry=0) at ../Python/ceval.c:2666
...
...
...
$gdb--args python segtest.py
GNU gdb(gdb)7.6.1-ubuntu
版权所有(C)2013免费软件基金会。
许可证GPLv3+:GNU GPL版本3或更高版本
这是自由软件:您可以自由更改和重新发布它。
在法律允许的范围内,不存在任何担保。键入“显示复制”
和“显示保修”了解详细信息。
此GDB配置为“x86_64-linux-gnu”。
有关错误报告说明,请参阅:
...
从/usr/bin/python2.7读取符号…从/usr/lib/debug/usr/bin/python2.7读取符号…完成。
完成。
(gdb)r
启动程序:/usr/bin/python segtest.py
警告:在0x7FFFF7FFA0000处添加的符号文件系统提供的DSO中找不到可加载的节
[已启用使用libthread_db的线程调试]
使用主机libthread_db library“/lib/x86_64-linux-gnu/libthread_db.so.1”。
[INFO][Logger]记录登录/home/ryan/.kivy/logs/kivy_14-07-28_13.txt
[信息][工厂]加载了169个符号
[DEBUG][Cache]寄存器,限制=None,超时=60s
[DEBUG][Cache]寄存器,限制=None,超时=Nones
[信息][图片]提供商:img_-tex、img_-dds、img_-pygame、img_-pil、img_-gif
[调试][缓存]寄存器,限制为1000,超时为60s
[DEBUG][Cache]寄存器,限制为1000,超时为3600s
[DEBUG][Cache]寄存器,限制=None,超时=Nones
[信息][文本]提供商:pygame
[DEBUG][Cache]寄存器,限制=None,超时=60.0s
[DEBUG][Cache]寄存器,限制=None,超时=60.0s
[信息]Kivy v1.8.1-dev
[INFO][Python]v2.7.6(默认,2014年3月22日,22:59:56)
[GCC 4.8.2]
[调试][窗口]已忽略(导入错误)
[INFO][Window]提供者:pygame(['Window\u egl\u rpi']已忽略)
[调试][窗口]显示驱动程序x11
[调试][窗口]实际窗口大小:800x600
[调试][窗口]实际颜色位r8 g8 b8 a8
[调试][窗口]实际深度位:24
[调试][窗口]实际模具位:8
[调试][窗口]实际多采样样本:4
[信息][GL]OpenGL版本
[信息][GL]OpenGL供应商
[INFO][GL]OpenGL渲染器
[信息][GL]OpenGL解析版本:3,0
[信息][GL]明暗处理版本
[信息][GL]纹理最大大小
[信息][GL]纹理最大单位
[DEBUG][Shader]片段已成功编译
[调试][着色器]顶点已成功编译
[DEBUG][ImagePygame]加载
[调试][模块]以config{}开始
[信息][窗口]不允许使用虚拟键盘,单模,未对接
[调试][应用]加载千伏
程序接收信号SIGSEGV,分段故障。
0x00007ffff5971db6 in\uuuuuPyx\uF\u4Cavy\u8图形\u12说明\u6画布\uuu6添加(\uuuuuuuPyx\uV\uSelf=0x7fffe2ec4a68,
__pyx_v_c=0x920190,uu pyx_skip_dispatch=)位于kivy/graphics/instructions.c:8532
8532((structu pyxu vtabstructivyu 8图形u 12指令u指令c->u pyxu vtab)->radd(u pyxu vc,((structu pyxu objivyu 8图形u指令u指令组*));
(gdb)英国电信
#0 0x00007FF5971DB6英寸图形说明画布添加,
__pyx_v_c=0x920190,uu pyx_skip_dispatch=)位于kivy/graphics/instructions.c:8532
#1 0x00007FF597487E在图形、说明、画布和附件中(
__pyx_v_c=0x920190,pyx_v_self=0x7fffe2ec4a68)在kivy/graphics/instructions.c:8611
#2 uuu pyx u pw 4常春藤8图形12说明6画布7添加(
__pyx_v_self=,_pyx_v_c=无)
在kivy/graphics/instructions.c:8591
#在../Python/ceval.c:4008处调用函数(oparg=,pp_stack=0x7fffffffd870)中的3 0x000000000052CBC
#4 PyEval_EvalFrameEx(

f=f@entry=帧0x7fffdfa10050,用于文件/home/ryan/git/aeris2/kivy/kivy/core/window/_init__uuuuuu.py,第647行,在add_widget中(self=您针对的android版本是什么?我知道android2.2在纹理id分配方面有一些问题,可能与此有关…(或者这是在kivy测试环境中发生的?(在windows或其他平台上?)如果是这样的话,你在实际的设备上也看到了吗?..什么平台,Kivy版本,Cython版本,等等?你有没有可能使用C调试器(比如gdb)要在这种情况下获得回溯?我实际上不知道如何使用C调试器。python/kivy是如何实现的?我将编辑这个问题以包括版本。我在开发的早期就得到了这个问题。我还没有在设备上尝试过。我的目标是Jelly Beam,但问题发生在PC上。安装gdb和python调试-
sudo apt get install gdb python2.7-dbg
。然后从应用程序目录运行
gdb--args python
。当收到提示时,键入
r
,然后按Enter键,应用程序将启动。当应用程序崩溃时,Kivy窗口将保持打开,终端将运行