React Native 项目调试

模拟器调试

要使用快捷键请务必确保模拟器的 Hardware 菜单中,Keyboard 选项下的"Connect Hardware Keyboard"处于开启状态,否则按键是没有响应的。我们在模拟器上按快捷键 command + D,即可弹出如下调试菜单。下面分别介绍菜单中的各个调试功能。

Android 模拟器对应的则是Command + M(windows 上可能是 F1 或者 F2),或是直接在命令行中运行adb shell input keyevent 82来发送菜单键命令。

Reload

  • 刷新页面,其快捷键是 command + R。Android 模拟器上对应的则是按两下R
  • 注意:只有修改 JavaScript 文件时,刷新功能才起作用。如果新增了文件或者修改了 Native 代码,就需要使用 Xcode 重新编译应用了。

Debug JS Remotely

该功能允许开发人员在 Chrome 中调试应用,其调试方式和调试 Web 应用一样。当改功能被点击时,React Native 会启动 Chrome 浏览器,并且打开一个 http://localhost:8081/debugger-ui 的新标签。在这个标签页中,我们打开开发者工具,选择 Console,就可以看到输出的日志信息了。

在 Sources Tab 页中还可以显示当前调试项目的所有 js 文件。并在上面进行断点调试。

Enable Live Reload

该功能主要用来实现自动刷新。当我们将实时加载启用后,如果应用中的 JavaScript 代码有任何修改,它都会自动帮我们更新,不需要人为去操作刷新功能。

Start Systrace

该功能主要用来监控应用在一段时间内的指标信息。

  • 我们点击“Start Systrace”开始监控。
  • 然后在操作后选择“Stop Systrace”结束监控。这时会弹出一个提示框,告诉我们数据已经生成。打开生成的 JSON 文件,就可以看到应用在这段时间内的详细指标信息了。

åæ:React Native - è°è¯æå·§åè°è¯èå说æï¼æ¨¡æå¨è°è¯ãçæºè°è¯ï¼

  • 如果我们装了 google 的 trace-viewer 插件,包服务器会帮我们自动调用 trace2html 命令打开这个 JSON 文件。

Enable Hot Reloading

启用热加载,同样是实现页面的自动刷新。

热加载的思想是运行时动态注入修改后的文件内容,同时不中断 APP 的正常运行。这样,我们就不会丢失 APP 的任何状态信息,尤其是 UI 页面栈相关的。

热加载(Hot Reloading)与上面提到的实时加载(Live Reload)最关键的区别:

  • 实时加载应用更新时需要刷新当前页面,可以看到明显的全局刷新效果。
  • 而热加载基本上看不出刷新的效果,类似于局部刷新。

Toggle Inspector

我们可以很方便的查看到当前选中元素的位置、样式、层级关系、盒子模型信息等等。方便我们快速定位问题。

同时还提供了监控应用性能的功能

Show Perf Monitor

该功能启用后会显示一个监控窗口,显示出实时的内存占用、UI 和 JavaScript 的 FPS 等信息。帮助我们调试性能问题

 

 

 

真机调试

将手机连接电脑。并在 Xcode 中,选择你的手机作为目标设备

åæ:React Native - è°è¯æå·§åè°è¯èå说æï¼æ¨¡æå¨è°è¯ãçæºè°è¯ï¼

选择好项目使用的开发者账号

åæ:React Native - è°è¯æå·§åè°è¯èå说æï¼æ¨¡æå¨è°è¯ãçæºè°è¯ï¼

同时相关的 Tests target 里同样也要选择使用的开发者账号。

åæ:React Native - è°è¯æå·§åè°è¯èå说æï¼æ¨¡æå¨è°è¯ãçæºè°è¯ï¼

如果这里没设置的话会出现如下错误,无法启动程序。

Signing for "HelloWorldTests" requires a development team. Select a development team in the project editor.
Code signing is required for product type 'Unit Test Bundle' in SDK 'iOS 10.0'

确保手机和 Mac 电脑在同一个网络环境下。然后编译运行程序。

  • React Native iOS 在新版中 BundleURL 加载方法做了重大改变,新增了 RCTBundleURLProvider 单例类专门处理 BundleURL,使用 NSUserDefaults 保存配置信息。
  • 在 Debug 模式下,执行 react-native-xcode.sh 编译脚本会自动获取当前网卡 en0 的 IP 地址,并打入 App 包中一个配置文件 ip.txt,App 运行时会读取 ip 文件,自动生成 Developer Server URL。
  • 这种加载方式的好处是:我们不再需要手动去把"localhost"改成 Mac 的 IP 了,每次编译都会读取当前最新的 IP。

应用启动后,只需要摇一摇手机可以调出调试菜单,里面具体功能同模拟器一样,这里就不再说明了。

由于 React 的特性,手机运行应用后,就可以断开数据线了。后面电脑上只要修改了 js 文件,手机上就能自动加载或实时热更新。

 

 

应用内的错误与警告提示(红屏和黄屏)

红屏或黄屏提示都只会在开发版本中显示,正式的离线包中是不会显示的。 

红屏错误

应用内的报错会以全屏红色显示在应用中(调试模式下),我们称为红屏(red box)报错。你可以使用console.error()来手动触发红屏错误。

