`
dengzhangtao
  • 浏览: 681432 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

React Native调试技巧与心得

 
阅读更多
转至 http://blog.csdn.net/quanqinyang/article/details/52215652
在做React Native开发时,少不了的需要对React Native程序进行调试。调试程序是每一位开发者的基本功,高效的调试不仅能提高开发效率,也能降低Bug率。本文将向大家分享React Native程序调试的一些技巧和心得。
Developer Menu

Developer Menu是React Native给开发者定制的一个开发者菜单,来帮助开发者调试React Native应用。

    提示:生产环境release (production) 下Developer Menu是不可用的。

如何开启Developer Menu
在模拟器上开启Developer Menu
Android模拟器:

可以通过Command⌘ + M 快捷键来快速打开Developer Menu。也可以通过模拟器上的菜单键来打开。

    心得:高版本的模拟器通常没有菜单键的,不过Nexus S上是有菜单键的,如果想使用菜单键,可以创建一个Nexus S的模拟器。

iOS模拟器:

可以通过Command⌘ + D快捷键来快速打开Developer Menu。
在真机上开启Developer Menu:

在真机上你可以通过摇动手机来开启Developer Menu。
预览图

Developer Menu
Reloading JavaScript

在只是修改了js代码的情况下,如果要预览修改结果,你不需要重新编译你的应用。在这种情况下,你只需要告诉React Native重新加载js即可。

    提示:如果你修改了native 代码或修改了Images.xcassets、res/drawable中的文件,重新加载js是不行的,这时你需要重新编译你的项目了。

Reload js

Reload js即将你项目中js代码部分重新生成bundle,然后传输给模拟器或手机。
在Developer Menu中有Reload选项,单击Reload让React Native重新加载js。对于iOS模拟器你也可以通过Command⌘ + R 快捷键来加载js,对于Android模拟器可以通过双击r键来加载js。

    提示:如果Command⌘ + R 无法使你的iOS模拟器加载js,则可以通过选中Hardware menu中Keyboard选项下的 “Connect Hardware Keyboard” 。

小技巧:Automatic reloading
Enable Live Reload

Enable Live Reload

React Native旨在为开发者带来一个更好的开发体验。如果你觉得上文的加载js代码方式太low了或者不够方便,那么有没有一种更简便加载js代码的方式呢?
答案是肯定的。
在 Developer Menu中你会看到”Enable Live Reload” 选项,该选项提供了React Native动态加载的功能。当你的js代码发生变化后,React Native会自动生成bundle然后传输到模拟器或手机上,是不是觉得很方便。
Hot Reloading

Hot Reloading

另外,Developer Menu中还有一项需要特别介绍的,就是”Hot Reloading”热加载,如果说Enable Live Reload解放了你的双手的话,那么Hot Reloading不但解放了你的双手而且还解放了你的时间。 当你每次保存代码时Hot Reloading功能便会生成此次修改代码的增量包,然后传输到手机或模拟器上以实现热加载。相比 Enable Live Reload需要每次都返回到启动页面,Enable Live Reload则会在保持你的程序状态的情况下,就可以将最新的代码部署到设备上,听起来是不是很疯狂呢。

    提示:当你做布局的时候启动Enable Live Reload功能你就可以实时的预览布局效果了,这可以和用AndroidStudio或AutoLayout做布局的实时预览相媲美。

Errors and Warnings

在development模式下,js部分的Errors 和 Warnings会直接打印在手机或模拟器屏幕上,以红屏和黄屏展示。
Errors

React Native程序运行时出现的Errors会被直接显示在屏幕上,以红色的背景显示,并会打印出错误信息。 你也可以通过 console.error()来手动触发Errors。

Errors
Warnings

React Native程序运行时出现的Warnings也会被直接显示在屏幕上,以黄色的背景显示,并会打印出警告信息。 你也可以通过 console.warn()来手动触发Warnings。 你也可以通过console.disableYellowBox = true来手动禁用Warnings的显示,或者通过console.ignoredYellowBox = ['Warning: ...'];来忽略相应的Warning。

Warnings

    提示:在生产环境release (production)下Errors和Warnings功能是不可用的。

Chrome Developer Tools
Chrome 开发工具

谷歌 Chrome 开发工具,是基于谷歌浏览器内含的一套网页制作和调试工具。开发者工具允许网页开发者深入浏览器和网页应用程序的内部。该工具可以有效地追踪布局问题,设置 JavaScript 断点并可深入理解代码的最优化策略。 Chrome 开发工具一共提供了8大组工具:

    Element 面板: 用于查看和编辑当前页面中的 HTML 和 CSS 元素。
    Network 面板:用于查看 HTTP 请求的详细信息,如请求头、响应头及返回内容等。
    Source 面板:用于查看和调试当前页面所加载的脚本的源文件。
    TimeLine 面板: 用于查看脚本的执行时间、页面元素渲染时间等信息。
    Profiles 面板:用于查看 CPU 执行时间与内存占用等信息。
    Resource 面板:用于查看当前页面所请求的资源文件,如 HTML,CSS 样式文件等。
    Audits 面板:用于优化前端页面,加速网页加载速度等。
    Console 面板:用于显示脚本中所输出的调试信息,或运行测试脚本等。

    提示:对于调试React Native应用来说,Sources和Console是使用频率很高的两个工具。

你可以像调试JavaScript代码一样来调试你的React Native程序。
如何通过 Chrome调试React Native程序

你可以通过以下步骤来调试你的React Native程序:
第一步:启动远程调试

在Developer Menu下单击”Debug JS Remotely” 启动JS远程调试功能。此时Chrome会被打开,同时会创建一个“http://localhost:8081/debugger-ui.” Tab页。
http-//localhost-8081/debugger-ui
第二步:打开Chrome开发者工具

在该“http://localhost:8081/debugger-ui.”Tab页下打开开发者工具。打开Chrome菜单->选择更多工具->选择开发者工具。你也可以通过快捷键(Command⌘ + Option⌥ + I on Mac, Ctrl + Shift + I on Windows)打开开发者工具。

打开开发者工具

打开Chrome开发着工具之后你会看到如下界面:
打开Chrome开发着工具
真机调试
在iOS上

打开”RCTWebSocketExecutor.m “文件,将“localhost”改为你的电脑的ip,然后在Developer Menu下单击”Debug JS Remotely” 启动JS远程调试功能。
在Android上

方式一:
在Android5.0以上设备上,将手机通过usb连接到你的电脑,然后通过adb命令行工具运行如下命令来设置端口转发。
adb reverse tcp:8081 tcp:8081

方式二:
你也可以通过在“Developer Menu”下的“Dev Settings”中设置你的电脑ip来进行调试。

    心得:在使用真机调试时,你需要确保你的手机和电脑处在同一个网段内,即它们实在同一个路由器下。

小技巧:
巧用Sources面板

Sources 面板提供了调试 JavaScript 代码的功能。它提供了图形化的V8 调试器。 Sources面板

Sources 面板可以让你看到你所要检查的页面的所有脚本代码,并在面板选择栏下方提供了一组标准控件,提供了暂停,恢复,步进等功能。在窗口的最下方的按钮可以在遇到异常(exception)时强制暂停。源码显示在单独的标签页,通过点击 打开文件导航面板,导航栏中会显示所有已打开的脚本文件。

    心得:Chrome开发着工具中的Sources面板几乎是我最常用的功能面板。通常只要是开发遇到了js报错或者其他代码问题,在审视一遍自己的代码而一无所获之后,我首先就会打开Sources进行js断点调试。

执行控工具

从上图可以看到“执行控工具”按钮在侧板顶部,让你可以按步执行代码,当你进行调试的时候这几个按钮非常有用:

    继续(Continue): 继续执行代码直到遇到下一个断点。
    单步执行(Step over): 步进代码以查看每一行代码对变量作出的操作,当代码调用另一个函数时不会进入这个函数,使你可以专注于当前的函数。
    跳入(Step into): 与 Step over 类似,但是当代码调用函数时,调试器会进去这个函数并跳转到函数的第一行。
    跳出(Step out): 当你进入一个函数后,你可以点击 Step out 执行函数余下的代码并跳出该函数。
    断点切换(Toggle breakpoints): 控制断点的开启和关闭,同时保持断点完好。

查看js文件

如果你想在开发者工具上预览你的js文件,可以在打开Sources tab下的debuggerWorker.js选项卡,该选项卡下会显示当前调试项目的所有js文件。

查看js文件
断点其实很简单

断点(Breakpoint) 是在脚本中设置好的暂停处。在DevTools中使用断点可以调试JavaScript代码,DOM更新和 network calls。

    心得:你可以像使用Xcode/AndroidStudio调试Native应用一样,来使用Chrome开发者工具通过断点对程序进行调试。

添加和移除断点

在 Sources 面板的文件导航面板中打开一个JavaScript文件来调试,点击边栏(line gutter) 为当前行设置一个断点,已经设置的断点处会有一个蓝色的标签,单击蓝色标签,断点即被移除。

添加移除断点

    心得:右键点击蓝色标签会打开一个菜单,菜单包含以下选项:执行到此(Continue to Here),黑盒脚本(Blackbox scripts),移除断点(Remove Breakpoint), 编辑断点(Edit Breakpoint),和 禁用断点(Disable Breakpoint)。在这里你可以对断点进行更高级的定制化的操作。右键蓝色图标

高级操作

上文讲到右键点击蓝色标签会打开一个菜单,下面就介绍一下该菜单下的高级操作。

执行到此(Continue to Here):

如果你想让程序立即跳到某一行时,这个功能会帮到你。如果在该行之前还有别的断点,程序会依次经过前面的断点。另外需要提出的是这个功能在任意一行代码的边栏(gutter line)前单击右键都会看到。

黑盒脚本(Blackbox scripts):

黑盒脚本会从你的调用堆栈中隐藏第三方代码。

编辑断点(Edit Breakpoint):

通过该功能你可以创建一个条件断点,你也可以在边栏(gutter line) 右键并选择添加条件断点(Add Conditional Breakpoint) 。在输入框中,输入一个可解析为真或假的表达式。仅当条件为真时,执行会在此暂停。
条件断点

    心得:如果你想让程序在某处从来都不要暂停,可以编辑一个条件永远为false的条件断点。另外,你也可以在该行代码的边栏(gutter line)前单击右键选择“Never pause here”即可,你会发现“Never pause here”其实就是在该行代码上设了一个永远为false的条件断点。Never pause here

管理你的断点

你可以通过Chrome开发者工具的右边面板来统一管理你的断点。

管理断点

    心得:你可以通过断点前的复选框来启用和禁用断点,也可以单击右键来进行更多的操作(如:移除断点,移除所有断点,启用禁用断点等)。

有一种断点叫全局断点

全局断点的作用是,当程序出现异常时,会在异常的地方暂停,这对快速定位异的常位置很方便。
做iOS开发的同学都知道在Xcode中可以设置全局断点,其实在Chrome 开发者工具中也同样有与之对应的功能,叫“Pause On Caught Exceptions”。如果勾选上此功能,则即使所发生运行时异常的代码在 try/catch 范围内,Chrome 开发者工具也能够在错误代码处停住。
全局断点
不要忽略控制台

DevTools 控制台(Console) 可以让你在目前已暂停的状态下进行试验。按 Esc 键打开/关闭控制台。

Console

    心得:你可以在控制台(Console)上打印变量,执行脚本等操作。在开发调试中非常有用。
分享到:
评论

相关推荐

    React Native Debugger reactnative可视化调试工具

    在实际使用中,React Native Debugger通常与`react-native-debugger-open`命令行工具结合,以便在启动应用时自动打开调试器。此外,还可以通过`react-native log-ios`或`react-native log-android`命令来收集应用的...

    EXPO XDE ReactNative For windows

    Expo XDE(Experience Development Environment)是React Native社区推出的一款集成开发环境,专门针对React Native应用的开发。React Native是由Facebook开发的开源框架,它允许开发者使用JavaScript来编写原生的...

    React Native By Example

    React Native By Example by Richard Kho English | 24 Apr. 2017 | ASIN: B01M31KB4Q | 414 Pages | AZW3 | 4.46 MB Key Features Work on native APIs and UI Elements using React Native Get the best of both...

    reactnativepage一个简单的reactnative分页组件

    React Native Page 的优势在于其与React Native的无缝集成,开发者可以充分利用React的声明式编程和状态管理,同时享受到原生应用的性能。由于使用JavaScript编写,开发者可以快速迭代和更新应用,而无需重新编译...

    ReactNative虚线组件兼容Android

    最后,持续关注React Native社区的更新和最佳实践,因为组件的维护和更新与React Native版本的演进息息相关。保持组件库的最新状态可以避免因React Native版本升级带来的兼容性问题。 总之,rn-dashline组件是React...

    Android和ReactNative混合开发Demo

    通过学习和实践这个Demo,你将能够掌握Android和React Native混合开发的核心技巧,包括如何进行模块间的通信,以及如何调试和优化混合应用的性能。 总之,Android和React Native的混合开发提供了一种灵活且高效的...

    react native uwp app

    通过将React组件模型与本地APIs结合,React Native实现了接近原生应用的性能和外观。 在开发React Native UWP应用时,开发者可以利用JavaScript生态系统中的大量库和工具,同时也能访问到UWP的特定功能,如通知、...

    东方耀手把手教React Native实战开发

    第11讲11、手把手教React Native实战之调试与打包发布 前11讲【汇总】前11讲的源码与笔记打包下载 第12讲12、手把手教React Native实战之View组件 第12讲12、手把手教React Native实战之View组件_源码 第13讲13、...

    reactnative debugger tools

    React Native Debugger工具是React Native开发过程中必不可少的调试利器,它为开发者提供了强大的JavaScript源代码调试功能,以及对React Native应用性能的深入洞察。这个工具专为React Native框架设计,可以帮助...

    React Native 瀑布流列表

    4. **数据绑定与渲染**:在React Native中,数据绑定是通过state和props实现的。开发者需要将数据源映射到MasonryList组件的data属性,并提供一个renderItem函数,用于根据每一项数据生成对应的视图。这样,当数据...

    ReactNative开发实例带你入门reactnative开发

    这个“ReactNative开发实例带你入门reactnative开发”的资源,显然是一个针对初学者的教程,旨在帮助他们理解并掌握React Native的基本概念、架构以及实际开发流程。 React Native的核心理念是“Learn Once, Write ...

    ReactNative项目demo

    8. **热重载和调试**:ReactNative提供了实时热重载功能,可以在开发过程中快速查看代码更改的效果。使用Chrome开发者工具或者React Native Debugger可以进行JS端的调试。 9. **发布与部署**:完成开发后,可以通过...

    React Native 开发指南_中文扫描完整版

    8.2 React Native 调试工具 147 8.3 JavaScript 之外的调试方法 152 8.4 测试代码 158 8.5 当你陷入困境 160 8.6 小结 160 第9章 学以致用 161 9.1 闪卡应用 161 9.2 模型与数据存储 168 9.3 使用Navigator ...

    适用于 Android 和 iOS 的 React Native NFC 模块 react-native-nfc

    为 React Native 带来 NFC 功能。灵感来自phonegap-nfc和react-native-ble-manager 该库最简单(也是最常见)的用例是读取NFC包含 的标签NDEF,可以通过以下代码实现: import React from 'react'; import {View, ...

    一个基于reactnative开发的完整项目示例

    10. **调试与测试**:开发者可以使用Chrome开发者工具进行JavaScript的调试,而React Native提供`react-native run-android`或`react-native run-ios`命令来运行应用。对于自动化测试,可以使用Jest和Detox等工具。 ...

    reactnativeuilib是ReactNative的UI组件库和工具集

    **React Native UI Library和工具集:react-native-uilib** React Native是一种流行的JavaScript框架,用于构建原生移动应用程序。...与`react-native-elements`相比,它可能更适合那些重视布局灵活性和简洁性的项目。

    react-ReactNative小书是一本关于ReactNative的入门向的开源书籍

    书中可能涵盖React Native社区的热门话题,如React Navigation用于导航,React Native Paper和Material-UI用于UI设计,以及如何与其他库如GraphQL、Apollo集成等。 通过《React Native小书》的学习,读者将能够...

    ReactNative下的科大讯飞语音库可以进行语音识别与语音合成

    本文将详细探讨如何在React Native项目中集成科大讯飞的语音识别与语音合成功能,以及相关的JavaScript开发和混合移动开发知识。 首先,`React Native`是Facebook推出的一个开源框架,它允许开发者使用JavaScript和...

Global site tag (gtag.js) - Google Analytics