天天看點

代碼沒有任何改動,為什麼程式執行會有Bug?

題記

工作中經常遇到開發不同的版本,如版本5.1、版本5.2,5.2版本是在5.1版本上的更新,會修改已有幾個子產品的功能或者新增功能。但對于其中一個子產品M,沒有做任何修改,奇怪的是,為什麼5.2版本的子產品M會有Bug?

如題記,工作中經常遇到的場景。前幾天排查問題,我也越到了同樣的問題,明明A插件子產品是較基準子產品沒有任何代碼改動。但發現新版本下運作時,沒有在緩沖磁盤下生成緩存索引和緩存檔案。排查了很久,終于真相大白。

特将排查方法總結如下:

最初始,打開控制台(前台)日志,看出Bug的地方。并且通過配置檔案,打開日志開關,確定運作能看到最全的日志。由于我們提供客戶的環境,預設不會打開背景日志的,這點也非常關鍵。

一、确認新子產品較基準子產品有無任何改動。

最原始、最有效的方法直接通過BeyondCompare軟體對比兩個子產品的所有檔案,确認是否有改動。

二、有改動,則在改動的地方細細排查。

改動的地方無非是本版本新增功能,或者改動功能。然後再确認上面的Bug是否是改動引發導緻。

三、無改動,則從相關調用子產品逐個排查,并排查檔案的配置等相關輔助檔案有無改動。

說起來容易,三很難做到。如果确認無改動,就應立即轉戰看有沒有子產品間調用,直接調用或者回調。從接口從發,排查是否接口調用出錯引發。

如果非接口調用,還要再排查。對比運作同樣的功能,如啟停服務,仔細對比新、舊版本的每一行日志,找出不同點。

我這裡出的特殊情況,就是對應的緩存目錄檔案沒有讀到,導緻的錯誤。但細想下,沒有讀到檔案,肯定是沒有寫入,為什麼沒有寫入?問題基本上就快追查到了。

最終排查的結果是:由于平台不同,早期版本是硬體版本,對磁盤沒有要求,是以讀配置判定磁盤大小都能達到要求。但是新版本是虛拟版本,磁盤做了限制,但是仍然讀的是早期版本的配置,導緻判定出錯,問題水落石出。

修改方法:根據新版本磁盤檔案,修改配置檔案的參數,修改後Bug不再出現。并反複測試,確定所有場景都不複現,至此,Bug徹底消滅。

總結

即便是生疏的子產品,即便子產品負責人已經不在,回頭看下,也無非上面的思路去排查。一條路行不通,要大膽的揣測和進行Next思路的排查。

作者:銘毅天下

轉載請标明出處,原文位址:

http://blog.csdn.net/laoyang360/article/details/43373663

繼續閱讀