Python & C/C++ 混合开发,调试指南
Debug 第三方库:
调试Python第三方库时,通常需要从源码编译库的 Debug 版本,过程可能会非常繁琐,特别是涉及 C/C++ 依赖时。
但也可以用python调试release库,但生成调试信息pdb,这样可以调试源码而不用python_d
常见问题:
依赖 C++ 库:
- 如果某些三方库依赖大量 C++ 代码 SDK,这可能涉及几个 GB 的开发库,并且需要复杂的编译环境配置。
- 在面对第三方 Python 库中使用大量 C++ 代码时,建议考虑是否值得继续,尤其是调试时间成本较高的情况下。
不兼容的 ABI:
- python_d只能加载 Debug 动态链接库, 因此需要从源码重新编译。
- 需要自行尝试,如果 python_d 运行出现找不到模块的错误通常就是ABI不兼容需要自行编译debug版本
- 就算你把release库重命名为_d结尾,_d版本python也不能加载,会出现错误(版本不兼容导入失败):
- <Fault 1: “<class ‘ImportError’>:Module use of python312.dll conflicts with this version of Python.”>
自定义构建工具:
- 如果库使用
make、cmake等自定义构建工具,而非只使用setuptools,则需要手动编译和安装,按照库的 README, docs 文档进行编译步骤。
- 如果库使用
适用于使用 setuptools 的库:
对于仅使用 setuptools 构建的库,可以直接使用以下命令安装 Debug 版本:
1 | # 从 requirements.txt安装所有库的 debug 版本 |
在 VSCode 中混合调试 Python 和 C++ 源码
要在 VSCode 中同时调试 Python 和 C++ 代码,需要以下配置:
必要插件:
- C++ 插件:支持 C++ 代码的调试。
- Python 插件:支持 Python 代码的调试。
- GDB: 调试C\C++代码
- Python C++ Debugger 插件(可选):此插件可以自动附加调试进程,或自行使用 GDB 进行手动附加调试。
launch.json 示例配置:
1 | { |
注意事项:
- 使用
_d版本 Python:确保你安装并使用了 Python 的 Debug 版本(python_d)。 - **关闭
justMyCode**:关闭此选项以便调试第三方库代码,而不仅仅是你自己的代码。
c_cpp_properties.json 示例配置:
这个文件主要用于 C++ 代码的语法分析,方便代码提示和调试。
1 | { |
总结:
- 手动编译第三方库的 Debug 版本可能会耗时,尤其是有复杂依赖时。
- 对于使用
setuptools的库,可以通过pip install --no-binary安装 Debug 版本。 - 在 VSCode 中配置好 Python 和 C++ 的调试环境,可以帮助你同时调试 Python 与 C++ 代码。
参考:
https://nadiah.org/2020/03/01/example-debug-mixed-python-c-in-visual-studio-code/
You need to set
install_url to use ShareThis. Please set it in _config.yml.