必须启用autoattachchildprocesses才能调试worker线程,否则断点为空心圆且console.log可能被吞;需在launch.json配置该参数,并为new worker()显式传入--inspect-brk参数,同时确保路径正确、source map可用及手动切换线程上下文。

必须启用 autoAttachChildProcesses 才能进 Worker 线程
不设这个,断点永远只在主线程生效,Worker 里打的断点全是空心圆,console.log 可能被吞掉——这不是代码问题,是调试器根本没 attach 上去。
它不是“锦上添花”,而是硬性开关,必须写进 .vscode/launch.json 的对应配置里:"autoAttachChildProcesses": true
仅靠 "runtimeArgs": ["--inspect"] 不够,那只是开调试端口,不触发附加逻辑。
new Worker() 必须带 --inspect-brk 参数
Worker 默认不暴露调试端口,即使开了 autoAttachChildProcesses,也会跳过它。
正确写法是显式传参:
new Worker('./worker.js', {
execArgv: ['--inspect-brk=9229']
});
同时确保 launch.json 中:
• "runtimeArgs" 包含 --inspect-brk(主进程用)
• "port" 设为 9229(与 execArgv 一致)
• 端口不能被占用;多个 Worker 实例共用同一端口会导致只连上第一个——建议不指定端口,让 Node 自动分配(即只写 --inspect-brk,不跟等号和数字)
微软正式发布 Visual Studio Code 1.118 版本 。本次更新重点强化了 AI 开发体验与企业管理能力,其中最引人注目的是新增 Copilot CLI 远程控制功能,允许开发者通过手机或网页远程监控和接管 AI 会话 。同时,为了提高 AI 的运行性价比,新版本优化了令牌缓存策略以降低成本 。此外,1.118 版还引入了 Chronicle 本地历史追踪、TypeScript 7.0 支持以及更严格的企业级访问管控 。
路径和 source map 错了,断点就绑定失败
现象:断点显示为空心圆,悬停提示 “Breakpoint ignored because generated code not found”。
常见原因:
-
Worker构造函数里的路径别写./worker.js,改用path.resolve(__dirname, 'worker.js'),避免受process.cwd()影响 -
worker.js必须在当前工作区(${workspaceFolder})内,且不能被.gitignore或files.exclude隐藏 - 如果用了
ts-node或esbuild,launch.json得加:"sourceMaps": true"outFiles": ["./dist/**/*.js"]
断点命中后,得手动切线程上下文
VSCode 不会自动把焦点切到 Worker 线程,变量面板、调用栈都还是主线程的。
操作要点:
- 断点触发后,先看右上角调试工具栏的线程下拉框——里面应有
Main Thread和类似Worker Thread #1的条目 - 别只点下拉菜单,快捷键更可靠:
Ctrl+Shift+P→ 输入Debug: Switch Thread→ 回车 → 选目标线程 - 切换后,调用栈和变量才真正反映该 Worker 的执行状态
Worker 启动极快时(比如纯计算型),建议在 worker 入口加 parentPort?.postMessage('ready'),主线程监听后再继续,避免断点还没来得及设就被跳过。










