我有一个Python程序,它与pybDun11 C++库接口。p>
在图书馆的某个地方,有东西在抛出一个std::bad_alloc
。Python捕捉到了这一点,并轻松地引发了一个异常:
MemoryError: std::bad_alloc
在GDB中运行这一切:
gdb --ex run --args python3 ./my_program
不会在错误分配点导致中断
如果我可以让Python在错误的分配上执行segfault,或者让GDB在Python之前捕获异常,那么我就能够调试它。不幸的是,我也不知道该怎么做
Tags:
调试这需要几个步骤。首先,我们需要调试符号。PyBind11剥去了这些,所以我们必须把它们拿回来
我的CMake文件如下所示:
要取回符号,我需要它看起来像这样:
我还需要获得调试版本:
现在,我可以启动Python程序了:
一个GDB启动,我为
std::bad_alloc
设置一个断点:现在我可以通过键入
c
来运行我的程序稍后,当它崩溃时,我可以使用
bt
命令获取回溯,up
和down
来导航堆栈,print
显示变量的内容,Ctrl+X+A
查看源代码相关问题 更多 >
编程相关推荐