VisualStudio調(diào)試技巧_第1頁(yè)
VisualStudio調(diào)試技巧_第2頁(yè)
VisualStudio調(diào)試技巧_第3頁(yè)
VisualStudio調(diào)試技巧_第4頁(yè)
VisualStudio調(diào)試技巧_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、VC+ 實(shí)戰(zhàn)調(diào)試技巧前言:調(diào)試技巧的重要性與課程安排主講人:陽(yáng)毅超 UIPower CTO調(diào)試技巧的重要性提高問(wèn)題定位的速度更加精確的命中斷點(diǎn)沒(méi)有代碼運(yùn)行環(huán)境定位問(wèn)題提高處理GDI泄露,內(nèi)存泄露等疑難的處理效率提高分析與定位問(wèn)題的能力本視頻的意義全實(shí)戰(zhàn)性質(zhì)的講解,只涉及對(duì)我們最為關(guān)鍵的調(diào)試技巧覆蓋到我們?nèi)粘J褂弥胁怀S玫浅S杏玫募记舍槍?duì)實(shí)際我們實(shí)際不同的調(diào)試情況進(jìn)行示例講解提高分析與定位問(wèn)題的能力注:使用vs2010進(jìn)行代碼講解,適用于vs20032008,vc6稍有區(qū)別學(xué)習(xí)本視頻需要達(dá)到目標(biāo)短時(shí)間內(nèi)掌握調(diào)試的關(guān)鍵技術(shù)掌握VisualStudio調(diào)試的高級(jí)而實(shí)用的技巧掌握WinDbg的使用技

2、巧掌握定位疑難問(wèn)題,如內(nèi)存泄露,GDI泄露,程序偶現(xiàn)崩潰的處理方法掌握解決問(wèn)題思路與步驟,利用調(diào)試技巧來(lái)確定范圍,定位問(wèn)題本講座的課程安排第一講:VisualStudio下的C+調(diào)試方法描述: 介紹如何利用VisualStudio的調(diào)試屬性,各類斷點(diǎn)設(shè)置,利用pdb與dump文件來(lái)定位崩潰問(wèn)題。第二講:WinDbg調(diào)試工具的調(diào)試方法描述:介紹利用WinDbg進(jìn)行調(diào)試,定位dump堆棧,獲取程序運(yùn)行信息的方法。第三講:定位問(wèn)題方法與途徑描述:介紹各種解決各類問(wèn)題的思路,介紹處理內(nèi)存泄露,GDI泄露等問(wèn)題的方法VC+ 實(shí)戰(zhàn)調(diào)試技巧第一講:Visual Studio下的C+調(diào)試方法主講人:陽(yáng)毅超 U

3、IPower CTO第一節(jié):調(diào)試工程配置調(diào)試屬性設(shè)置 工程的的調(diào)試屬性中,我們可以對(duì)調(diào)試的程序目錄及路徑進(jìn)行設(shè)置。命令:通常為運(yùn)行的EXE程序,例如當(dāng)我們調(diào)試DLL工程時(shí),我們的調(diào)試程序會(huì)設(shè)置為加載此DLL的exe程序。工作目錄: 通常為調(diào)試程序的運(yùn)行目錄,當(dāng)我們的程序需要使用相對(duì)路徑的外部資源時(shí)就需要使用此參數(shù)了,指定一個(gè)運(yùn)行目錄給它。參數(shù): 為指定為命名運(yùn)行的字符串?dāng)?shù)據(jù)第一節(jié):調(diào)試工程配置生成后事件1)當(dāng)我們調(diào)試DLL工程的時(shí)候我們的調(diào)試命令通常是exe程序,每次完成編譯后我們需要手動(dòng)將動(dòng)態(tài)庫(kù)拷貝到exe所在目錄中。2)通過(guò)生成后事件我們可以自動(dòng)完成拷貝動(dòng)態(tài)庫(kù)等操作來(lái)提高我們的調(diào)試效率。3

