[譯]React Native調試方法

訪問App內的開發(fā)菜單

你可以通過搖晃你的設備或者選擇iOS模擬器的Hardware菜單中的“Shake Gesture”來打開開發(fā)者菜單。你還可以在app運行于iPhone模擬器時使用Command+D快捷鍵,或者在運行Android模擬器時使用Command+M快捷鍵。

image.png

注意:在成品(release/producation builds)中開發(fā)者菜單會被關閉。

刷新JavaScript

不用每次你有改變時都重新編譯你的app,你可以直接重載你app的JavaScript代碼。要這樣做,就選擇開發(fā)者菜單中的”Reload“。你也可以在iOS模擬器中按Command+R或者在Android模擬器中按兩次R。

如果Command+R快捷鍵沒能重載iOS模擬器,去往Hardware菜單,選擇Keyboard,然后確保“Connect Hardware Keyboard”是勾選的。

自動重載

你可以通過讓你的app在你改變代碼時自動重載來加快你的開發(fā)速度。自動重載可以在開發(fā)者菜單中選擇“Enable Live Reload”來打開。

更進一步你可能想在添加新文件到JavaScript包中時保持app運行新的版本,可以通過選擇開發(fā)者菜單中的“Enable Hot Reloading”來打開。這可以讓你在重載中保持app的狀態(tài)。

有一些熱重載無法完美實現(xiàn)的情況。如果運行到了任何問題,使用全重載來重置你的app。

對于下面這些情況你可能需要重構你的app來讓改變生效:

  • 你添加了新的資源到你原生app的包中,比如iOS的Images.xcassets中的圖片或者Android的res/drawable文件夾。
  • 你修改了原生代碼(iOS上的Objective-C/Swift或者Android中的Java/C++).

應用內的錯誤與警告提示(紅屏和黃屏)

錯誤和警告會在開發(fā)構建時顯示在你的app中。

錯誤(Errors)

app中的錯誤會在你的app中用紅色背景的全屏顯示。這個屏幕也叫RedBox。你可以使用 console.error() 來手動觸發(fā)一個。

警告(Warnings)

警告會在屏幕上用黃色背景顯示。這些警告條也叫YellowBox。點擊警告條來顯示更多信息或者讓它們不顯示。

和RedBox一樣,你可以使用 console.warn() 來觸發(fā)一個YellowBox。

YellowBox可以通過使用 console.disableYellowBox = true; 來在開發(fā)過程中關閉。特定的警告可以通過設置要忽略的前綴數(shù)組來說的手動忽略:console.ignoredYellowBox = ['Warning:...']

RedBox和YellowBox在發(fā)布構建中都是自動關閉的

訪問控制臺日志

app運行時你可以通過在終端使用下面的命令為iOS和Android app顯示控制臺日志:

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

你也可以通過在iOS模擬器中訪問 Debug -> Open System Log... 或者在Android app在設備或者模擬器上運行時在終端中運行 adb logcat *:S ReactNative:V ReactNativeJS:V 。

Chrome 開發(fā)者工具

在開發(fā)者菜單選擇“Debug JS Remotely”來在Chrome中調試JS代碼。這會打開一個新的tab為http://localhost:8081/debugger-ui

在Chrome的菜單中選擇 Tools -> Developer Tools 來打開開發(fā)者工具。你也可以使用快捷鍵(Mac上為Command+Option+I,Windows上為Ctrl+Shift+I)來訪問開發(fā)者工具。你可能還會打開 Pause On Caught Exceptions 來獲取更好的調試體驗。

現(xiàn)在還不可能在Chrome開發(fā)者工具中使用“React”tab來檢查app小部件。你可以使用Nuclide的“React Native Inspector”作為工作區(qū)。

使用Chrome開發(fā)者工具在設備上調試

在iOS設備上,打開 RCTWebSocketExecutor.m 文件并將“l(fā)ocalhost”改為你電腦的IP,然后在開發(fā)者菜單中選擇“Debug JS Remotely”.

在通過USB連接的Android 5.0+設備上,你可以使用 adb command line tool 來設置端口從設備轉發(fā)到你的電腦:

adb reverse tcp:8081 tcp:8081

或者,在開發(fā)者菜單選擇“Dev Settings”,然后更新“Debug server host for device”的設置來匹配你電腦的IP地址。

如果運行到任何問題,可能是你的某個Chrome擴展程序不小心干擾了調試器。嘗試禁用所有的擴展器然后重新一個個地打開它們直到你找到有問題的擴展程序。

使用自定義的JS調試器

設置 REACT_DEBUGGER 環(huán)境變量為啟動你的自定義調試器的命令來使用自定義的JS調試器來代替Chrome開發(fā)者工具。然后你就可以在開發(fā)者菜單中選擇“Debug JS Remotely”來開始調試。

調試器會接收一系列所有的項目根,通過空間分隔開。比如說,如果你設置 REACT_DEBUGGER="node/path/to/launchDebugger.js --port 2345 --type ReactNative",然后 node/path/to/launchDebugger.js --port 2345 --type ReactNative /path/to/reactNative/app 命令會被用來啟動你的調試器。

通過這種方式執(zhí)行的自定義調試器命令應該是短周期的進程,并且它們不應該產生超過200千字節(jié)的輸出。

在Android上用Stetho調試

1、在 android/app/build.gradle中,添加

compile 'com.facebook.stetho:stetho:1.3.1'
compile 'com.facebook.stetho:stetho-okhttp3:1.3.1'

2、在 android/app/src/main/java/com/{yourAppName}/MainApplication.java 中,添加下面的導入:

import com.facebook.react.modules.network.ReactCookieJarContainer;
import com.facebook.stetho.Stetho;
import okhttp3.OkHttpClient;
import com.facebook.react.modules.network.OkHttpClientProvider;
import com.facebook.stetho.okhttp3.StethoInterceptor;
import java.util.concurrent.TimeUnit;

3、在 android/app/src/main/java/com/{yourAppName}/MainApplication.java 中,添加函數(shù):

public void onCreate() {
super.onCreate();
Stetho.initializeWithDefaults(this);
OkHttpClient client = new OkHttpClient.Builder()
.connectTimeout(0, TimeUnit.MILLISECONDS)
.readTimeout(0, TimeUnit.MILLISECONDS)
.writeTimeout(0, TimeUnit.MILLISECONDS)
.cookieJar(new ReactCookieJarContainer())
.addNetworkInterceptor(new StethoInterceptor())
.build();
OkHttpClientProvider.replaceOkHttpClient(client);
}

4、運行 react-native run-android

5、在新的chrome標簽中,打開:chrome://inspect,點擊 'Inspect device' (“Powered by Stetho”后面的那個)

調試原生代碼

當使用原生代碼時(比如編寫原生組件時)你可以和構建標準的原生app一樣在Android Studio或者Xcode啟動app并獲取其調試功能(設置斷點等等)。

性能監(jiān)控

你可以通過在開發(fā)者菜單中選擇“Perf Monitor”打開一個性能覆蓋來幫助你調試性能問題。


翻譯自React Native官方文檔


查看作者首頁

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,238評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,430評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,134評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,893評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,653評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,136評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,212評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,372評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,888評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,738評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,482評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,179評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,588評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,829評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,610評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,916評論 2 372

推薦閱讀更多精彩內容