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

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

本文关键字:指针 Python c++ 无效 Swig 检测 free glibc      更新时间:2023-10-16

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

现在,当我运行一个python脚本(它显然是访问我打算测试的c++代码库)时,我得到了一个"glibc检测到free():无效指针"。现在我知道有一些内存问题,要么是双重释放,要么是我正在释放一个无法访问的内存。现在我对各位专家的要求是:

1]我没有得到任何回溯(甚至没有行号),无论如何都知道问题发生在哪里?我没有得到任何信息,除了脚本在某个点突然停止并打印这样的东西
*** glibc检测到* free():无效指针:0x099e9b28 ***
我能进行回溯吗?通过设置一些旗帜可以吗?

2]我运行了valgrind:
"valgrind——leak-check=yes ./myscript.py"
我没有得到什么,只有几行:
Glibc检测到free():无效指针:0x099e9b28
25728 = = = =
==25728==条件跳转或移动取决于未初始化的值
==25728== at 0x625AEA: PyObject_Free (in/usr/lib/libpython2.3.so.1.0)
==25728== by 0x614C7F: (within/usr/lib/libpython2.3.so.1.0)
==25728== by 0x61EA53: (within/usr/lib/libpython2.3.so.1.0)

我基本上没有得到任何与我的代码相关的东西。那么,我还应该对valgrind做些什么呢?

3]我试过打印,但它实际上什么也没给我。
[4]我试过gdb:
python提示符> gdb
设置myscript.py参数
Gdb> run

这运行脚本,我不能设置任何断点,它运行并打印错误。没有绝对的帮助。还有什么我应该做与GDB?有办法设置断点吗?

非常感谢你们给我的任何一种指示。

我终于想通了!我执行命令

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

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