記錄一次debug過(guò)程

最終證明這是一個(gè)個(gè)性化的錯(cuò)誤。

上傳本地apk進(jìn)行安裝時(shí),進(jìn)行到50%之后就報(bào)錯(cuò)——導(dǎo)致系統(tǒng)推出冈爹。

2020-7-20 15:38:02 INF/storage:temp 17950 [*] Uploaded "67a219fbe4ce8e2ab4c1fc5ce60195d3" to "/home/stf/tempSaveDir/upload_a0cfd8e997b752e14aecb2202cb0c1c4"
2020-7-20 15:38:02 INF/websocket 17944 [*] installMsg manifest  undefined
/home/stf/RemoteDeviceNew/node_modules/protobufjs/dist/ProtoBuf.js:2641
                    throw Error("Illegal value for "+this.toString(true)+" of type "+this.type.name+": "+val+" ("+msg+")");
                    ^

Error: Illegal value for Message.Field .InstallMessage.manifest of type string: undefined (not a string)
    at Field.<anonymous> (/home/stf/RemoteDeviceNew/node_modules/protobufjs/dist/ProtoBuf.js:2641:27)
    at Field.ProtoBuf.Reflect.FieldPrototype.verifyValue (/home/stf/RemoteDeviceNew/node_modules/protobufjs/dist/ProtoBuf.js:2721:29)
    at MessagePrototype.set (/home/stf/RemoteDeviceNew/node_modules/protobufjs/dist/ProtoBuf.js:1799:63)
    at new Message (/home/stf/RemoteDeviceNew/node_modules/protobufjs/dist/ProtoBuf.js:1728:42)
    at Socket.<anonymous> (/home/stf/RemoteDeviceNew/lib/units/websocket/index.js:830:15)
    at emitThree (events.js:136:13)
    at Socket.emit (events.js:217:7)
    at /home/stf/RemoteDeviceNew/node_modules/socket.io/lib/socket.js:528:12
    at _combinedTickCallback (internal/process/next_tick.js:132:7)
    at process._tickCallback (internal/process/next_tick.js:181:9)
2020-7-20 15:38:02 FTL/cli:local 17862 [*] Child process had an error ExitError: Exit code "1"
    at ChildProcess.<anonymous> (/home/stf/RemoteDeviceNew/lib/util/procutil.js:49:23)
    at emitTwo (events.js:126:13)
    at ChildProcess.emit (events.js:214:7)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:198:12)

重新加載為數(shù)不多的前端知識(shí),先搜索對(duì)應(yīng)的關(guān)鍵字欧引,在對(duì)應(yīng)的位置增加log信息频伤。

lib/units/websocket/index.js830行報(bào)錯(cuò),同時(shí)提示.InstallMessage.manifest of type string: undefined芝此”镄ぃ可以推測(cè)出沒(méi)有獲取到apk的manifest信息。

// lib/units/websocket/index.js
.on('device.install', function(channel, responseChannel, data) {
          joinChannel(responseChannel)
          push.send([
            channel
          , wireutil.transaction(
              responseChannel
            , new wire.InstallMessage(
                data.href
              , data.launch === true
              , JSON.stringify(data.manifest)
              )
            )
          ])
        })

// wire.proto 
message InstallMessage {
  required string href = 1;
  required bool launch = 2;
  optional string manifest = 3;
}

拿到原始的apk分析后婚苹,是正常的文件岸更,可以正常安裝。

前端處理上傳文件并進(jìn)行安裝的服務(wù)為res/app/components/stf/install/install-service.js膊升。進(jìn)度到50%時(shí)怎炊,實(shí)際上已經(jīng)將文件上傳成功了,然后開(kāi)始進(jìn)行安裝的動(dòng)作廓译。通過(guò)文件后綴來(lái)區(qū)分apk和ipa的區(qū)別(這塊是定制的內(nèi)容)评肆。看起來(lái)是像是通過(guò)http強(qiáng)求獲取manifest文件內(nèi)容的?這塊先忽略非区。

看本地上傳文件的處理lib/units/storage/temp.js 注意到log內(nèi)容包含Uploaded "67a219fbe4ce8e2ab4c1fc5ce60195d3" to "/home/stf/tempSaveDir/upload_a0cfd8e997b752e14aecb2202cb0c1c4" 似乎文件名做了處理瓜挽。

跟蹤了一下這個(gè)temp.js文件的git歷史記錄,看起來(lái)是同步代碼時(shí)增加了一部分處理文件的操作——

form.on('fileBegin', function(name, file) {
      var md5 = crypto.createHash('md5')
      file.name = md5.update(file.name).digest('hex')
    })

將這段代碼刪除后征绸,恢復(fù)正常久橙。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市歹垫,隨后出現(xiàn)的幾起案子剥汤,更是在濱河造成了極大的恐慌,老刑警劉巖排惨,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吭敢,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡暮芭,警方通過(guò)查閱死者的電腦和手機(jī)鹿驼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)辕宏,“玉大人畜晰,你說(shuō)我怎么就攤上這事∪鹂穑” “怎么了凄鼻?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我块蚌,道長(zhǎng)闰非,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任峭范,我火速辦了婚禮财松,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘纱控。我一直安慰自己辆毡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布甜害。 她就那樣靜靜地躺著舶掖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪尔店。 梳的紋絲不亂的頭發(fā)上访锻,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天,我揣著相機(jī)與錄音闹获,去河邊找鬼期犬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛避诽,可吹牛的內(nèi)容都是我干的龟虎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼沙庐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鲤妥!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起拱雏,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤棉安,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后铸抑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體贡耽,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年鹊汛,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蒲赂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡刁憋,死狀恐怖滥嘴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情至耻,我是刑警寧澤若皱,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布镊叁,位于F島的核電站,受9級(jí)特大地震影響走触,放射性物質(zhì)發(fā)生泄漏意系。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一饺汹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧痰催,春花似錦兜辞、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至缝裁,卻和暖如春扫皱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背捷绑。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工韩脑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人粹污。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓段多,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親壮吩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子进苍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360