4、)拷貝命令示例a)命名使用的是windows的cmd命令b) Copy “a.dll”“c:demo”c) Copy “C:*.dll”“c:demo”第二節(jié):基本調(diào)試方法啟動(dòng)調(diào)試啟動(dòng)提示,通過(guò)點(diǎn)擊VS工具欄上的調(diào)試按鈕 來(lái)對(duì)運(yùn)行我們程序進(jìn)入調(diào)試模式(F5)停止調(diào)試,啟動(dòng)調(diào)試后通過(guò)點(diǎn)擊終止按鈕來(lái)停止調(diào)試( Shift+F5)暫停調(diào)試,如果程序中沒(méi)有命中斷點(diǎn)的情況下程序會(huì)順序的執(zhí)行代碼,在執(zhí)行過(guò)程中我們可以通過(guò)暫停按鈕來(lái)暫時(shí)停止代碼的執(zhí)行,程序會(huì)停止在當(dāng)前的執(zhí)行代碼行中。點(diǎn)擊運(yùn)行后又會(huì)繼續(xù)執(zhí)行第二節(jié):基本調(diào)試方法輸出窗口的使用當(dāng)我們啟動(dòng)調(diào)試程序之后我們可以使用調(diào)試窗口來(lái)獲取程序的運(yùn)行信息。通過(guò)菜

5、單-視圖-輸出,我們則可以打開(kāi)輸出窗口快捷鍵為alt+2啟動(dòng)調(diào)試后系統(tǒng)會(huì)利用輸出窗口反饋程序中所有資源的加載順序和信息。第二節(jié):基本調(diào)試方法輸出窗口的使用對(duì)于有符號(hào)DLL,在輸出窗口內(nèi)將會(huì)顯示,“已加載”,表示掛在DLL對(duì)應(yīng)的符號(hào)文件已經(jīng)完成加載,并觀察加載DLL路徑是否正確。此外輸出窗口還可以顯示程序調(diào)試運(yùn)行過(guò)程中的輸出信息。我們可以在代碼中利用如OutputDebugString這樣的API將文本內(nèi)容輸出到輸出窗口中顯示以便于我們進(jìn)行調(diào)試。第二節(jié):基本調(diào)試方法斷點(diǎn)窗口斷點(diǎn)窗口顯示程序中加載的所有斷點(diǎn)的位置及類型。通過(guò)菜單-調(diào)試-窗口-斷點(diǎn)或者快捷鍵Alt+F9,可以打開(kāi)斷點(diǎn)窗口我們可以通過(guò)

6、斷點(diǎn)窗口的工具欄按鈕完成以下的操作:1、刪除所有的斷點(diǎn)或選定斷點(diǎn)2、禁用啟用所有的斷點(diǎn)或選中斷點(diǎn),禁用后此斷點(diǎn)不會(huì)命中3、導(dǎo)出斷點(diǎn)或?qū)霐帱c(diǎn)第二節(jié):基本調(diào)試方法斷點(diǎn)窗口位置斷點(diǎn)的設(shè)置默認(rèn)情況下我們通過(guò)F9鍵產(chǎn)生的斷點(diǎn)類型為位置類型,即只要代碼運(yùn)行到此位置,即會(huì)立即產(chǎn)生命中。第二節(jié):基本調(diào)試方法斷點(diǎn)窗口條件斷點(diǎn)的設(shè)置條件斷點(diǎn)的命中條件可以進(jìn)行配置,如某一個(gè)變量為真,或者等于某一特定數(shù)值時(shí)進(jìn)行命中。我們先產(chǎn)生一處斷點(diǎn),在編輯區(qū)左側(cè)斷點(diǎn)紅色圓形區(qū)域點(diǎn)擊右鍵,選擇條件斷點(diǎn),選擇完畢之后會(huì)彈出一個(gè)對(duì)話框,提示我們輸入命中的條件。第二節(jié):基本調(diào)試方法斷點(diǎn)窗口命中次數(shù)斷點(diǎn)的設(shè)置命中次數(shù)斷點(diǎn)則可以設(shè)置當(dāng)經(jīng)過(guò)此

