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