必須知道的導致程式崩潰點。

2021-10-14 17:37:49 字數 669 閱讀 4628

1.在**開發過程中,有的時候我們會在源**中新增一些除錯**和資訊列印,因為想看看程式執行到這個點會發生些什麼。(每次出現這種情況的時候,我建議你想想是否新增乙個單元測試用例會更有意義?)除錯完就沒用的**,通常沒有必要留著。但有的時候,我們仍會留下一些日誌列印,以便出現問題時可以更好地進行診斷。

2.在c++**中可以通過條件編譯來防止除錯**影響到生產環境,我們也可以通過日誌級別來控制除錯資訊的輸出。不過由於疏忽,有時我們仍然可以在生產環境的日誌裡看到開發人員留下的古怪資訊,如果不小心讓使用者看到就麻煩了。

1.為了增加可測性,我們對伺服器以及客戶端的的**做了一些重構,包括makefile。一不小心,在release配置裡開啟了乙個debug flag,也沒人發現,導致在生產環境中會多輸出一條除錯日誌。就多了一條日誌本來也沒什麼關係,可是這條日誌會列印某個指標指向的資料,而在某個罕見情況下這個指標居然會是空指標。而且因為是除錯資訊嘛,就沒對指標有效性進行檢查,這樣就導致了segmentation fault,伺服器活客戶端的程序crash。

可是為什麼我們在開啟了debug flag的測試環境以及日常開發環境中都沒有發現這個問題呢?原來在測試環境中測試資料覆蓋不夠,只有在生產環境中大量玩家實際進行遊戲才能觸發這個小概率事件…

所以最後我總結和覆盤了這事情:還是要加強**評審和增加測試覆蓋度,做好基礎工作,因為再小的錯誤都能引發血案,防不勝防。

MySQL必須知道的點

mysql已經成為世界上最受歡迎的資料庫管理系統之一,無論是用在小型開發專案上,還是用在構建那較大型的 mysql都用實力證明了自己是乙個穩定 可靠 快速 可信的系統,足以勝任任何資料儲存業務的需要。使用過程中,這些點你都知道嗎?1.必須使用innodb儲存引擎 有更好的cpu和io效能,更好的備份...

前端網路必須知道的點

allow control access origin 必需,表示可以請求的源。access control allow methods 必需,表示支援的所有方法,以逗號分隔 access control allow headers 如果瀏覽器請求包括 access control req方法,以逗...

必須知道的設計模式

設計模式 design pattern 物件導向 設計模式 引言 設計模式是物件導向思想的集大成,gof在其經典著作中總結了23種設計模式,又可分為 建立型 結構型和行為型3個大類。對於軟體設計者來說,一般的過程就是在熟練掌握語言背景的基礎上,了解類庫的大致框架和常用的函式和介面等,然後多再在百般錘...