“也好,。我把另一個BUG給留言一下,?!?p> 蕭天看著張雪的模樣,,食指大動,,眼神也是渙散,,不過先把手上的事情解決一下,。
畢竟意外的發(fā)現(xiàn)了另外一個BUG,,蕭天可不會錯過這樣的機會啊,,不說其他什么,,最起碼懸賞再加錢肯定應該是毫無問題的。
天天:維護輔助庫中發(fā)現(xiàn)了另外一個BUG,應該是一個積年老BUG,,代碼片段發(fā)送給你們了,。
發(fā)完這句話,蕭天才是用大拇指按了按自己的太陽穴,,然后笑了笑看著張雪,,“這么晚了……你說我們是不是……”
“嗯哼,你想做什么,?”張雪微笑著,。
“你說呢?”
做了以后,,蕭天心情極好,,自然是繼續(xù)的想著剛剛的代碼,他現(xiàn)在在剛剛舒服的過程中好像有了一點思路,,但是得實踐才知道,。
而通過反復對比正常執(zhí)行過程和出錯誤的執(zhí)行過程,蕭天發(fā)現(xiàn)出錯時,,程序多了一條report,!
要知道網(wǎng)元返回的信息包括命令返回、alert,、report,。alert出現(xiàn)就得記錄并報錯(除非本就預期有這么一條alert),而report一般可以無視,,記錄然后丟棄就是,。
所以沒人注意這一點。
而且蕭天也知道,,測試時網(wǎng)元負荷極低,,而且先做過初始化。
因此每次執(zhí)行應該都差不多,,這里多個report,,很可能就隱含著什么……
所以蕭天也是開始仔細觀察程序和網(wǎng)元的交互記錄,發(fā)現(xiàn)那里的命令返回似乎有些不對,。
命令返回有幾百行,,其中一列是時間,正常來說,,時間應該是2019-10-31 18:21:22,、2019-10-31 18:21:22、2019-10-31 18:21:23,、2019-10-31 18:21:24……這樣子一路排下來,。
但那段數(shù)據(jù),它的時間卻是2019-10-31 18:21:22,、2019-10-31 18:21:23,、2019-10-31 18:21:21、2019-10-31 18:21:22,、2019-10-31 18:21:23……
也就是在秒這個級別存在亂序,,更具體點實際上是在毫秒級別存在亂序/跳躍,即時間格式為2019-10-31 18:21:22.456 2019-10-31 18:21:22.567這樣,,其中某些行組之間存在2,、300毫秒的跳躍。
蕭天按時間連續(xù)性把數(shù)據(jù)分割,,發(fā)現(xiàn)它的輸出是每幾條到十幾條為一組,,組內(nèi)順序正常,組間亂序/跳躍,;但把這些組挑選,、拼接,可以得到兩組數(shù)據(jù),,組內(nèi)時間順序良好,、間隔均勻。
這說明,,這些數(shù)據(jù)可能是兩個命令的返回,,不知怎么混到了一起。
就是因為這種混淆使得命令輸出格式錯亂,,這才使得程序把命令返回識別成了report,。
于是蕭天又看了一下對方的測試筆記,果然,,他們測線路備份切換之類功能,,所以需要同時控制兩個網(wǎng)元;命令在程序中是順序下發(fā)的,,間隔可能只有若干毫秒,。
看到這里,蕭天終于是心里有了底,,開始觀察程序所在目錄,,果然在里面找到個dat文件;用十六進制編輯器打開,,里面果然是網(wǎng)上傳來的原始報文信息,,二進制格式。
報文格式是網(wǎng)元編號:信息,。
再檢查相關代碼,,很顯然,這是因為網(wǎng)元編號被底層通訊模塊丟棄了,只把文本信息返回給了上層,;這就使得上層無法區(qū)分信息來自哪個網(wǎng)元,。
平常這樣做還沒有問題;但遇到同時連接多個網(wǎng)元且需要同時檢查多個網(wǎng)元返回,、且返回信息還比較多時,,數(shù)據(jù)就亂了。
這個東西太基礎,。
因為它和上層關系太過緊密,,修改它影響太大;而且底層通訊模塊的源碼已經(jīng)丟失……
于是,,蕭天又嘗試用字符串分析的辦法來恢復它,,鑒于不同命令返回格式不同、數(shù)據(jù)各異,,蕭天也是用程序嘗試識別每個字段的數(shù)據(jù)類型,,然后再檢測它是否為有序內(nèi)容。
蕭天把這類列叫“索引列”,,索引列有三種,,一種是1、2,、3這樣的數(shù)字編號,,另一種是網(wǎng)元編號這樣一整個都是某個固定數(shù)字/字符的,還有就是年月日時分秒這樣的時間信息,;它們可能同時全部出現(xiàn),,但也可能只出現(xiàn)其中一種,甚至全都沒有,。
當識別出索引列之后,,蕭天就把順序不亂、時間不跳變的若干行視為一個整體,;然后像分析單詞的“編輯距離”一樣,,尋找一種使得數(shù)據(jù)整體上“編輯距離”調整最小的方案,把混淆的數(shù)據(jù)分隔開,。
因為一組數(shù)據(jù)可能有多個索引列,,按照不同索引列拆分的方案還可能不一樣。
因此蕭天也是不得不遍歷各種拆分方案,,尋找綜合最優(yōu)的那種方案……
這是個挺復雜的程序,。
實際上它超出了TCL的能力范圍——它的確能工作,而且沒有出錯時消耗很??;但一旦出錯,,它需要一分多鐘才能恢復。
總之,,蕭天還是把這個程序寫出來了,,而且的確能自動識別并糾正這種問題;但性能消耗太嚴重,,不是可用于生產(chǎn)的正常解決方案,。
想到這里,,蕭天還是決定幫他們重寫底層通訊模塊,,修改通訊約定。
雖然這的確會引起底層代碼的大量更改,,但畢竟范圍還算可控,,而且不需要付出恐怖的性能代價。
就以上種種這一次是真的占用了蕭天挺長時間,。
因為發(fā)布懸賞的這個小公司也是意識到了天天是個大神級別的人物,,所以原本他們的懸賞價格只是兩萬,后來發(fā)現(xiàn)了那個積年老BUG又提升到了三萬,,到現(xiàn)在懸賞價格已經(jīng)提升到了八萬,,就是想讓蕭天也一起尋找BUG根新底層模塊的需求分析和代碼編寫。
看在懸賞這么高的份上,,蕭天也是其中幫他們設計了一下新通訊模塊,。
也因此,就因為這個懸賞,,直接干了蕭天整整三天,,好在懸賞已經(jīng)結算了,不然的話蕭天都覺得是不是太累了點,,當然還有一些方向上的代碼編寫,,下路為了職業(yè)道德還是需要給他們寫一點的。
當然這三天的代碼也不是全部用來攻破,,還是于老爺子他們?nèi)チ艘惶?,公證已經(jīng)辦好了。
明天,,就可以去銀行里面查看熙熙父母的存款到底有多少了,!