程序調(diào)試技巧.ppt

程序調(diào)試技巧.ppt

ID:56391703

大?。?18.00 KB

頁數(shù):23頁

時(shí)間:2020-06-15

程序調(diào)試技巧.ppt_第1頁
程序調(diào)試技巧.ppt_第2頁
程序調(diào)試技巧.ppt_第3頁
程序調(diào)試技巧.ppt_第4頁
程序調(diào)試技巧.ppt_第5頁
程序調(diào)試技巧.ppt_第6頁
程序調(diào)試技巧.ppt_第7頁
程序調(diào)試技巧.ppt_第8頁
程序調(diào)試技巧.ppt_第9頁
程序調(diào)試技巧.ppt_第10頁
資源描述:

《程序調(diào)試技巧.ppt》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在PPT專區(qū)-天天文庫

1、程序調(diào)試技巧研發(fā)部2008年培訓(xùn)培訓(xùn)內(nèi)容調(diào)試方法斷點(diǎn)技巧線程調(diào)試服務(wù)調(diào)試DLL調(diào)試輔助工具調(diào)試方法集成調(diào)試,單步跟蹤運(yùn)行,查看各個(gè)變量數(shù)據(jù),堆棧等最便宜的調(diào)試工具:ODS,Trace,MessageBox輸出日志利用輔助工具修改變量對(duì)運(yùn)行結(jié)果不一致的,可以修改數(shù)據(jù)變量的值,來驗(yàn)證猜測的問題和檢驗(yàn)結(jié)果一般集成調(diào)試工具都支持修改變量的值例如懷疑一個(gè)函數(shù)的返回值不正確導(dǎo)致其他的地方出錯(cuò),你可以強(qiáng)行修改函數(shù)的返回值來驗(yàn)證你的想法縮小范圍定位有問題的代碼塊或者函數(shù)采用替代函數(shù)檢驗(yàn)是否某些函數(shù)、過程有問題注釋代碼

2、塊,然后逐步一行行取消注釋來判斷問題出在何處代碼斷點(diǎn)斷點(diǎn)是最基本的集成調(diào)試手段普通的斷點(diǎn)方式,在源代碼中某一行下斷點(diǎn)即可代碼斷點(diǎn)關(guān)鍵是要知道在什么地方下即可也可以在源代碼中下中斷斷點(diǎn):int3斷點(diǎn)源代碼中的int3中斷是效率最高的中斷方式,特別適合循環(huán)中條件中斷或不斷調(diào)用中的條件中斷條件斷點(diǎn)斷點(diǎn)可以設(shè)定一些條件,滿足某些條件才真正中斷程序運(yùn)行,幫助加快調(diào)試的步伐條件可以為運(yùn)行中,通過斷點(diǎn)處多少次才中斷(經(jīng)常用于循環(huán)中);也可以為一個(gè)表達(dá)式,例如某個(gè)變量滿足一個(gè)條件才中斷(經(jīng)常針對(duì)特定的數(shù)據(jù))條件斷點(diǎn)會(huì)

3、導(dǎo)致程序運(yùn)行效率低下,但在Delphi中可以利用匯編的int3中斷加快速度,例如如果一個(gè)100萬次的循環(huán),運(yùn)行到第90萬次的時(shí)候程序出錯(cuò),那么我們?nèi)绻闷渌姆绞絹碇袛嗟脑?,等?0萬次運(yùn)行是耗時(shí)很久的,而如果用int3來中斷,則非???,和正常運(yùn)行沒有區(qū)別!數(shù)據(jù)/地址斷點(diǎn)數(shù)據(jù)斷點(diǎn)和地址斷點(diǎn)在某些情況下非常有用,但很少人用數(shù)據(jù)斷點(diǎn)非常適合某個(gè)變量數(shù)據(jù)被誤修改、對(duì)象被錯(cuò)誤釋放,或者指定地址被錯(cuò)誤訪問的情況數(shù)據(jù)/地址斷點(diǎn)就是針對(duì)某個(gè)變量下斷點(diǎn),變量的值被讀取或?qū)懭氲臅r(shí)候,就會(huì)在讀取或者修改該變量的對(duì)應(yīng)的源代

