如何附加调试调用Python脚本的C++本地进程的Python端代码
内嵌Python的C++原生进程Python端调试方案
之前Visual Studio附加不生效的核心原因是附加时默认仅加载了Native调试引擎,没有同时加载Python调试组件,自然不会识别Python符号、命中py断点。以下是可落地的操作方法:
Visual Studio 混合调试配置(单IDE同时调C++和Python)
- 打开「附加到进程」窗口后,先不要直接选中进程点附加,找到「附加到」选项旁的「选择」按钮
- 在弹出的调试代码类型选择面板,放弃自动识别模式,手动勾选两个调试类型:
- Native:用于调试C++宿主层逻辑
- Python:用于调试内嵌Python层逻辑
- 确认选择后再选中目标C++进程执行附加,此时VS输出窗口的调试日志会显示Python调试引擎已加载,预设的Python断点会从空心未绑定状态转为实心可命中状态
- 若仍无法加载Python符号,逐一排查以下配置:
- 宿主进程加载的Python动态库版本,必须和VS当前选中的Python环境版本完全匹配,比如进程加载
python310.dll时,不能对应VS里配置的Python3.9环境 - 不要使用裁剪过的嵌入式Python最小包,这类包会移除调试依赖的导出接口,必须使用官方完整发行版的Python运行时
- 断点必须打在宿主进程实际加载的py源文件上,不要打在路径不一致的文件副本上
- 宿主进程加载的Python动态库版本,必须和VS当前选中的Python环境版本完全匹配,比如进程加载
备选稳定方案:debugpy远程端口调试
如果VS混合调试存在版本兼容问题,可以用Python官方调试组件debugpy做端口附加,稳定性更高:
- 在C++宿主初始化Python解释器后,最先执行的Python入口代码中注入以下调试初始化逻辑:
import debugpy # 监听本地5678调试端口 debugpy.listen(("localhost", 5678)) # 如需启动后立刻等待调试连接再执行业务逻辑,取消注释下一行 # debugpy.wait_for_client()
- 启动C宿主进程后,在VS中打开附加到进程窗口,连接类型选择「Python 远程调试」,连接目标填
localhost:5678即可附加Python侧调试;如果需要同时调C逻辑,再开一个VS实例附加同一个进程,仅勾选Native调试类型即可,两边调试互不干扰。 - 无IDE的轻量场景可以直接在需要断下的Python代码行插入
import pdb; pdb.set_trace(),进程运行到该行时会自动在控制台拉起pdb命令行调试器,不需要额外配置。
内容的提问来源于stack exchange,提问作者Aidoru
相关产品推荐
相关产品推荐

