Expo项目VSCode调试需装Expo Go插件并配置launch.json的url为http://localhost:19002,用Expo Go扫码启动才能调试移动端,断点仅支持JS文件且需手动重载。

Expo项目在VSCode里打不开调试器?先确认是否装了正确插件
VSCode本身不自带React Native或Expo调试能力,必须手动安装扩展。只装 React Native Tools 不够——它已停止维护,且对Expo支持极差;真正起作用的是官方推荐的 Expo Go 配合 Debugger for Edge 或 JavaScript Debugger(VSCode 1.80+ 内置)。
实操建议:
• 卸载 React Native Tools,避免冲突
• 安装 Expo Go(由Expo官方发布,图标是蓝白E)
• 确保 VSCode 是 1.75+ 版本,无需额外装调试器插件
• 在项目根目录检查是否存在 jsconfig.json 或 tsconfig.json,缺失会导致断点不命中
启动调试时提示“Cannot connect to runtime process”?检查端口和网络环境
这个错误几乎都源于 Expo CLI 和 VSCode 调试器之间通信失败,不是代码问题。Expo 默认用 localhost:19002 启服务,但 VSCode 的调试配置默认尝试连接 localhost:19000 或直接走 WebSocket,容易错位。
实操建议:
• 运行 npx expo start --dev-client 或 npx expo start 后,等控制台输出类似 › Metro waiting on http://localhost:19002 再启动调试
• 在 VSCode 中按 Ctrl+Shift+P → 输入 Debug: Open Configuration → 选择 Expo (Remote) 模板
• 确认生成的 .vscode/launch.json 中 url 字段为 http://localhost:19002(不是 19000)
• 如果用真机调试,确保手机和电脑在同一局域网,且防火墙没拦截 19002 端口
断点不触发、变量显示 undefined?别忽略 Expo 的运行模式差异
Expo 有三种运行方式:Web、Simulator、Expo Go App,每种对应不同调试通道。你在 VSCode 里点 ▶️ 启动调试,默认走的是 Web 模式(打开浏览器),此时断点只对 Web 端生效;想调试 iOS/Android,必须用 Expo Go 扫码或通过 npx expo run:ios 启动原生容器,再让 VSCode attach 上去。
实操建议:
• 调试移动端前,先用手机安装最新版 Expo Go App(App Store / Play Store 搜索即可)
• 在终端运行 npx expo start,看到 QR 码后,用 Expo Go 扫描 —— 此时 App 内会加载 JS Bundle,VSCode 才能注入调试器
• 断点只能打在 JS 文件里,不能打在 App.js 的顶层 JSX 或 hook 调用链过深的位置(V8 引擎限制)
• 修改代码保存后,Expo 会热更新,但断点状态不会自动恢复,需手动重新加载 App(摇动设备 → “Reload”)
调试时 console.log 输出不显示?别依赖终端日志,改用 debug 级别输出
Expo 在移动端运行时,console.log 默认被重定向到 Expo Dev Server 的 Web 控制台,而不是 VSCode 的 Debug Console。你可能在终端看到日志,但在 VSCode 里看不到,误以为没执行。
实操建议:
• 在 launch.json 的配置中添加 "trace": true,开启调试器详细日志
• 用 console.debug() 替代 console.log(),它更容易被调试器捕获
• 在 VSCode 的 Debug Console 标签页右键 → “Enable Language Service”,可获得更好的变量补全和求值支持
• 真机上调试时,日志实际发往 http://localhost:19002/logs,可单独开浏览器访问查看实时流
Expo + VSCode 调试最脆弱的一环,其实是 Metro 和 Chrome DevTools 之间的协议兼容性——哪怕只升级了一个 minor 版本的 expo 包,都可能导致断点失效。遇到问题时,优先检查 expo、react-native、VSCode 版本三者是否在 Expo 官方文档的 supported versions 表中交叉匹配。











