c++ - 如何调试 C++ python 扩展?

标签 c++ python-3.x debugging gdb

我想调试我的 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/

相关文章:

c++ - 使用 boost::property_tree 写入 CDATA XML 节点

c++ - 编译和链接 .so 后的运行时 "symbol lookup error"

python - 使用 xpath selenium 查找元素

Python多进程调试

c# - 如何获取故障转储

C++ 对命名空间 Visual Studio Code 的 undefined reference

c++ - C++ 中的菊花链表

python - 如何将两个参数传递给 Pool.starmap()?

python - 迭代巨大的 XML 文件并获取值?

debugging - 您使用哪种保护措施来避免意外更改生产环境?