如何调试C++;python扩展? < >我想调试我的C++ Python扩展库。目前库正在抛出一个异常,为了弄清楚在哪里,我想使用gdb。问题是gdb没有捕获异常堆栈。我是这样做的: $ gdb python3 (gdb) run script.py UserWarning: An exception occurred: sort_index(): detected NaN

如何调试C++;python扩展? < >我想调试我的C++ Python扩展库。目前库正在抛出一个异常,为了弄清楚在哪里,我想使用gdb。问题是gdb没有捕获异常堆栈。我是这样做的: $ gdb python3 (gdb) run script.py UserWarning: An exception occurred: sort_index(): detected NaN,c++,python-3.x,debugging,gdb,C++,Python 3.x,Debugging,Gdb,当我尝试使用回溯时: (gdb) backtrace No stack. 我知道这样的回溯是可能的,因为我以前已经这么做了,可能我遗漏了什么。库正在以调试模式编译。Python异常不会导致GDB停止,它只知道在信号上停止,而不是“正常”的私有错误处理。可以在设置Python错误指示器的Python函数上设置断点,但它们可能是内联的(或者是宏) 方便的是,您可以在抛出C++异常的神奇函数上设置一个“断点”。它被称为捕获点,并通过奇怪的捕获抛出进行设置。(如果(捕获到的)异常比代码中应有的异常更常

当我尝试使用
回溯时

(gdb) backtrace
No stack.

我知道这样的回溯是可能的,因为我以前已经这么做了,可能我遗漏了什么。库正在以调试模式编译。

Python异常不会导致GDB停止,它只知道在信号上停止,而不是“正常”的私有错误处理。可以在设置Python错误指示器的Python函数上设置断点,但它们可能是内联的(或者是宏)

方便的是,您可以在抛出C++异常的神奇函数上设置一个“断点”。它被称为捕获点,并通过奇怪的
捕获抛出
进行设置。(如果(捕获到的)异常比代码中应有的异常更常见,这将非常嘈杂!)


<>最后,注意,你不能让C++异常<强>逃逸<强>到Python,甚至在更大的C++上下文中捕获它,因为Python不知道如何在这种情况下清理。

< PythExpExt不会导致GDB停止它只知道停止信号,而不是“正常”,私人错误处理。可以在设置Python错误指示器的Python函数上设置断点,但它们可能是内联的(或者是宏)

方便的是,您可以在抛出C++异常的神奇函数上设置一个“断点”。它被称为捕获点,并通过奇怪的
捕获抛出
进行设置。(如果(捕获到的)异常比代码中应有的异常更常见,这将非常嘈杂!)


<>最后,注意,在一个更大的C++环境中,你不能让C++异常<强>逃逸< /强>进入Python,因为Python不知道如何在这种情况下清理。

这通常是正确的,你正在调试模块的调试构建吗?它在蟒蛇身上吗?在命令行上运行“python3 script.py”是否会出现相同的错误?在请求回溯之前,您的进程似乎已经退出。是一个C++异常被抛出(也许然后转换成Python异常)?@ DaviSreIn:是的,我把C++异常传递给Python,现在它工作了,谢谢!这通常是正确的,您正在调试模块的调试版本吗?它在蟒蛇身上吗?在命令行上运行“python3 script.py”是否会出现相同的错误?在请求回溯之前,您的进程似乎已经退出。是一个C++异常被抛出(也许然后转换成Python异常)?@ DaviSreIn:是的,我把C++异常传递给Python,现在它工作了,谢谢!