作过原生APP开发的同窗们都清楚,咱们在Xcode和studio中就能够直接对编写的代码进行断点调试,很方便,可是web开发断点调试就不能直接在开发工具中完成了,须要借助浏览器来完成,React相关的开发断点调试和web开发基本上同样,也是在浏览器上进行调试,虽然没有原生那么方便,可是也还算简单。React Native调试须要借助官方的
Developer Menu
,下面咱们就来简单聊聊这个Developer Menu
和Chrome Developer Tools
前端
模拟器开启Developer Menuandroid
Command⌘ + D
快捷键来快速打开Developer MenuCommand⌘ + M
快捷键来快速打开Developer Menu。也能够经过模拟器上的菜单键来打开真机开启Developer Menugit
在只是修改了js代码的状况下,若是要预览修改结果,你不须要从新编译你的应用。在这种状况下,你只须要告诉React Native从新加载js便可。github
注意: 若是你修改了native的代码或修改了Images.xcassets、res/drawable中的文件,从新加载js是不行的,这时你须要从新编译你的项目了web
Reload js浏览器
Reload js将你项目中js代码部分从新生成bundle文件,而后传输给模拟器或手机框架
在Developer Menu中单击Reload
让React Native从新加载js。对于iOS模拟器你也能够经过Command⌘ + R
快捷键来加载js,对于Android模拟器能够经过双击r键来加载js函数
*注意:*若是Command⌘ + R 没法使你的iOS模拟器加载js,能够经过选中Hardware menu中Keyboard选项下的 'Connect Hardware Keyboard' 试试工具
Enable Live Reload布局
在 Developer Menu中有 'Enable Live Reload' 选项,该选项提供了React Native动态加载的功能。当你的js代码发生变化后,React Native会自动生成bundle而后传输到模拟器或手机上
Enable Hot Reloading
Developer Menu中还有一项须要特别介绍的,就是'Enable Hot Reloading'热加载,若是说Enable Live Reload解放了你的双手的话,那么Hot Reloading不但解放了你的双手并且还解放了你的时间。 当你每次保存代码时Hot Reloading功能便会生成这次修改代码的增量包,而后传输到手机或模拟器上以实现热加载。相比 Enable Live Reload须要每次都返回到启动页面,Enable Live Reload则会在保持你的程序状态的状况下,就能够将最新的代码部署到设备上,当你作布局的时候启动Enable Live Reload功能你就能够实时的预览布局效果了,方便省时
React Native程序运行时出现的Warnings也会被直接显示在屏幕上,以黄色的背景显示,并会打印出警告信息,你也能够经过console.warn()
来手动触发Warnings,你也能够经过console.disableYellowBox = true
来手动禁用Warnings的显示,或者经过console.ignoredYellowBox = ['Warning: ...']
来忽略相应的Warning
React Native程序运行时出现的Error会被直接显示在屏幕上,以红色的背景显示,并会打印出错误信息, 你也能够经过 console.error()来手动触发Error
注意: 在生产环境release下Error和Warning功能不在生效
配置好相应的调试证书,直接链接线链接到真机运行便可
摇晃手机,调出Developer Menu面板,在'Developer Menu'下的'Dev Settings'中Debug server host & prot for device配置本身路由器ip地址。端口使用8081便可
Chrome 开发工具
谷歌Chrome开发工具,是基于谷歌浏览器内含的一套网页制做和调试工具。开发者工具容许网页开发者深刻浏览器和网页应用程序的内部。该工具能够有效地追踪布局问题,设置 JavaScript 断点并可深刻理解代码的最优化策略。Chrome开发工具一共提供了8大组工具:
注意: 对于调试React Native应用来讲,Sources和Console是使用频率最高的两个工具
你能够像调试JavaScript代码同样来调试你的React Native程序
在Developer Menu下单击'Debug JS Remotely'启动JS远程调试功能,此时Chrome会被打开,同时会建立一个'http://localhost:8081/debugger-ui'网页
在该'http://localhost:8081/debugger-ui'网页下打开开发者工具,打开Chrome菜单->选择更多工具->选择开发者工具。你也能够经过快捷键(Command⌘ + Option⌥ + I
on Mac, Ctrl + Shift + I on Windows)打开开发者工具
打开Chrome开发着工具以后你会看到以下界面
Sources面板提供了调试 JavaScript 代码的功能
Sources面板可让你看到你所要检查的页面的全部脚本代码,并在面板选择栏下方提供了一组标准控件,提供了暂停,恢复,步进等功能。在窗口的最下方的按钮能够在遇到异常(exception)时强制暂停。源码显示在单独的标签页,经过点击 打开文件导航面板,导航栏中会显示全部已打开的脚本文件
Chrome开发着工具中的Sources面板几乎是最经常使用的功能面板。一般只要是开发遇到了js报错或者其余代码问题,在审视一遍本身的代码而一无所得以后,首先就会打开Sources进行js断点调试
执行控制工具
从上图能够看到'执行控制工具'按钮在侧板顶部,让你能够按步执行代码,当你进行调试的时候这几个按钮很是有用:
查看js文件
若是你想在开发者工具上预览你的js文件,能够在打开Sources tab下的debuggerWorker.js选项卡,该选项卡下会显示当前调试项目的全部js文件,或者是用快捷键 cmd + o
调出文件搜索直接进行搜索,这个更加便捷高效
断点(Breakpoint)是在脚本中设置好的暂停处,在DevTools中使用断点能够调试JavaScript代码
在 Sources 面板的文件导航面板中打开一个JavaScript文件来调试,点击边栏(line gutter) 为当前行设置一个断点,已经设置的断点处会有一个蓝色的标签,单击蓝色标签,断点即被移除
右键点击蓝色标签会打开一个菜单,菜单包含如下选项:执行到此(Continue to Here),黑盒脚本(Blackbox scripts),移除断点(Remove Breakpoint), 编辑断点(Edit Breakpoint),和 禁用断点(Disable Breakpoint)。在这里你能够对断点进行更高级的操做
高级操做
若是你想让程序当即跳到某一行时,这个功能会帮到你。若是在该行以前还有别的断点,程序会依次通过前面的断点。另外须要提出的是这个功能在任意一行代码的边栏(gutter line)前单击右键都会看到
黑盒脚本会从你的调用堆栈中隐藏第三方代码
经过该功能你能够建立一个条件断点,你也能够在边栏(gutter line) 右键并选择添加条件断点(Add Conditional Breakpoint) 。在输入框中,输入一个可解析为真或假的表达式。仅当条件为真时,执行会在此暂停
若是你想让程序在某处历来都不要暂停,能够编辑一个条件永远为false的条件断点。另外,你也能够在该行代码的边栏(gutter line)前单击右键选择“Never pause here”便可,你会发现“Never pause here”其实就是在该行代码上设了一个永远为false的条件断点
管理断点
你能够经过Chrome开发者工具的右边面板来统一管理你的断点
你能够经过断点前的复选框来启用和禁用断点,也能够单击右键来进行更多的操做(如:移除断点,移除全部断点,启用禁用断点等)
全局断点
全局断点的做用是,当程序出现异常时,会在异常的地方暂停,这对快速定位异的常位置很方便。 作iOS开发的同窗都知道在Xcode中能够设置全局断点,其实在Chrome 开发者工具中也一样有与之对应的功能,叫'Pause On Caught Exceptions'。若是勾选上此功能,则即便所发生运行时异常的代码在 try/catch 范围内,Chrome 开发者工具也可以在错误代码处停住
DevTools控制台(Console)可让你在目前已暂停的状态下进行试验。按 Esc 键打开/关闭控制台
你能够在控制台(Console)上打印变量,执行脚本等操做。在开发调试中最经常使用