7、處固定次數(shù)后才進(jìn)行命中,可供選擇的命中次數(shù)條件是:總命中,等于某一次數(shù),大于等于某一次數(shù)或者幾倍于某一次數(shù)。第二節(jié):基本調(diào)試方法斷點(diǎn)窗口篩選器斷點(diǎn)的設(shè)置對(duì)特定的線程、計(jì)算機(jī)、進(jìn)程進(jìn)行斷點(diǎn)命中第二節(jié):基本調(diào)試方法斷點(diǎn)窗口命中條件斷點(diǎn)的設(shè)置命中調(diào)試斷點(diǎn)可以在命中此斷點(diǎn)時(shí)輸出信息到輸出窗口,并且可以直接打印輸出變量的數(shù)據(jù)第二節(jié):基本調(diào)試方法斷點(diǎn)窗口數(shù)據(jù)斷點(diǎn)的設(shè)置運(yùn)行時(shí)斷點(diǎn),只能啟動(dòng)調(diào)試并且在暫停條件下才可以進(jìn)行設(shè)置當(dāng)指定的內(nèi)存地址數(shù)據(jù)發(fā)生變化的時(shí)候立即進(jìn)行命中第二節(jié):基本調(diào)試方法斷點(diǎn)的調(diào)試運(yùn)行一句代碼,遇到函數(shù)不進(jìn)入函數(shù)體內(nèi)部( F10)跳出當(dāng)前的函數(shù)( Shift+F11 )逐句調(diào)試運(yùn)行,遇到函數(shù)

8、調(diào)用后進(jìn)入函數(shù)內(nèi)部繼續(xù)調(diào)試。(F11)在一個(gè)堆棧中我們可以通過(guò)拖動(dòng)運(yùn)行指針來(lái)回退代碼運(yùn)行位置。第二節(jié):基本調(diào)試方法堆棧窗口的使用通過(guò)斷點(diǎn)我們可以將程序“凍結(jié)”在某一個(gè)運(yùn)行時(shí)刻,而通過(guò)堆棧窗口我們則可以看到程序當(dāng)前狀態(tài)的函數(shù)調(diào)用順序。通過(guò)VS的菜單,“調(diào)試”-“窗口”-“調(diào)用堆棧”或者通過(guò)Alt+7來(lái)打開(kāi)堆棧窗口通過(guò)在窗口中雙擊函數(shù)名稱我們可以切換到對(duì)應(yīng)的調(diào)用函數(shù)位置中。灰色的代表無(wú)代碼和符號(hào)不可能已經(jīng)定位顯示。第二節(jié):基本調(diào)試方法自動(dòng)變量窗口的使用自動(dòng)變量窗口中顯示當(dāng)前堆棧所執(zhí)行所在代碼行所使用的數(shù)據(jù)內(nèi)容,當(dāng)我們切換到下一行代碼后自動(dòng)變量窗口中的內(nèi)容會(huì)發(fā)生對(duì)應(yīng)的變化。第二節(jié):基本調(diào)試方法局部變

9、量窗口的使用局部變量窗口顯示當(dāng)前堆棧函數(shù)中所使用變量?jī)?nèi)容。第二節(jié):基本調(diào)試方法線程窗口的使用線程窗口顯示當(dāng)前程序線程的運(yùn)行狀態(tài),在多線程程序開(kāi)發(fā)中我們可以通過(guò)這個(gè)窗口了解線程的啟動(dòng)和釋放情況。每個(gè)線程都有自己獨(dú)立的調(diào)用堆棧和變量堆棧,切換不同的線程我們會(huì)發(fā)現(xiàn)堆棧會(huì)發(fā)生對(duì)應(yīng)的變化,在線程之前堆數(shù)據(jù)可以進(jìn)行共享。黃色箭頭表示的是當(dāng)前代碼運(yùn)行指針?biāo)诘木€程位置,此外我們還可以看到每個(gè)線程所執(zhí)行的函數(shù)體。第二節(jié):基本調(diào)試方法 模塊窗口的使用模塊窗口顯示當(dāng)前程序所加載的所有模塊內(nèi)容。我們主要通過(guò)這個(gè)窗口來(lái)查看模塊是否被正常加載,加載路徑是否正確,并判斷所需的模塊的符號(hào)文件是否已經(jīng)找到。第二節(jié):基本調(diào)試方

