![C語(yǔ)言中用ASSERT調(diào)試的八大技巧_第1頁(yè)](http://file4.renrendoc.com/view/bc15580003f3036b1f3da56882536569/bc15580003f3036b1f3da568825365691.gif)
![C語(yǔ)言中用ASSERT調(diào)試的八大技巧_第2頁(yè)](http://file4.renrendoc.com/view/bc15580003f3036b1f3da56882536569/bc15580003f3036b1f3da568825365692.gif)
![C語(yǔ)言中用ASSERT調(diào)試的八大技巧_第3頁(yè)](http://file4.renrendoc.com/view/bc15580003f3036b1f3da56882536569/bc15580003f3036b1f3da568825365693.gif)
![C語(yǔ)言中用ASSERT調(diào)試的八大技巧_第4頁(yè)](http://file4.renrendoc.com/view/bc15580003f3036b1f3da56882536569/bc15580003f3036b1f3da568825365694.gif)
![C語(yǔ)言中用ASSERT調(diào)試的八大技巧_第5頁(yè)](http://file4.renrendoc.com/view/bc15580003f3036b1f3da56882536569/bc15580003f3036b1f3da568825365695.gif)
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本文格式為Word版,下載可任意編輯——C語(yǔ)言中用ASSERT調(diào)試的八大技巧C語(yǔ)言中用ASSERT調(diào)試的八大技巧
assert宏的原型定義在中,其作用是假設(shè)它的條件返回錯(cuò)誤,那么終止程序執(zhí)行。下面是我為大家整理的C語(yǔ)言中用ASSERT調(diào)試的八大技巧,接待參考~
技巧1:記住ASSERT的定義
對(duì)大量開(kāi)發(fā)人員來(lái)說(shuō),斷言是一個(gè)令人困惑的話(huà)題,由于它們的大量使用方式與其設(shè)計(jì)初衷背道而馳。我見(jiàn)到的最明顯的斷言定義是這樣的:
“斷言是在程序某個(gè)特定點(diǎn)的一個(gè)布爾表達(dá)式,除非程序中有缺陷Bug,否那么它的值將為真?!?/p>
想要理解上述斷言定義的開(kāi)發(fā)人員理應(yīng)留意下面三個(gè)要點(diǎn):
·斷言會(huì)評(píng)估一個(gè)表達(dá)式是真還是假
·斷言是在代碼中的某個(gè)點(diǎn)對(duì)系統(tǒng)狀態(tài)的一種假設(shè)
·斷言會(huì)驗(yàn)證系統(tǒng)假設(shè),假設(shè)不為真,就說(shuō)明代碼中有一個(gè)缺陷
技巧2:使用ASSERT驗(yàn)證函數(shù)的先決條件
斷言分外適合契約式設(shè)計(jì)環(huán)境,在這種環(huán)境中,開(kāi)發(fā)人員分外明顯地定義了某個(gè)函數(shù)的先決條件。斷言可以用來(lái)檢查該函數(shù)的輸入是否得志先決條件。就拿圖1所示的代碼片段為例:
圖1:函數(shù)的先決條件
函數(shù)的STate輸入理應(yīng)在定義的系統(tǒng)狀態(tài)范圍內(nèi)。假設(shè)State不是有效的狀態(tài)值,那么它就不是錯(cuò)誤,而是缺陷!斷言可以用來(lái)驗(yàn)證State是有效的假設(shè),如圖2所示:
圖2:對(duì)函數(shù)先決條件應(yīng)用斷言
在State不小于最大值的事情中,斷言表達(dá)式將被評(píng)估為假,程序于是將中斷執(zhí)行。中斷程序執(zhí)行可以讓開(kāi)發(fā)人員很輕易連忙看到哪里的代碼出錯(cuò),而不是過(guò)段時(shí)間以后才知道。
技巧3:使用ASSERT驗(yàn)證函數(shù)的后置條件
斷言也能用來(lái)驗(yàn)證契約式設(shè)計(jì)環(huán)境中對(duì)某個(gè)函數(shù)輸出的假設(shè)。例如,假設(shè)前面定義的System_StateSet函數(shù)返回SystemState變量,開(kāi)發(fā)人員可以預(yù)計(jì)它也在期望的范圍之內(nèi)。斷言可以用來(lái)對(duì)缺陷舉行監(jiān)視,如圖3所示。
圖3:對(duì)函數(shù)后置條件應(yīng)用斷言
開(kāi)發(fā)人員在查看上述代碼后可能會(huì)感到這些檢查毫無(wú)意義。剛方才設(shè)置好的SystemState怎么就會(huì)展現(xiàn)大于SYSTEM_STATE_MAX的值呢?答案是這切實(shí)不理應(yīng)展現(xiàn),然而有時(shí)候會(huì)莫名其妙地發(fā)生變更,可能是通過(guò)中斷或并行線(xiàn)程,此時(shí)斷言可以立刻標(biāo)志出這個(gè)缺陷。
技巧4:不要把ASSERT用于錯(cuò)誤處理
在記住斷言定義之后,開(kāi)發(fā)人員理應(yīng)切記:斷言是用于檢測(cè)缺陷的,不能用于錯(cuò)誤處理。錯(cuò)誤處理是設(shè)計(jì)用于響應(yīng)錯(cuò)誤的用戶(hù)輸入和意外的事情依次的軟件。錯(cuò)誤在系統(tǒng)中預(yù)料是會(huì)發(fā)生的,但僅僅是由于有無(wú)效的輸入而并不意味著代碼中有缺陷。錯(cuò)誤處理理應(yīng)與缺陷探索分開(kāi)來(lái)。錯(cuò)誤使用斷言的一個(gè)典型例子是,在試圖開(kāi)啟一個(gè)文件用于讀取時(shí)去檢查文件的指針,如圖4所示。
圖4:ASSERT的不當(dāng)使用
讀者可以領(lǐng)會(huì)地看到,試圖開(kāi)啟文件的結(jié)果與文件系統(tǒng)的狀態(tài)和用戶(hù)數(shù)據(jù)有關(guān),而與代碼中的缺陷一點(diǎn)關(guān)系也沒(méi)有。開(kāi)發(fā)人員理應(yīng)編寫(xiě)錯(cuò)誤處理程序,而不是用斷言,以便在文件不存在時(shí),錯(cuò)誤處理程序可以用一些默認(rèn)可用數(shù)據(jù)來(lái)創(chuàng)造它,以便后續(xù)代碼持續(xù)操作。
技巧5:ASSERT僅對(duì)開(kāi)發(fā)有意義,不能用于生產(chǎn)
開(kāi)發(fā)ASSERT宏的原始意圖是在開(kāi)發(fā)過(guò)程中啟用它,在后面生產(chǎn)時(shí)要禁用??梢杂肗DEBUG宏激活和禁用ASSERT。正切實(shí)施的斷言在被禁用后理應(yīng)對(duì)嵌入式系統(tǒng)根本沒(méi)有影響。
問(wèn)題是,假設(shè)測(cè)試是在斷言啟用的處境下舉行的為了抓獲任何缺陷,理應(yīng)這樣做,那么現(xiàn)在禁用斷言將導(dǎo)致交付的產(chǎn)品與測(cè)試的產(chǎn)品處于不同的狀態(tài)。斷言切實(shí)會(huì)占用一些代碼空間,但更重要的是,它們需要占用少量的時(shí)鐘周期來(lái)評(píng)估它們的布爾表達(dá)式。禁用ASSERT可能對(duì)具有有限資源的裸機(jī)系統(tǒng)的執(zhí)行時(shí)序產(chǎn)生很大影響,從而導(dǎo)致在生產(chǎn)系統(tǒng)中產(chǎn)生新的缺陷。開(kāi)發(fā)團(tuán)隊(duì)需要判斷是否值得冒關(guān)閉斷言的風(fēng)險(xiǎn)。
一種替代方案是留存斷言在激活狀態(tài),而將它們的輸出重定向到一個(gè)系統(tǒng)日志。這樣可以確保任何揮之不去的缺陷很輕易被識(shí)別,而且能制止中止系統(tǒng)的運(yùn)行,而中止系統(tǒng)可不是明智之舉。
技巧6:不允許斷言有副作用
ASSERT的默認(rèn)實(shí)現(xiàn)允許開(kāi)發(fā)人員包含一段可執(zhí)行代碼作為布爾表達(dá)式的一片面。舉例來(lái)說(shuō),一個(gè)狀態(tài)變量可以被實(shí)現(xiàn)為表達(dá)式的一片面并傳遞給ASSERT。但假設(shè)傳遞給ASSERT的`表達(dá)式有副作用,也就是說(shuō),它會(huì)變更嵌入式系統(tǒng)的狀態(tài),那么禁用斷言將變更系統(tǒng)的行為。開(kāi)發(fā)人員理應(yīng)確保他們的表達(dá)式?jīng)]有副作用,否那么他們需要冒險(xiǎn)在系統(tǒng)中增加只針對(duì)產(chǎn)品代碼喚醒的休眠時(shí)間缺陷。
技巧7:斷言理應(yīng)占代碼的1%至3%
每個(gè)開(kāi)發(fā)人員對(duì)于代碼庫(kù)CodeBase中理應(yīng)有多少個(gè)斷言都有自己的主見(jiàn)。大家一致同意的一個(gè)數(shù)字是,代碼庫(kù)中的斷言占比理應(yīng)大于0。斷言為開(kāi)發(fā)人員供給了一種在代碼庫(kù)中發(fā)生缺陷的時(shí)刻察覺(jué)它的好方法。調(diào)試是在開(kāi)發(fā)嵌入式系統(tǒng)中最濫用時(shí)間并令人頹唐的事情之一。不管開(kāi)發(fā)人員認(rèn)可的占比是1%、3%還是5%,使用斷言斷定對(duì)你有利,并會(huì)使開(kāi)發(fā)嵌入式軟件變得多少有些趣味。
技巧8:將斷言用作可執(zhí)行代碼解釋
斷言可以生成極好的解釋?zhuān)【帉?xiě)卓越的表達(dá)式可以切當(dāng)?shù)貓?bào)告開(kāi)發(fā)人員在代碼的某個(gè)給定點(diǎn)理應(yīng)預(yù)料發(fā)生什么事情。開(kāi)發(fā)人員理應(yīng)做好他們斷言的架構(gòu),扶助人們更領(lǐng)會(huì)地理解系統(tǒng)中發(fā)生的事情,進(jìn)而扶助裁減缺陷。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 人教版七年級(jí)數(shù)學(xué)下冊(cè)8.2.1.2《代入消元法(2)》聽(tīng)評(píng)課記錄
- 新版華東師大版八年級(jí)數(shù)學(xué)下冊(cè)《18平行四邊形》聽(tīng)評(píng)課記錄30
- 珍稀郵票贈(zèng)與合同(2篇)
- 生物識(shí)別技術(shù)開(kāi)發(fā)合同(2篇)
- 蘇人版道德與法治九年級(jí)上冊(cè)2.1《參與公共生活》聽(tīng)課評(píng)課記錄
- 《青銅器與甲骨文》聽(tīng)課評(píng)課記錄2(新部編人教版七年級(jí)上冊(cè)歷史)
- 晉教版地理七年級(jí)下冊(cè)《9.1 東南亞──兩洲兩洋的“十字路口”》聽(tīng)課評(píng)課記錄2
- 蘇科版數(shù)學(xué)七年級(jí)上冊(cè)第四章 一元一次方程-應(yīng)用教聽(tīng)評(píng)課記錄
- 湘教版數(shù)學(xué)八年級(jí)下冊(cè)2.2.2《平行四邊形的判定定理》聽(tīng)評(píng)課記錄2
- 湘教版九年級(jí)數(shù)學(xué)上冊(cè)第1章反比例函數(shù)1.3反比例函數(shù)的應(yīng)用聽(tīng)評(píng)課記錄
- 5《這些事我來(lái)做》(說(shuō)課稿)-部編版道德與法治四年級(jí)上冊(cè)
- 2025年度高端商務(wù)車(chē)輛聘用司機(jī)勞動(dòng)合同模板(專(zhuān)業(yè)版)4篇
- 2025年福建福州市倉(cāng)山區(qū)國(guó)有投資發(fā)展集團(tuán)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 2025年人教版新教材數(shù)學(xué)一年級(jí)下冊(cè)教學(xué)計(jì)劃(含進(jìn)度表)
- GB/T 45107-2024表土剝離及其再利用技術(shù)要求
- 2025長(zhǎng)江航道工程局招聘101人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年黑龍江哈爾濱市面向社會(huì)招聘社區(qū)工作者1598人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年國(guó)新國(guó)際投資有限公司招聘筆試參考題庫(kù)含答案解析
- 2025年八省聯(lián)考四川高考生物試卷真題答案詳解(精校打印)
- 《供電營(yíng)業(yè)規(guī)則》
- 執(zhí)行總經(jīng)理崗位職責(zé)
評(píng)論
0/150
提交評(píng)論