在 VS Code 中从 C++ 调试 pybind

使用 debugpy 调试

在被 C++ 调用的 python 文件中加上这样的内容(端口可以随便选):

import debugpy
debugpy.listen(5678)
debugpy.wait_for_client()

这样在第一次加载这个 python 模块的时候,这行代码就会暂停等待调试器连接。我们可以创建这样的 Python 调试配置,随后连接正在监听端口的 python 程序。

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Python attach",
      "type": "debugpy",
      "request": "attach",
      "connect": {
        "host": "127.0.0.1",
        "port": 5678
      }
    }
  ]
}

如果 C++ 程序的调试器还开着,工作区就会同时存在两个调试器。通过切换调试会话可以对 C++ 和 Python 同时调试。

打印异常信息

如果直接运行,pybind 可能会捕获 python 侧的异常信息,给出的错误不明不白。锁定 python 脚本有错的位置之后,可以在代码周围加上 try-except 块,并打印对应的异常到标准输出流,这样就能根据报错信息进一步找到出错点。