上位機(jī)軟件運(yùn)行到一半,自己把自己給刪了,這是發(fā)生在我們正在做內(nèi)測(cè)的一款設(shè)備的上位機(jī)上發(fā)生的事情,影響還不小,因?yàn)楹芏嗯渲枚荚谲浖夸浬希S著軟件被刪,配置文件跟著也丟了,要知道,光調(diào)機(jī)器的參數(shù),我們就調(diào)了半個(gè)多月,因?yàn)闆]有備份,意味著所有參數(shù)都得重新來,此時(shí)項(xiàng)目經(jīng)理氣得臉都綠了!事情到底是怎么回事呢?
![]()
事情的起因是我們?cè)诮o一臺(tái)設(shè)備做測(cè)試的時(shí)候,上位機(jī)程序突然一下就閃崩了,還好同事之中有一個(gè)人眼疾手快,立馬拍了急停按鈕,不然正在運(yùn)動(dòng)的設(shè)備很有可能撞機(jī)。
不知道發(fā)生了什么事情,再次啟動(dòng)上位機(jī)軟件,發(fā)現(xiàn)報(bào)了一堆錯(cuò),然后找到上位機(jī)根目錄,發(fā)現(xiàn)軟件目錄被刪得干干凈凈的,除了軟件本身的exe文件,還殘留著幾個(gè)其他依賴項(xiàng)的包在里面,所有重要的東西都沒有了!
抱有一絲僥幸心理,我們查看了下電腦回收站,想著看看有沒有可能被刪的文件在回收站里面還能找到,結(jié)果回收站里面啥也沒有!
一波激起千層浪,這個(gè)事情大著呢!因?yàn)槲覀冋谡{(diào)試這臺(tái)設(shè)備,很多設(shè)備參數(shù)都是慢慢調(diào)出來的,比如說運(yùn)動(dòng)控制伺服的的點(diǎn)位信息,光調(diào)試就得調(diào)試好幾天,而像這些動(dòng)態(tài)配置的地方有很多處,隨著軟件被刪,全部丟失了!這下意味著所有非固定參數(shù)都得重新調(diào),這擱誰誰不惱火?
這其中最著急的就是項(xiàng)目經(jīng)理,因?yàn)樵O(shè)備馬上就要交付了,本身時(shí)間就不夠,這下延遲交付是肯定的了!
最開始,我們以為上位機(jī)電腦里面裝了殺毒軟件,是殺毒軟件把上位機(jī)程序當(dāng)病毒給查殺了,但是殺毒軟件很快就被排除了嫌疑,因?yàn)樯衔粰C(jī)壓根就沒有裝殺毒軟件,而且所有防護(hù)和防火墻都是關(guān)著的。
而此時(shí),主上位機(jī)程序員又編譯了一個(gè)軟件版本放到了上位機(jī)電腦上,一運(yùn)行,上位機(jī)程序竟然又閃崩了!
是不是很惱火?當(dāng)時(shí)我們主上位機(jī)程序員氣得都跳起來了!
但是,奇怪的是,在主上位機(jī)程序員自己的電腦上卻不會(huì)出現(xiàn)閃崩的情況,所以,大家一直以為上位機(jī)電腦有問題,可左查右查就是查不出哪里有問題。
最后,主上位機(jī)程序員直接把代碼同步到了上位機(jī)電腦里面,然后直接在IDE上運(yùn)行,在調(diào)試模式下,很快就發(fā)現(xiàn)了問題所在。
原來,是上位機(jī)軟件自己把自己給刪了!
事情到底是怎么發(fā)生的呢?
原來,另一個(gè)上位機(jī)程序員的代碼里面有這么一段邏輯,大概的意思就是某個(gè)功能需要在軟件根目錄里面根據(jù)設(shè)備編號(hào)生成文件夾,然后文件夾里面會(huì)放一些緩存文件,當(dāng)邏輯走完以后,再把文件夾里面的緩存文件刪掉!
這個(gè)程序員考慮的也很仔細(xì),就是如果程序沒走完,那么可能緩存文件就會(huì)冗余在這個(gè)根據(jù)設(shè)備編號(hào)生成的文件夾內(nèi),因此,在軟件啟動(dòng)的時(shí)候,他會(huì)首先判斷這個(gè)文件夾存在不存在,如果存在,則刪除文件夾里面的內(nèi)容。
本身,這個(gè)邏輯已經(jīng)算是比較嚴(yán)謹(jǐn)?shù)牧耍舨怀鍪裁疵〕鰜恚牵∏【褪沁@個(gè)挑不出毛病的邏輯,讓軟件自己把自己給刪了!
他的想法很簡(jiǎn)單,軟件啟動(dòng)時(shí)根據(jù)設(shè)備編號(hào)查看軟件根目錄是否有根據(jù)設(shè)備編號(hào)生成的文件夾,有則刪除文件夾內(nèi)容,沒有則什么都不做。
本身這個(gè)邏輯天衣無縫,但是,這里面有個(gè)問題,那就是設(shè)備編號(hào)不存在怎么辦?
一般來說,我們?cè)趺慈テ唇有枰獎(jiǎng)h除的文件夾地址呢?是不是“軟件根目錄/”+“設(shè)備編號(hào)”?
此時(shí),如果,設(shè)備編號(hào)存在的話,那么目錄將指向軟件根目錄下面的二級(jí)目錄,但是,如果設(shè)備編號(hào)不存在,目錄將指向軟件根目錄!
![]()
看到這里,相信您也猜到了,導(dǎo)致軟件把自己刪了的原因,就是設(shè)備編號(hào)不存在!
最后問題解決了,這個(gè)程序員的思維沒有問題,但是,在拼接需要?jiǎng)h除緩存的目錄時(shí),需要先判斷下設(shè)備編號(hào)是否為空字符串才行!
至于為什么之前沒發(fā)現(xiàn)這個(gè)問題,那是因?yàn)橹暗拇_設(shè)備編號(hào)是存在的,因此程序一直都沒有出現(xiàn)問題,直到我們中途換了一個(gè)硬件,這個(gè)設(shè)備編號(hào)就沒有了。
這個(gè)程序員免不了被大家一頓說,還好問題是在測(cè)試機(jī)上出現(xiàn)的,萬一在正式生產(chǎn)環(huán)境下出現(xiàn)這個(gè)問題,事情就大了!
說到底,引發(fā)這個(gè)大問題的原因其實(shí)就是一個(gè)小問題,但是,有時(shí)候一個(gè)小問題往往會(huì)貫穿整個(gè)流程,所以,代碼還是需要考慮周全才是!
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.