繁体   English   中英

glibc检测到*** free():无效的指针:Python c ++和Swig

[英]glibc detected *** free(): invalid pointer: Python c++ and Swig

我必须运行一些用Python编写的单元测试。 我们有要在c ++中进行测试的代码,因此我将其编译为共享对象,并使用swig为python脚本提供了接口以调用必要的api进行测试。

现在,当我运行一个python脚本(显然正在访问我打算测试的c ++代码库)时,我得到了“ glibc检测到的free():无效指针”。 现在,我确实知道存在一些内存问题,可能是两次释放,或者我正在释放无法访问的内存。 现在,我向您请专家:

1]我没有得到任何回溯记录(甚至没有行号),是否有办法知道问题出在哪里? 除了脚本突然停止并打印类似内容外,我没有任何其他信息
***检测到glibc * free():无效的指针:0x099e9b28 ***
我能以某种方式获得追溯吗? 通过设置一些标志可能是?

2]我跑了valgrind:
“ valgrind --leak-check =是./myscript.py”
我没有得到太多,从中得到一些启示:
glibc检测到free():无效的指针:0x099e9b28
== 25728 ==
== 25728 ==条件跳转或移动取决于未初始化的值
== 25728 ==在0x625AEA:PyObject_Free(在/usr/lib/libpython2.3.so.1.0中)
== 25728 ==通过0x614C7F:(在/usr/lib/libpython2.3.so.1.0内)
== 25728 ==通过0x61EA53:(在/usr/lib/libpython2.3.so.1.0内)

我基本上没有得到任何与我的代码相关的信息。 所以还有其他我应该用valgrind做的事情。

3]我尝试了printfs,实际上没有任何帮助。
4]我尝试了gdb:
提示> gdb python
gdb>设置参数myscript.py
gdb>运行

这将运行脚本,我无法设置任何断点,它将运行并显示错误。 没有绝对的帮助。 GDB还有其他我应该做的事情吗? 有什么办法设置断点?

非常感谢你们给我的任何指针。

我终于想通了! 我执行了命令
ulimit -c无限

之后,我看到一个核心转储,现在我可以通过分析它了
gdb /usr/bin/python2.3 core.31685

我已经使用Google的堆检查器成功调试了此类问题。 它将为您提供分配点和释放点的堆栈跟踪。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM