今天看的調(diào)試的這一章主要是針對多線程程序的調(diào)試。多線程程序運(yùn)行的不確定性,使其調(diào)試起來就像抓蝴蝶一樣,你捉摸不透它駐足的位置。
書中給了一些建議和方法:
一是有計(jì)劃地對付錯誤。
對應(yīng)用程序展開適當(dāng)?shù)恼{(diào)試,應(yīng)該是遠(yuǎn)在你使用調(diào)試器之前就開始了。多多使用ASSERT調(diào)試措施。(ASSERT背后的概念是安全和速度之間的交換。程序運(yùn)行因此運(yùn)行得比較慢,但是Debug Build的制造就是為了調(diào)試,所以可以理解)在每一個你的假設(shè)之處做檢驗(yàn)工作。進(jìn)入一個函數(shù)時(shí),確認(rèn)所有狀態(tài)。不要只是檢查指針是否合法;如果可能,檢查一下指針?biāo)傅慕Y(jié)構(gòu)中的數(shù)據(jù)是否一致。
二是Bench Testing
其實(shí)這種方法就是先撇開多線程的環(huán)境,測試程序邏輯的正確性。如果OK了,然后再考慮與線程相關(guān)的東西。
三是線程對話框
這里主要討論了對一個特定的線程如何調(diào)試,方法是掛起所有的線程——除了我們關(guān)注的那個。書中介紹的方法在vs 2005我沒有找到。
四是日志記錄
這里主要是在控制臺窗口顯示一些運(yùn)行信息,我們可以使用printf等函數(shù)在控制臺輸出一些信息來查看線程的運(yùn)行次序。
五是內(nèi)存記號
使用內(nèi)存記號的好處就是降低彼此干擾的可能性。但是也要注意它不是同步操作,可能會因?yàn)閮蓚€線程的同時(shí)寫入引來問題。
六是硬件調(diào)試寄存器
前面的這六種方法我也只用過三種,有一些還真是第一次見到。不過不怕下次搞不定問題的時(shí)候可以拿來進(jìn)行嘗試,來抓一抓隱藏在程序中的“臭蟲們”。
成功消除多線程程序的“臭蟲”,作者說需要具備三種素養(yǎng):決心、耐心、創(chuàng)造力。同時(shí)也不要蠻干,要采用科學(xué)的方法:觀察、預(yù)測、測試。
總結(jié)一下:借助方法,觀察現(xiàn)象,大膽預(yù)測,勇敢嘗試,完備測試。
項(xiàng)目中也碰到了多線程的使用。未來可能多線程的使用會越來越多,不能停留在完成功能和任務(wù)上,應(yīng)該多思考多測試。避免多線程的不可確定性帶來的一些困擾。
學(xué)習(xí)書籍:《Win32 多線程程序設(shè)計(jì)》侯捷譯
posted on 2009-08-21 17:19
Sandy 閱讀(1802)
評論(2) 編輯 收藏 引用 所屬分類:
windows學(xué)習(xí)