release時為什麼不啟用斷言?

時間 2021-05-30 15:17:10

1樓:「已登出」

assert斷言的是絕對不可能出現的現象(比如邏輯錯誤),如果出現就一定是bug,bug就不能留到release階段

還有一種可能的錯誤是類似於io錯誤之類的,程式本身沒問題的,這在release裡面應該用異常處理

像c本身沒有異常,大部分異常情境使用返回值判斷來處理,但是對於某些簡單又致命的異常型別選擇直接assert處理也沒什麼大錯,但是支援異常的語言還是選擇使用異常比較好

2樓:zpan

release 的時候開啟 assert 也不是不可以,但這時就要注意不要寫出

whileassert(...);

}這種東西。

3樓:馮東

在 release 版本裡啟用 assert,乙個問題是 hit assert 之後要做什麼。在 debug 版本裡是觸發 debug crash,能被 debugger 捕獲到。在 release 版本裡不能這麼做。

理想的做法是要建立乙個服務,把 release assert 的資訊收集起來。但是這種 infrastructure 的建立很費功夫。所以大家就圖省事了。

這些年隨著 crashlytics 的發展,對於 release assert 的支援也是要提上日程了。

其實有乙個組織一直是啟用 release assert 的。就是 NASA。

4樓:藍耀

assert不適合使用者去獲知,assert用來告訴開發或者白盒會比較好,而通過exception保證健壯並告知user才是合適的做法。

5樓:「已登出」

如果在release版本,本來不應該被執行的assert還有被執行到的可能性,那豈不是很尷尬……

所以還不如刪掉,萬一不會掛呢。

6樓:Dappur

當程式執行狀態不符預想時,斷言用來防範性地使程式及時崩潰,以及早發現錯誤和降低除錯難度

完全就是個開發期的工具嘛

崩潰這種事情,怎麼可以出現在release版本中呢,怎麼說也得用exception扛一下嘛

Android 作業系統為什麼不啟用swap?

Sunrise 因為手機注重的是體驗,執行記憶體的讀取速度比手機儲存快。所以如果使用手機儲存做swap會因為速度跟不上而卡頓。電腦注重的是生產力,所以不能夠讓生產力突然停止,即使使用swap卡一下也無所謂。這個問題,下面這個答案可以很好告訴你。 1.先說說微機的swap區 微機的swap區在機械硬碟...

火車上為什麼不啟用自動駕駛系統呢?

車萬永不過氣 你是不是把京張高鐵給吞了。火車不用自動剎車系統不是因為不想用,是技術暫時無法實現這一點 時速350的高鐵減速到足夠緩衝 不是停止,只是撞了之後大概率活下來 的速度,制動距離5km。你對前方的路障的 前方 距離定義是多少?還有滑坡,要是真的滑了撞上去那就是完蛋。百分百的完蛋,直接脫軌。現...

為什麼有的人能說斷就斷,說不聯絡就不聯絡?

不與傻瓜論短長 為什麼呢,可能是不夠愛吧,我經常這樣對待感情,我爹認為我就是不夠愛。但是我覺得導致我這種行為的原因是,我有好多事情要做,感情只是生活的一部分,愛情需要大量時間精力智慧型運氣,如果不是乙份好的感情,那對自己消化太大了,花期有多長夠這樣消耗呢?我個人很容易受情緒影響,如果感覺到被消耗是很...