Worker Threads调试必须启用autoAttachChildProcesses:它是硬性前提,否则断点仅在主线程生效;需在launch.json中明确配置"autoAttachChildProcesses": true,并确保Worker路径正确、sourceMaps启用及线程上下文手动切换。

Worker Threads 调试必须启用 autoAttachChildProcesses
VSCode 默认不会自动进入 Worker 线程上下文,即使你用了 worker_threads 模块,断点也只在主线程生效。关键开关是 autoAttachChildProcesses —— 它不是“可选优化”,而是 Worker 调试的硬性前提。
这个配置告诉 vscode-js-debug:一旦主线程调用 new Worker(...) 创建新线程,就立刻 attach 并为其建立独立调试会话。不设它,Worker 代码全程静默运行,断点变空心圆,console.log 都可能被吞掉(尤其在 --inspect-brk 场景下)。
-
launch.json中对应 Node.js 配置必须包含"autoAttachChildProcesses": true - 不要只依赖
"runtimeArgs": ["--inspect"],它只打开调试端口,不触发自动附加逻辑 - 若 Worker 启动极快(比如纯计算型),建议在 Worker 入口加
parentPort?.postMessage('ready')并在主线程监听,确认 Worker 已加载再继续
断点不命中?检查 worker.js 的路径解析和源映射
Worker 文件路径写错、或未被 VSCode 正确识别为工作区文件,会导致断点绑定失败——现象是:断点图标显示为空心圆,悬停提示 “Breakpoint ignored because generated code not found”。这不是 Worker 本身的问题,而是调试器找不到源码位置。
将一个或多个视频上传至YouTube。当用户想“上传到YouTube”“发YouTube”“批量上传”“upload to YouTube”“post videos to YouTube”或发布到YouTube时使用此技能。
- Worker 构造函数中传入的路径必须是相对
__dirname或绝对路径,避免用./worker.js这类易受process.cwd()影响的写法 - 确保
worker.js在当前工作区(${workspaceFolder})内,且没有被.gitignore或files.exclude隐藏 - 如果用了打包工具(如 esbuild、ts-node),需额外配置 source map 输出路径,并在
launch.json中加"sourceMaps": true和"outFiles": ["./dist/**/*.js"]
切换线程上下文时,变量面板不会自动刷新?手动触发 Debug: Switch Thread
VSCode 不支持“多线程并行控制”,但能让你在暂停状态下自由切换焦点线程。问题常出在:断点触发后,调试工具栏顶部的线程下拉菜单没展开,或你误点了“继续”而非“切换”。
- 断点命中后,务必先看右上角线程下拉框——里面应列出
Main Thread和类似Worker Thread #1的条目 - 快捷键
Ctrl+Shift+P→ 输入Debug: Switch Thread,回车,再选目标线程;比手动点下拉更可靠 - 切换后,调用栈(Call Stack)和变量(Variables)面板内容立即更新,但“监视表达式”(Watch)需手动重输,不会继承
- 注意:其他线程仍保持暂停状态,只是你当前看不到它们的上下文
Worker 里调用 console.log 不输出?别漏掉 console 配置项
默认情况下,Worker 的 console 输出可能被丢弃或混进主线程日志,尤其当使用 integratedTerminal 时。这不是 bug,是 VSCode 对子进程输出流的默认分流策略。
- 在
launch.json的 Node.js 配置中显式加上"console": "integratedTerminal",确保所有线程输出都导向同一个终端 - 如果仍不显示,检查是否启用了
"outputCapture": "std"(某些旧版插件需要) - Worker 内部尽量用
parentPort.postMessage()发送结构化数据,而不是依赖console排查逻辑——后者在并发场景下顺序不可靠
Worker Thread #N 可能在下次调试时干扰线程列表。每次重启调试前,最好手动关闭所有 Worker 相关终端标签页。

















