作過原生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)上打印變量,執行腳本等操做。在開發調試中最經常使用