capacitor调试在vscode中失败,90%因未执行npx cap add android/ios导致webview调试桩未注入;必须先运行该命令生成原生工程并注入桩,再配置launch.json的type为capacitor、正确url和webroot,启用sourcemap,并手动执行npx cap sync同步代码。

Capacitor 调试在 VSCode 里跑不起来,90% 是因为漏了 npx cap add android 或 npx cap add ios 这一步——不是插件没装对,而是 WebView 调试桩根本没注入,断点再准也传不进原生容器。
必须先执行 npx cap add 才能调试
Capacitor 不是运行时,它只是桥接器。你写的 JS/TS 运行在 WebView 里,而 VSCode 的断点要能命中,得靠原生工程里注入的调试桩(比如 Android 的 WebView.setWebContentsDebuggingEnabled(true))。npx cap add android 干两件事:生成 android/ 目录结构 + 注入这个桩;npx cap add ios 同理生成 ios/App/App.xcworkspace 并配置 WKWebView 调试支持。
常见错误现象:
-
No Android project found in android/—— 没运行npx cap add android -
Cannot find ios/App/App.xcworkspace——npx cap add ios没执行,或执行后删了ios/目录又没重加 - 断点灰色、变量面板为空、
this指向丢失 —— 调试通道不通,本质是没桩
launch.json 必须用 "type": "capacitor"
VSCode 官方扩展 ms-vscode.cp-debug(2026.1+ 版)才内置 capacitor 类型。用 chrome 或 cppdbg 都不行:前者走 Chrome DevTools 协议,后者连的是原生 GDB/LLDB,而 Capacitor 调试走的是专用代理协议,负责把 JS 断点映射到 WebView 内部上下文。
关键配置项:
-
"type": "capacitor"—— 强制,不能改 -
"url": "http://localhost:3000"—— 必须是开发服务器地址,file://会被 WebView 拒绝,报net::ERR_FILE_NOT_FOUND -
"webRoot": "${workspaceFolder}/dist"—— Vite 默认输出路径;SvelteKit 可能是${workspaceFolder}/build/client,填错就找不到 sourcemap - 别碰
miDebuggerPath或runtimeExecutable—— Capacitor 不需要,填了反而干扰启动
每次改前端代码后,必须手动 npx cap sync
npx cap add 只生成一次原生工程骨架,但不会自动把你的 dist/ 同步过去。npx cap sync android(或 ios)才是把构建产物复制进 android/app/src/main/assets/www 或 ios/App/public 的关键命令。
容易踩的坑:
- 改完
src/文件,直接点 VSCode “启动调试”,结果还是旧逻辑 —— 忘了npx cap sync - 用
npm run build但没等构建完成就跑npx cap sync—— 同步的是空dist/,App 启动白屏 - 同时开发 Android 和 iOS,只 sync 了一个平台 —— 另一个平台看不到最新改动
真机调试要额外开开关
iOS 模拟器默认支持调试;但真机需进 Xcode 打开 ios/App/App.xcworkspace,确认 Signing & Capabilities 中启用了 Automatically manage signing。Android 真机则必须在手机设置里打开两项:
- 开发者选项 → USB 调试
- 开发者选项 → 启用 WebView 调试(注意不是“USB 调试”下面的子项,是独立开关)
缺任意一项,VSCode 就连不上设备,调试会卡在 “Attaching to device…” 无响应。
最常被忽略的点:Capacitor 调试依赖源码映射(sourcemap),但 Vite/Webpack 默认只在 dev 模式下生成。如果用 build 命令生成了 dist/,却没确保 sourceMap: true 开着,VSCode 就只能停在压缩后的代码上,根本打不了源码断点。











