核心前提是先手动启动App并进入调试模式,而非依赖VSCode一键启动;需删掉自动生成的launch.json,执行npx react-native run-android后摇动设备点Debug,再由VSCode attach调试器。

VSCode 调试 React Native 移动端项目,核心前提不是“配对插件”,而是让调试器能真正 attach 到运行中的 JS 线程——这要求你先手动启动 App 并主动进入调试模式,而不是依赖 VSCode 一键启动就万事大吉。
为什么点了 Debug 按钮却没反应?
因为 React Native Tools 插件默认生成的 launch.json 是“launch”模式,它试图自己拉起 Metro 和 App,但在真机/模拟器场景下几乎必然失败。VSCode 不负责设备连接、APK 安装或 Hermes 启动,它只管调试通道。
- 删掉项目里自动生成的
.vscode/launch.json,别再用它 - 先在终端手动执行
npx react-native run-android(或run-ios),等 App 完全启动并处于前台 - 摇动设备(Android)或按
Cmd+D(iOS 模拟器)调出开发者菜单 → 点击Debug - 此时 Chrome 会打开
http://localhost:8081/debugger-ui/,同时 VSCode 的 JavaScript Debugger 才能成功 attach
断点不命中?检查 sourceMaps 和运行路径
断点灰色、点击无效、变量显示 undefined,90% 是源码映射断了。Metro 默认开启 sourceMap,但以下情况会破坏它:
使用 @ainative/react-sdk 为 React 应用添加 AI 聊天和积分。适用于 (1) 安装 @ainative/react-sdk,(2) 使用 useChat hook 实现聊天完成。
- 项目根目录缺失
jsconfig.json或tsconfig.json(VSCode 无法识别模块解析路径) - 用了自定义 Metro 配置(如
metro.config.js中关闭了sourceMap或改了projectRoot) - 断点打在顶层 JSX(如
return (...>))或useEffect外部的函数体——Hot Reloading 下这些代码可能被跳过重执行 - 确保
launch.json(如果还留着)里有"sourceMaps": true和"request": "attach"
Expo 项目和 CLI 项目调试方式完全不同
Expo 不能用 react-native run-android,也不能靠摇动设备进 Debug —— 它走的是远程 JS bundle 加载,调试必须通过 Expo Go + URL attach。
- 卸载已废弃的
React Native Tools,它对 Expo 支持极差 - 安装官方
Expo Go插件(蓝白 E 图标) - 运行
npx expo start,等控制台输出› Metro waiting on http://localhost:19002后,再用手机 Expo Go 扫码 - VSCode 中按
Ctrl+Shift+P→Debug: Open Configuration→ 选Expo (Remote),确认生成的url是http://localhost:19002(不是 19000) - 断点只对 JS/TS 文件生效,不支持 JSX 渲染层直接断点
最常被忽略的一点:热更新后断点状态不会自动恢复,哪怕你改了一行 console.log,也得手动摇动设备 → Reload,否则旧断点仍挂在已卸载的模块上。

