黄屏警告

应用内的警告会以全屏黄色显示在应用中(调试模式下),我们称为黄屏(yellow box)报错。点击警告可以查看详情或是忽略掉。和红屏报警类似,你可以使用console.warn()来手动触发黄屏警告。在默认情况下,开发模式中启用了黄屏警告。可以通过以下代码关闭:

console.disableYellowBox = true;
console.warn('YellowBox is disabled.');

你也可以通过代码屏蔽指定的警告,像下面这样调用 ignoreWarnings 方法,参数为一个数组:

import {YellowBox} from 'react-native';
YellowBox.ignoreWarnings(['Warning: ...']);

在 CI/Xcode 中,黄屏警告还可以通过设置IS_TESTING环境变量来控制启用与否。

 

 

React Developer Tools

npm install -g react-devtools

安装完成后在命令行中执行react-devtools即可启动此工具:

react-devtools

React DevTools

 

访问控制台日志

在运行 RN 应用时,可以在终端中运行如下命令来查看控制台的日志:

react-native log-ios
react-native log-android

此外,你也可以在 iOS 模拟器的菜单中选择Debug → Open System Log...来查看。如果是 Android 应用,无论是运行在模拟器或是真机上,都可以通过在终端命令行里运行adb logcat *:S ReactNative:V ReactNativeJS:V命令来查看。 

 

 

React Native Debugger

RN Debugger 是一个独立的 app,用于 Debug RN 程序,通过 electron 框架编写的。 基于官方的本地调试器,并且具有更多的功能,结合 react devtools 可以监听 react,同时结合了redux devtools 用于监听 redux。

640?wx_fmt=png

上图所示就是 RN Debugger 的界面,其中:

  • redux devtools 部分就是可以监听 RN 中的 redux 的 state,与 redux devtools extension 使用方法一样。
  • react devtools 部分监听 react 的元素,可以查看 RN 中各个元素的样式及在代码中所处的位置。
  • console 部分就是官方提供的本地调试器。

安装RN Debugger

对于 macOS,可以使用 homebrew cask 进行安装或者直接进入官网下载安装

brew cask install react-native-debugger

安装后,会发现这是个独立的 app,所以可以在启动台直接启动 RN Debugger。

使用方法
打开之前,首先需要确保其余的 RN 调试工具都是关闭,如 http://localhost:/debugger-ui。一般默认下,RN Debugger 是默认监听8081端口,而且 RN 程序默认也是8081端口启动。 同时,需要在 RN 程序中此开关(此图对应的是 qrn 程序,如果是原生的 RN 程序,需要打开 debug js remotely)。
640?wx_fmt=png

当开启后,进入 RN 界面后,会发现此事时 react native debugger 开始启动,这样就可以通过 RN Debugger 来调试 RN 的程序了。

640?wx_fmt=png

有时启动 RN 程序时,会采用不同的端口,而这里 RN Debugger 也有针对此操作进行设计。打开菜单栏的 debugger 选项后,选择 new window(快捷键command+T)会打开新的 RN debugger 界面,此时在输入框中输入要监听的端口号,就可以调试从非8081端口启动的 RN 程序。
640?wx_fmt=png

React工具

此工具会启用 webSocket 服务来等待 RN 的连接。对于 QRN 的程序(原生的 RN 程序,无须做任何操作),此时我们只需要打开 js debug mode 功能(此开关打开后会导致 RN 启动较慢)。

640?wx_fmt=png

当打开 RN 的菜单时,选择检查元素(对应原生的为 show inspector),当点击 RN 项目中的某个元素时,RN Debugger 中的 react devtools,会连接到 RN 程序,并且显示其元素的具体信息。

640?wx_fmt=jpeg

这部分显示的是组件的层次结构,可以很清楚的了解你所点选的组件在哪个层次结构中。

640?wx_fmt=png

这部分显示的为组件的 props、state、context 及组件属性的信息,这里可以修改其中的任何值。

640?wx_fmt=png

其中上部分,代表的为元素的样式信息,当你点击样式的某个属性时,可以修改其值。这里修改后,会实时的渲染 RN 程序,无须重新加载,所以在调试样式或组件属性时,特别方便。

640?wx_fmt=png

上图显示的为此元素对应于 RN 项目中代码所处的位置,点击后,会跳转到编辑器(仅限 macos 下的 sublime、vscode、atom)中相应的位置(这功能首先需要设置系统 PATH 中安装启动编辑器命令,如 vscode 可以在编辑器直接设置 code 命令,则在命令行中输入 code 打开编辑器)。当开启 js 调试功能后,RN Debugger 会自动将作用域切换到 RN DebuggerWorker 下,这样就会获得 RN 的全局变量。 (1)$r: 你在react-devtools中所选择的元素。 (2)showAsyncStorageContentInDev():显示AsyncStorage内容。 (3)require(...) (RN < 0.56)/$reactNative.*(RN >= 0.56):获取 RN 的模块。

 

 

调试原生代码

在和原生代码打交道时(比如编写原生模块),可以直接从 Android Studio 或是 Xcode 中启动应用,并利用这些 IDE 的内置功能来调试(比如设置断点)。这一方面和开发原生应用并无二致。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值