調(diào)試技術(shù)與異常處理

調(diào)試技術(shù)與異常處理

ID:1658273

大?。?15.50 KB

頁數(shù):16頁

時間:2017-11-12

調(diào)試技術(shù)與異常處理_第1頁
調(diào)試技術(shù)與異常處理_第2頁
調(diào)試技術(shù)與異常處理_第3頁
調(diào)試技術(shù)與異常處理_第4頁
調(diào)試技術(shù)與異常處理_第5頁
資源描述:

《調(diào)試技術(shù)與異常處理》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫

1、3.1跟蹤與中間過程輸出也許一個開發(fā)人員一半以上的時間都是在面對錯誤,所以好的調(diào)試/查錯方法(工具)會減輕我們工作的負擔(dān),也可以讓枯燥的DEBUG過程得以縮短。VC開發(fā)環(huán)境所提供的調(diào)試環(huán)境是很優(yōu)秀的,我們可以運用單步運行,設(shè)置斷點的方法來查找問題所在。但是這種跟蹤是非常耗時的,所以我們需要采用一些策略來讓我們更容易的發(fā)現(xiàn)錯誤并對錯誤進行定位,所幸的是VC在這方面提供了強大的支持。在本節(jié)中我們先看看如何利用設(shè)置斷點和利用TRACE宏來輸出運行情況。在VC開發(fā)環(huán)境中按下F9就可以在光標(biāo)所在行設(shè)置斷點,再按一次就可以取消該處斷

2、點。設(shè)置斷點的意義在于在調(diào)試過程當(dāng)運行到該行時回產(chǎn)生一個中斷并返回到VC開發(fā)環(huán)境中,在開發(fā)環(huán)境中你可以查看各個變量的值。下面是我們用于測試的代碼,前面有紅色圓形的行表示該行設(shè)置有斷點:在調(diào)試過程中到達斷點處你可以通過上下文變量窗口(Variables)觀察該函數(shù)中的變量的值,如果需要觀察未在該函數(shù)出現(xiàn)的全局變量或者類成員變量這需要將變量名添加到觀察窗口(Watch)中輸入變量名稱。但程序編譯完成后請按下F5鍵以調(diào)試的方式執(zhí)行程序,當(dāng)進入斷點時VC開發(fā)環(huán)境會被自動激活,然后我們可以可以觀察程序的運行情況。在調(diào)試過程中也可以

3、添加和刪除斷點。如下圖:如果在運行過程中被觀察的變量的值發(fā)生了變化則該變量在觀察窗中會變?yōu)榧t色。一般來講設(shè)置斷點有下面的技巧:·設(shè)置在進行判斷的代碼處,這樣可以在運行時可以觀察判斷所依賴的條件是否正確。·設(shè)置函數(shù)開始處,觀察該函數(shù)所依賴的變量是否都設(shè)置正確。·設(shè)置函數(shù)結(jié)束處,觀察該函數(shù)對變量的改變是否正確?!ぴO(shè)置進入其他函數(shù)前/后,通過黑盒法檢查該函數(shù)功能是否正確?!τ谘h(huán)體,應(yīng)該先測試一個循環(huán)次數(shù)小的條件來檢查循環(huán)邏輯是否正確,或者在循環(huán)的前幾次設(shè)置斷點,在運行幾次后取消斷點。MFC中提供的TRACE宏可以幫助我們在

4、程序調(diào)試運行過程中方便的輸出調(diào)試信息。TRACE宏的定義為:TRACE(exp),其中的表達式使用與printf相同的表達方法。例如下面的代碼:voidCSam_sp_31Dlg::OnTest2(){staticinti=5,j=50;charszDeb[]="debugstring";TRACE("tracei=%dj=%dstring=%s",i,j,szDeb);i+=1;j+=5;}在以調(diào)試方式運行程序是,當(dāng)你點擊TRACE按鈕時會看到在調(diào)試窗口中輸出了調(diào)試信息。當(dāng)程序在調(diào)試過程中執(zhí)行到此處時會在輸出窗

5、口輸入"tracei=5j=50,string=debugstring"。使用TRACE宏可以讓我們隨時掌握程序運行過程中變量的變化情況,因為大多數(shù)情況下我們都不希望使用斷點進入到程序內(nèi)部,而只是注意運行中數(shù)據(jù)的值。注意:不要采用TRACE宏一次性輸出大批量數(shù)據(jù)或不間斷輸出數(shù)據(jù),因為這樣有可能會時程序運行變得非常緩慢,如:voidtest_trace_e(void){char*pszDeb=newchar[1024*1024];TRACE("%s",pszDeb);//或者for(inti=0;i

6、f(pszDeb);i++){TRACE("%c",pszDeb[i]);}}有一點需要注意的是,TRACE宏在只在調(diào)試(DEBUG)版本中起作用,而在發(fā)行(RELEASE)版本無效,所以不要在TRACE宏中進行對程序狀態(tài)進行改變的計算或是調(diào)用對狀態(tài)有改變的函數(shù),例如:voidyourClass::fun1(){TRACE("%d",++m_iTick);//m_iTick狀態(tài)改變TRACE("returnvalue=%d",DoSomething());}voidyourClass:DoSomething(){if

7、(m_szOut=="No"){returnFALSE;}else{m_szOut="Yes";//狀態(tài)改變reutrnTRUE;}}在調(diào)試中還有一種方法可以將對象內(nèi)部內(nèi)容輸出到調(diào)試窗口中,這就是使用轉(zhuǎn)儲(Dump)。轉(zhuǎn)儲的實現(xiàn)要通過對象自身實現(xiàn),在通過對象自身實現(xiàn)時有一個好處就在于可以輸入內(nèi)部受保護層成員。首先CObject類定義了虛函數(shù):virtualvoidDump(CDumpContext&dc)const;當(dāng)你從CObject中派生新類時你需要重載該函數(shù),例如下面是個很簡單的例子:classCMyButton:

8、publicCButton{public:CMyButton();~CMyButton(){};public:#ifdef_DEBUG//由于轉(zhuǎn)儲只在調(diào)試版本中實現(xiàn),所以使用條件編譯virtualvoidDump(CDumpContext&dc)const;#endifprotected:CStringm_szHot

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。