對assert,防錯設計,除錯設計的一些認識

1.assert是什麼,做什麼用:assert是個宏,多用於函數入口等地方檢查參數有效性。

2.assert的設計思想:最大化,在發現非法情況的時候,立即停止程序的執行,盡最大努力保留犯罪現場。

3.assert存在的理由:除錯設計的重要手段。

 

4.除錯設計:除錯設計要解決的是開發階段的問題,是要幫助除掉程序員編碼或者設計過程中的錯誤,如:設計錯誤,編碼錯誤,各種各樣的不小心,其中就包括了沒有做適當防錯設計。

5.防錯設計:防錯設計是程序功能設計的一部分,要解決的是運行階段的問題,用於保證程序的穩定性,健壯性,防錯設計要做的是系統在遇到不可預知發生條件或發生時機的異常狀況時通過適當的處理措施盡最大可能保障程序的正常運作,最常見的情況莫過於malloc失敗一類和內存使用相關的異常情況,極端的可能包括EMC一類的問題,比如單片機系統設計中的防跑飛處理等。

 

6.防錯與除錯的關係:

   1).從生存週期的角度來說:防錯和除錯是重疊的,除錯只存在於開發階段,防錯既存在於開發階段,也存在於運行階段。

   2).從職能的角度來講:防錯設計保證系統運行階段的穩定性,除錯設計檢驗程序設計的正確性,因爲程序設計的正確性包含了良好的防錯設計,所以防錯設計的正確與否是由除錯設計來檢驗的。

   3).從使用的策略來講:除錯設計的職責是錯誤的發現,其使用的策略是最大化錯誤,使其立即體現出來。

                                  防錯設計是要使異常和錯誤帶來的影響最小化,兩者是恰恰相反的。

 

綜合起來說,除錯設計要解決得是開發階段的問題,它的核心是使問題最快的,以最強烈的方式表達出來以引起開發者的注意,於是,便有了assert, 防錯設計要解決得是系統運行階段的問題,它要處理的其實並不是錯誤,而是異常情況,它的宗旨是,盡最大努力對系統運行中的異常情況進行檢測並處理(包不包括未知BUG帶來的異常,這是個很有趣的問題),保證系統的正常運行,可以說,它的做法和除錯設計剛剛相反,它是儘量的把異常情況的包圍起來,減少對系統運行或其它部分的影響。初看起來,除了各自的生效時間不一樣,功能上似乎是完全對立的,但是對立和統一是可以相互轉化的,如果設計者在系統中沒有做防錯處理或者不到位,這就是一個錯誤,它應該被除錯設計檢測出來,也就是說,防錯設計師需要有除錯設計來檢驗的。

 

 

說起來似乎很拗口,如果用一種所謂的結果導向來看待問題,那麼一句話足也:如果在開發階段出現ASSERT失敗,那必然是開發者出現了什麼失誤,要麼是不小心,要麼是沒做好防錯設計,讓異常情況蔓延到了這裏。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章