崩潰收集匾效,可以精準(zhǔn)定位到行號和源文件名

ReactNative 在 Debug 的情況下恤磷,其實(shí)還是很貼心的,如果出現(xiàn)崩潰的 Bug扫步,會直接出紅屏,提示你崩潰的棧的具體信息河胎,這些內(nèi)容可以幫助你快速的定位問題闯袒。
而假如現(xiàn)在同樣的代碼,使用 Release 模式的話游岳,則會直接崩潰了。來看看崩潰的 Log 輸出胚迫。


image.png

那么接下來來看看如何定位到這個崩潰的真實(shí)代碼,value@304:1133 這里访锻,就是線索褪尝。
react-native 命令,還有一個可配置的參數(shù) —sourcemap-output期犬,它就是我們需要的。
react-native bundle
--platform android
--dev false
--entry-file index.js
--bundle-output android/app/src/main/assets/index.android.bundle
--assets-dest android/app/src/main/res/
--sourcemap-output android-release.bundle.map

注意這段命令龟虎,需要在 ReactNative 目錄的根目錄下執(zhí)行,否者會提示你找不到 node_module 遣总。執(zhí)行完成轨功,就可以在 ReactNative 項目目錄下容达,看到輸出的 android-release.bundle.map 文件了。

解析這個 source-map 花盐,NodeJs 為我們提供了一個專門的庫來解析,這里不多解釋柒昏,直接上代碼熙揍。
var sourceMap = require('source-map');
var fs = require('fs');

fs.readFile('../android-release.bundle.map', 'utf8', function (err, data) {
var smc = new sourceMap.SourceMapConsumer(data);

console.log(smc.originalPositionFor({
    line: 304,
    column: 1133
}));

});

注意看這里指定的 304 行 1133 列,我們運(yùn)行一下届囚,看看輸出。

image.png

到此泥耀,我們算是完成了 ReactNative App蛔添,崩潰分析的一個完整的鏈路邏輯,我們只需要自己寫個腳本工具迎瞧,就可以幫我們精準(zhǔn)定位了。

前面有點(diǎn)長蜘醋,這里總結(jié)一下本小結(jié)的內(nèi)容。

ReactNative 不同的編譯模式压语,使用的 JS 來源不同编检。Debug 模式來自 Packager Server,而 Release 模式允懂,來自 Apk 的 assets 目錄。
Debug 模式下的崩潰粥航,會觸發(fā)紅屏,而 Release 模式下的崩潰递雀,會直接導(dǎo)致 App 崩潰。
Debug 模式缀程,之所以可以顯示崩潰棧的基本信息,是因?yàn)榫幾g的 JS 文件中,包含了對應(yīng)的源文件和代碼行號撩满。而這些在 Release 模式下的 JS 是沒有的。
Release 模式的崩潰棧是被混淆后的,可以通過崩潰棧顯示的行號和列號曼追,來定位代碼礼殊,但是無法定位具體源文件针史。
通過 react-native 命名,增加 --sourcemap-output參數(shù)婚陪,指定輸出需要的混淆 Mapping 文件,它其內(nèi)包含了混淆的信息。
解讀 ReactNative Mapping 文件常空,可以使用 source-map 這個 NodeJs 庫來進(jìn)行解析漓糙,可以精準(zhǔn)定位到行號和源文件名。

另外蝗蛙,RN 項目很容易崩潰
經(jīng)常使用發(fā)行包進(jìn)行測試的開發(fā)者們可能會發(fā)現(xiàn),在發(fā)行版本中捡硅,如果出現(xiàn)了腳本錯誤,還是會直接閃退牍蜂。我們可能會希望捕獲這種錯誤鲫竞,給予用戶合理的提示从绘,并采集錯誤詳情幫助后續(xù)版本改進(jìn)是牢。這時候可以使用如下的代碼:

require('ErrorUtils').setGlobalHandler(function(err) {
// 做你自己的任何處理
});

實(shí)驗(yàn)代碼如下:

require('react-native')
require('ErrorUtils').setGlobalHandler(function (err) {
console.log('Just ignore');
});
setTimeout(()=>{
throw new Error(‘Ouch');
}, 10000);

require('./src/app'); // 正常啟動app

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末批什,一起剝皮案震驚了整個濱河市社搅,隨后出現(xiàn)的幾起案子形葬,更是在濱河造成了極大的恐慌笙以,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異缘屹,居然都是意外死亡侠仇,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來豹休,“玉大人威根,你說我怎么就攤上這事洛搀×裘溃” “怎么了谎砾?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵景图,是天一觀的道長。 經(jīng)常有香客問我,道長忘晤,這世上最難降的妖魔是什么设塔? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任闰蛔,我火速辦了婚禮序六,結(jié)果婚禮上例诀,老公的妹妹穿的比我還像新娘。我一直安慰自己繁涂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布秉沼。 她就那樣靜靜地躺著唬复,像睡著了一般敞咧。 火紅的嫁衣襯著肌膚如雪妄均。 梳的紋絲不亂的頭發(fā)上丰包,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天邑彪,我揣著相機(jī)與錄音寄症,去河邊找鬼矩动。 笑死悲没,一個胖子當(dāng)著我的面吹牛示姿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播栈戳,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼子檀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了偏化?” 一聲冷哼從身側(cè)響起侦讨,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤韵卤,失蹤者是張志新(化名)和其女友劉穎沈条,沒想到半個月后蜡歹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涕烧,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡父款,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年憨攒,在試婚紗的時候發(fā)現(xiàn)自己被綠了肝集。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛛壳。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖勉痴,靈堂內(nèi)的尸體忽然破棺而出蒸矛,到底是詐尸還是另有隱情,我是刑警寧澤劣像,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布耳奕,位于F島的核電站屋群,受9級特大地震影響坏挠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜对竣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芥牌。 院中可真熱鬧壁拉,春花似錦弃理、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驻啤。三九已至骑冗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間巧涧,已是汗流浹背谤绳。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工闷供, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疑俭。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像豪硅,于是被迫代替她去往敵國和親懒浮。 傳聞我的和親對象是個殘疾皇子砚著,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容