type必须设为"pwa-msedge",它由Microsoft Edge Tools for VS Code扩展支持;写"edge"或"msedge"会静默失败;需配合严格匹配的url、webRoot、sourceMapPathOverrides,并用--remote-debugging-port和--user-data-dir命令行启动Edge。

type 必须设为 "pwa-msedge",不是 "edge" 或 "msedge"
VS Code 1.80+(2025 年后所有稳定版)已彻底弃用旧式 edge 类型。写 "type": "edge" 或 "type": "msedge" 都会静默失败——断点变空心圆、调试面板无响应、控制台不报错,只默默不工作。
唯一有效类型是 "pwa-msedge",它由 Microsoft 官方扩展 Microsoft Edge Tools for VS Code 提供支持。这个扩展同时兼容 Chromium 内核的 Edge 和 WebView2 运行时(比如 Office 加载项)。
- 卸载所有名称含
Legacy Edge Debugger、v4.x或Edge DevTools(非 Microsoft 发布者)的插件 - 在 VS Code 扩展市场搜索
Microsoft Edge Tools for VS Code,确认发布者是 Microsoft,安装并重启 - 安装后状态栏右下角应显示 “Microsoft Edge Tools 已启用”
launch.json 中 url 和 webRoot 必须严格匹配运行时环境
断点不命中,90% 是因为 url 和浏览器地址栏不一致,或 webRoot 指向了构建产物而非源码根目录。
飞书语音消息发送器。基于 Edge TTS,一键将文字转为语音发送到飞书。 使用场景: - 发送语音通知/提醒到飞书 - 文字转语音自动播报 触发词:飞书语音、语音发送、tts、文字转语音
例如你用 vite 启动项目,地址是 http://localhost:5173/login?tab=profile,那 url 字段必须一模一样:协议、端口、路径、查询参数、甚至末尾斜杠(/login/ ≠ /login)都不能错。
-
webRoot应设为源码所在目录,通常是"${workspaceFolder}";若源码在src/下但构建输出在dist/,别误写成"${workspaceFolder}/dist" - 如果项目用了 Webpack/Vite 的别名(如
@/components),需配合sourceMapPathOverrides显式映射,例如:"sourceMapPathOverrides": {<br> "webpack:///src/*": "${webRoot}/src/*",<br> "webpack:///./src/*": "${webRoot}/src/*"<br>}
Edge 必须启用远程调试端口,不能双击图标启动
双击桌面图标打开的 Edge 默认关闭远程调试协议,VS Code 连不上就会卡在 Could not connect to localhost:9222 ——这不是配置问题,是 Edge 根本没暴露接口。
- 先关掉所有 Edge 进程:
taskkill /f /im msedge.exe(Windows)或pkill -f "msedge.*9222"(macOS/Linux) - 用命令行启动:
msedge --remote-debugging-port=9222 --user-data-dir=/tmp/edge-debug -
--user-data-dir是必须的,否则 Edge 拒绝以调试模式复用主配置;端口可换(如9223),但仅当request为"attach"时才需同步改port字段
断点变空心圆?优先检查 source map 是否生成并加载
空心圆 = VS Code 找到了断点位置,但没加载到原始源码。根源几乎都在构建配置或路径映射上,和断点本身无关。
- Vite 项目:开发模式默认开启
build.sourcemap: true,但若手动改过vite.config.ts关闭了它,要加回来 - Webpack 项目:确保
devtool设为'source-map'或更稳的'inline-source-map',避免用'eval'类型(不生成外部 .map 文件) - 在 Edge 地址栏输入
edge://inspect,点击“Configure”,确认你的本地端口(如9222)已勾选;再点“Open dedicated DevTools for Node”,看 Sources 面板里能否展开webpack://或app://下的原始文件
--user-data-dir,或 url 中少了个 ? 或 # ——这种细微差异不会报错,只会让整个调试链路静默失效。


