10、法 監(jiān)視窗口與快速監(jiān)視窗口的使用在監(jiān)視窗口中我們可以定義我們所關(guān)注的變量,輸入變量的內(nèi)容我們即可獲取此變量的內(nèi)容。變量?jī)?nèi)容超出當(dāng)前堆棧顯示范圍后自動(dòng)失效,變?yōu)榛疑4送馕覀兛梢栽谧兞棵宵c(diǎn)擊右鍵,選擇“添加到監(jiān)視”則可以快速將變量設(shè)置到監(jiān)視窗口內(nèi)。第二節(jié):基本調(diào)試方法內(nèi)存窗口的使用當(dāng)我們創(chuàng)建一塊圖片內(nèi)存后需要查看整塊內(nèi)存的數(shù)據(jù),或者查看某塊具體內(nèi)存地址的數(shù)據(jù)時(shí)我們就需要借助到內(nèi)存窗口了。輸入需要查看數(shù)據(jù)的地址即可瀏覽到地址上下文中的數(shù)據(jù)內(nèi)容。第二節(jié):基本調(diào)試方法VisualStudio附加到進(jìn)程調(diào)試方法對(duì)已經(jīng)運(yùn)行的程序進(jìn)行調(diào)試此外F5調(diào)試啟動(dòng)速度較慢,對(duì)于頻繁的調(diào)試不太方便,所以我們可以讓程序

11、先運(yùn)行起來(lái),通過(guò)附加進(jìn)行的方式繼續(xù)調(diào)試。第三節(jié):利用PDB和dump進(jìn)行調(diào)試的方法什么是pdb文件PDB文件是“程序數(shù)據(jù)庫(kù)”Program Data Base的簡(jiǎn)稱,包含的程序的代碼信息通過(guò)這個(gè)文件我們可以查看對(duì)應(yīng)斷點(diǎn)的位置,堆棧信息等內(nèi)容使用PDB使得我們無(wú)需代碼也可以掌握程序的堆棧運(yùn)行狀態(tài)。第三節(jié):利用PDB和dump進(jìn)行調(diào)試的方法如何得到pdb文件通常當(dāng)我們編譯代碼后會(huì)自動(dòng)生成一個(gè)PDB文件。在VS的工程屬性面板中選擇“鏈接器”-“調(diào)試”,則可以設(shè)置是否對(duì)pdb進(jìn)行輸出,并指定pdb的輸出路徑。第三節(jié):利用PDB和dump進(jìn)行調(diào)試的方法什么是dump文件dump文件是附加堆棧信息的存儲(chǔ)文

12、件的簡(jiǎn)稱,文件擴(kuò)展名是”.dmp”,通過(guò)dump文件我們可以得到程序運(yùn)行某一時(shí)刻的堆棧數(shù)據(jù)。當(dāng)我們程序意外崩潰后,通常程序會(huì)立即中斷運(yùn)行,此時(shí)我們生成這一時(shí)刻的dump文件就可以通過(guò)此時(shí)的堆棧進(jìn)行分析,找到崩潰的代碼并分析原因。第三節(jié):利用PDB和dump進(jìn)行調(diào)試的方法如何得到dump文件在vs中進(jìn)入調(diào)試狀態(tài)后中斷,在菜單中選擇“調(diào)試”-“將轉(zhuǎn)儲(chǔ)另存為”即可生成dump文件 如何加載pdb文件在VS中我們選擇“菜單”-工具-選項(xiàng),選項(xiàng)窗口中選擇調(diào)試-符號(hào)設(shè)置pdb所在目錄,當(dāng)調(diào)試時(shí)vs會(huì)自動(dòng)加載模塊對(duì)應(yīng)的pdb文件。第三節(jié):利用PDB和dump進(jìn)行調(diào)試的方法利用VS定位崩潰點(diǎn)當(dāng)程序出現(xiàn)崩潰后程序會(huì)讓我們中選擇對(duì)應(yīng)處理方式。我們選擇取消,則會(huì)出現(xiàn)調(diào)試器的選擇窗口。我們選擇vs2010進(jìn)行調(diào)試,如果我們擁有程序的代碼與動(dòng)態(tài)庫(kù)對(duì)應(yīng)的pdb文件,vs會(huì)自動(dòng)斷點(diǎn)到程序崩潰的地點(diǎn)。第三節(jié):利用PDB和dump進(jìn)行調(diào)試的方法利用VS定位崩潰點(diǎn)收集輸出dmp文件設(shè)置程序pdb文件目錄打開(kāi)dmp文件,運(yùn)行dmp通過(guò)堆棧定位問(wèn)題函數(shù)通過(guò)代碼定位問(wèn)題函數(shù)具體代碼位置第四節(jié):實(shí)際應(yīng)用場(chǎng)景分析應(yīng)用場(chǎng)景描述有源代碼的exe程序的調(diào)試定位鼠標(biāo)滾輪消息通過(guò)windowproc定位鼠標(biāo)滾輪消息通

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論