我想调试我的 C++ python 扩展库。目前该库正在抛出异常并找出我想在哪里使用 gdb。问题是 gdb 没有捕获异常堆栈。我做了如下:
$ gdb python3
(gdb) run script.py
UserWarning: An exception occurred: sort_index(): detected NaN
当我尝试使用
backtrace
:(gdb) backtrace
No stack.
我知道这样的回溯是可能的,因为我之前已经这样做了,可能我错过了一些东西。该库正在以 Debug模式编译。
最佳答案
Python 异常不会导致 GDB 停止——它只知道在信号上停止,而不是“正常”的私有(private)错误处理。可以在设置 Python 错误指示器的 Python 函数上设置断点,但它们可能是内联的(或宏)。
方便的是,您可以在抛出 的魔术函数上设置一个“断点”。 C++ 异常(exception)——它被称为 捕捉点 并设置有奇怪的catch throw
. (如果(捕获的)异常比您的代码中应该出现的更常见,这将非常嘈杂!)
最后,请注意,您永远不能让 C++ 异常 逃脱进入 Python ——甚至在更大的 C++ 上下文中捕捉它,因为 Python 不知道如何在这种情况下进行清理。
关于c++ - 如何调试 C++ python 扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60515745/