4、碼行中斷數(shù)據(jù)斷點(diǎn)可以為讀取斷點(diǎn)或者寫入斷點(diǎn)對(duì)于AV錯(cuò)誤(內(nèi)存訪問錯(cuò)誤),非常有效和有用例子:對(duì)解碼數(shù)據(jù)轉(zhuǎn)換的時(shí)候,發(fā)現(xiàn)轉(zhuǎn)換函數(shù)在某種情況下出錯(cuò),利用地址斷點(diǎn)很容易就發(fā)現(xiàn)了一個(gè)指針初始化不正確的錯(cuò)誤組合斷點(diǎn)若干個(gè)斷點(diǎn)一起的時(shí)候起作用,例如有A,B兩個(gè)斷點(diǎn),A和B可以分別設(shè)定中斷動(dòng)作,例如可以設(shè)定A中斷的時(shí)候,B斷點(diǎn)暫時(shí)失效,這樣可以在一些互斥的斷點(diǎn)間提高調(diào)試效率比較少用匯編代碼大部分的集成開發(fā)環(huán)境,都支持查看CPU代碼利用CPU代碼窗口,可以查看到原始的CPU的執(zhí)行指令,可以發(fā)現(xiàn)一些蛛絲馬跡CPU代碼和

5、源代碼不是一一對(duì)應(yīng),一條高級(jí)代碼可能對(duì)應(yīng)一條或多條匯編指令CPU代碼查看時(shí)需要注意編譯器的優(yōu)化指令CPU代碼查看和調(diào)試,屬于非常底層調(diào)試,調(diào)試時(shí)注意查看各個(gè)寄存器和堆棧數(shù)據(jù)無源代碼也可以調(diào)試!破解經(jīng)常需要匯編調(diào)試procedureTForm1.Button1Click(Sender:TObject);VarX:TButton;BeginX.Free;//請(qǐng)注意看會(huì)發(fā)生什么?為什么呢?End;線程調(diào)試線程調(diào)試比較麻煩,要考慮清楚線程之間的關(guān)系,理清思路去調(diào)試查看當(dāng)前運(yùn)行代碼所在的線程句柄,配合調(diào)用堆棧,

6、檢查代碼真正運(yùn)行的線程和代碼所在對(duì)象的關(guān)系檢查線程對(duì)象創(chuàng)建和調(diào)用是否是同一個(gè)線程?是否注意了線程同步?線程死鎖?是否考慮到了在多CPU下的情況?檢查線程對(duì)象中創(chuàng)建了的其他的窗口或?qū)ο笫欠衿溥\(yùn)行線程和創(chuàng)建線程是否一致?窗口的創(chuàng)建線程和消息處理必須是同一個(gè)線程!例:調(diào)用報(bào)表COM接口的時(shí)候,發(fā)現(xiàn)自己編寫的測試程序可以正常調(diào)用,但是在后臺(tái)服務(wù)當(dāng)中運(yùn)行不正常,調(diào)試發(fā)現(xiàn)測試程序是在主線程,而以服務(wù)運(yùn)行的時(shí)候,創(chuàng)建COM是一個(gè)線程,而執(zhí)行COM中的方法是在另外的線程,導(dǎo)致出錯(cuò),結(jié)果把報(bào)表COM線程模式更改為支持多

7、線程解決問題服務(wù)的調(diào)試服務(wù)程序以后臺(tái)運(yùn)行,服務(wù)運(yùn)行方式和普通應(yīng)用程序不一樣,一般后臺(tái)運(yùn)行的服務(wù)沒有桌面交互,無須用戶干預(yù)服務(wù)程序可以Attach,注意運(yùn)行前必須Build或者Link一次,否則Attach后的斷點(diǎn)可能不正常如果要調(diào)試程序初始化的時(shí)候的錯(cuò)誤中斷,那么可以在服務(wù)程序運(yùn)行的最開始調(diào)用Sleep(6000),以便你有足夠的時(shí)間Attach上去;為方便調(diào)試,建議把服務(wù)做成兩棲程序,既可以作為桌面程序運(yùn)行,又可以作為服務(wù)運(yùn)行(強(qiáng)烈推薦),Delphi要實(shí)現(xiàn)兩棲程序非常簡單,但帶來的好處卻非常大!D

8、LL調(diào)試DLL無法直接運(yùn)行,必須利用宿主程序來調(diào)用宿主程序必須調(diào)用DLL,或者創(chuàng)建COM對(duì)象的時(shí)候,集成調(diào)試器才能中斷或允許中斷宿主程序也可以Attach上去Delphi中如果DLL無法調(diào)試,可以把DLL所在的工程和宿主程序所在的工程放到一個(gè)工程組(ProjectGroup)中請(qǐng)注意使用絕對(duì)路徑,某些版本Delphi和Windows不兼容,可能無法使用相對(duì)目錄內(nèi)存泄露VC在調(diào)試程序退出的時(shí)候會(huì)提示內(nèi)存泄露,注意查看輸出的提示信息Delphi程序可以利用M

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

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

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