在VS Code中调试Jupyter Notebook调用的Python C++扩展
回答
一、调试Jupyter Notebook调用的C++扩展
可以通过附加进程的方式实现,步骤如下:
- 启动Jupyter Notebook,运行包含扩展调用代码的单元格,在代码中加入
input()暂停执行(避免代码直接跑完)。 - 在VS Code中新增
launch.json配置,类型选择cppdbg,请求类型设为attach,示例配置:
{ "version": "0.2.0", "configurations": [ { "name": "Attach to Jupyter Process", "type": "cppdbg", "request": "attach", "processId": "${command:pickProcess}", "MIMode": "gdb", "setupCommands": [ { "description": "Enable gdb pretty-printing", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "environment": [ { "name": "PYTHONPATH", "value": "${workspaceFolder}/path/to/cpp/extension/for/python:${env:PYTHONPATH}" } ], "cwd": "${workspaceFolder}" } ] }
- 启动该调试配置,在弹出的进程列表中选中Jupyter对应的Python进程(通常显示为
python/python3,可通过进程ID或命令行参数区分)。 - 附加成功后,在C++扩展代码中设置断点,回到Notebook按回车继续执行,触发断点后即可调试。
二、更新便捷的调试替代方案
1. VS Code Python+C++联合调试(官方推荐)
现在VS Code的Python和C/C++扩展支持无缝联合调试,无需手动编写复杂的launch.json:
- 确保安装最新版的
Python和C/C++扩展。 - 在Python脚本/Notebook代码中,调用扩展前加入:
import debugpy debugpy.listen(5678) debugpy.wait_for_client() - 启动Python进程后,用VS Code的Python调试器附加到5678端口,同时用C调试器附加到对应Python进程,即可实现双向断点调试;或者直接打开Python脚本,点击右上角「调试」按钮选择「Python Debugger」,C断点会在扩展调用时自动触发(需确保
PYTHONPATH指向扩展目录)。
2. CMake Tools扩展适配(CMake构建场景)
如果你的扩展用CMake构建,安装CMake Tools扩展可以大幅简化调试:
- 在
CMakeLists.txt中开启Debug模式:set(CMAKE_BUILD_TYPE Debug)。 - 点击CMake Tools状态栏的「调试」按钮,直接启动并调试调用扩展的Python脚本,扩展会自动处理环境变量、构建产物关联和调试配置。
3. Ninja构建+快速调试
配合Ninja构建系统,Debug模式下编译速度更快,VS Code可自动关联构建产物:
- 用Ninja编译Debug版本的扩展,确保
PYTHONPATH正确配置。 - 直接在C++代码中设置断点,运行Python脚本/Notebook代码时,VS Code会自动触发断点,无需额外配置
launch.json的核心参数。
内容的提问来源于stack exchange,提问作者A.L.
相关产品推荐
相关产品推荐

