VSCode的“开发者工具”仅调试界面层,业务代码需用Debugger:Python须装debugpy并设type为"python",Node.js需--inspect参数,插件调试须在Extension Development Host窗口中进行。

VSCode 的“开发者工具”(DevTools)本身不能直接调试你写的业务代码——它只负责渲染 VSCode 界面,和你的插件、Python、Node.js 等运行逻辑完全隔离。真正能断点、查变量、单步执行的,是 VSCode 的「调试器(Debugger)」,不是 DevTools。
为什么按 Ctrl+Shift+I 看不到你的 console.log
你按 Ctrl+Shift+I 打开的是 VSCode 主窗口的渲染进程 DevTools,它的 console 只输出界面层日志(比如菜单加载失败、UI 组件报错)。你在插件里写的 console.log、Python 脚本里的 print()、Node.js 里的 console.log(),全都不会出现在这里。
- 插件代码(TypeScript/JavaScript)的日志,只出现在「Extension Development Host」窗口的 DevTools 里(需 F5 启动后,在那个新窗口里再按
Ctrl+Shift+I) - Python/Node.js 等业务代码的日志,默认输出到 VSCode 底部的
Debug Console或集成终端(integratedTerminal),不是 DevTools - 最稳的日志方式是写文件:
require('fs').appendFileSync('./log.txt', ...)或 Python 的logging.FileHandler
调试 Python 必须装 debugpy,且 launch.json 里 type 要写 python
VSCode 默认不带 Python 调试能力,必须通过 debugpy 提供后端支持。光装 Python 扩展不够,还得确保当前 Python 环境里已安装它:
- 运行
python -m pip install --upgrade debugpy(注意:不是pip install debugpy,前者保证与解释器绑定) -
launch.json中"type"字段必须是"python"(不是"debugpy",也不是"pwa-node") - 如果用 conda 环境,启动 VSCode 前要先
conda activate myenv,否则debugpy可能被装到 base 环境,而调试时却调用了另一个环境的 Python - 常见错误:
ModuleNotFoundError: No module named 'debugpy'—— 就是没在当前解释器里装对
Node.js 调试分 launch 和 attach,--inspect 参数不能少
VSCode 调试 Node.js 不是“打开就进”,它依赖 V8 的调试协议,必须让 Node 进程显式开启调试端口:
- 用
launch模式:配置"program": "index.js",VSCode 会自动加--inspect启动,但要求入口文件可直接执行(不能是 ESM +type: "module"且没配"runtimeArgs") - 用
attach模式:手动运行node --inspect index.js,然后在 VSCode 里选对应配置连接;端口默认是9229,若改了就得同步更新launch.json的"port" - ESM 项目容易失败:需加
"runtimeArgs": ["--inspect", "--experimental-specifier-resolution=node"],否则断点不命中、import报错 - 不推荐用
nodemon --inspect直连:VSCode 有时无法稳定捕获子进程,建议用nodemon --exec node --inspect
插件开发调试失败,八成卡在「没进对窗口」
VSCode 插件跑在独立的 extension host 进程里,和主编辑器进程内存、全局对象、API 全都不通。F5 启动后弹出的窗口标题含 [Extension Development Host],才是你的插件真实运行环境:
- 在这个窗口里按
Ctrl+Shift+I,才能看到vscodeAPI、插件activate()里的console.log,也才能在sources面板里看到你src/extension.ts的源码(前提是sourceMap正确生成并加载) - 断点灰掉?先检查
out/extension.js对应的.map文件是否生成、路径是否被package.json的"main"字段指向正确位置 - 插件崩溃时看输出面板 →
Log (Extension Host),而不是主窗口 DevTools 的 console - 别信「Debug Console」面板——它只是调试器附加上去后的交互式评估环境,不反映插件初始化阶段的真实执行流
真正难调的永远不是语法,而是上下文:哪个进程、哪套模块解析规则、哪份 sourceMap 映射、哪个 Python 解释器路径——这些细节一旦错位,断点就只是摆设。











