VisualStudio下的C++調試方法
概述: 介紹如何利用VisualStudio的調試屬性,各類斷點設定,利用pdb與dump檔案來定位崩潰問題。
• 調試屬性設定
工程的的調試屬性中,我們可以對調試的程式目錄及路徑進行設定。
• 工作目錄:

通常為調試程式的運作目錄,當我們的程式需要使用相對路徑的外部資源時就需要使用此參數了,指定一個運作目錄給它。
• 生成後事件
1)當我們調試DLL工程的時候我們的調試指令通 常是exe程式,每次完成編譯後我們需要手動将動态庫拷貝到exe所在目錄中。
3)通過生成後事件我們可以自動完成拷貝動态庫等操作來提高我們的調試效率。
3)拷貝指令示例
a)命名使用的是windows的cmd指令
b) Copy “a.dll”“c:\demo\”
c) Copy “C:\*.dll”“c:\demo\”
啟動調試
• 啟動提示,通過點選VS工具欄上的調試按鈕來對運作我們程式進入調試模式(F5)
• 停止調試,啟動調試後通過點選終止按鈕來停止調試( Shift+F5)
• 暫停調試,如果程式中沒有命中斷點的情況下程式會順序的執行代碼,在執行過程中我們可以通過暫停按鈕來暫時停止代碼的執行,程式會停止在目前的執行代碼行中。點選運作後又會繼續執行.
輸出視窗的使用
• 當我們啟動調試程式之後我們可以使用調試視窗來擷取程式的運作資訊。
• 通過菜單-》視圖-》輸出,我們則可以打開輸出視窗
• 快捷鍵為alt+2
• 啟動調試後系統會利用輸出視窗回報程式中所有資源的加載順序和資訊。
輸出視窗的使用
• 對于有符号DLL,在輸出視窗内将會顯示,“已加載”,表示挂在DLL對應的符号檔案已經完成加載,并觀察加載DLL路徑是否正确。
• 此外輸出視窗還可以顯示程式調試運作過程中的輸出資訊。
• 我們可以在代碼中利用如OutputDebugString這樣的API将文本内容輸出到輸出視窗中顯示以便于我們進行調試。
斷點視窗
• 斷點視窗顯示程式中加載的所有斷點的位置及類型。
• 通過菜單-》調試-》視窗-》斷點或者快捷鍵Alt+F9,可以打開斷點視窗
• 我們可以通過斷點視窗的工具欄按鈕完成以下的操作:
A、删除所有的斷點或標明斷點
B、禁用啟用所有的斷點或選中斷點,禁用後此斷點不會命中
C、導出斷點或導入斷點
位置斷點的設定
預設情況下我們通過F9設定的斷點産生的斷點類型為位置類型,即隻要運作到這個位置, 就會産生命中。
斷點常用的還有 :
命中次數:
命中次數斷點則可以設定當經過此處固定次數後才進行命中,可供選擇的命中次數條件是:總命中,等于某一次數,大于等于某一次數或者幾倍于某一次數。
篩選器斷點的設定:
對特定的線程、計算機、程序進行斷點命中。
命中條件斷點的設定:
命中調試斷點可以在命中此斷點時輸出資訊到輸出視窗,并且可以直接列印輸出變量的資料
建立斷點:
在函數處中斷: 在函數運作到某一函數位置處産生中斷;
資料斷點:當指定位址的資料發生改變的時候産生中斷。
斷點的調試:
• 運作一句代碼,遇到函數不進入函數體内部( F10)
• 跳出目前的函數( Shift+F11 )
• 逐句調試運作,遇到函數調用後進入函數内部繼續調試。(F11)
• 在一個堆棧中我們可以通過拖動運作指針來回退代碼運作位置。
堆棧視窗的使用:
• 通過斷點我們可以将程式“當機”在某一個運作時刻,而通過堆棧視窗我們則可以看到程式目前狀态的函數調用順序。
• 通過VS的菜單,“調試”-》“視窗”-》“調用堆棧”或者通過Alt+7來打開堆棧視窗
• 通過在視窗中輕按兩下函數名稱我們可以切換到對應的調用函數位置中。
• 灰色的代表無代碼和符号不可能已經定位顯示。
自動變量視窗的使用
• 自動變量視窗中顯示目前堆棧所執行所在代碼行所使用的資料内容,當我們切換到下一行代碼後自動變量視窗中的内容會發生對應的變化。
局部變量視窗的使用
• 局部變量視窗顯示目前堆棧函數中所使用變量内容。
線程視窗的使用
• 線程視窗顯示目前程式線程的運作狀态,在多線程程式開發中我們可以通過這個視窗了解線程的啟動和釋放情況。
• 每個線程都有自己獨立的調用堆棧和變量堆棧,切換不同的線程我們會發現堆棧會發生對應的變化,線上程之前堆資料可以進行共享。
• 黃色箭頭表示的是目前代碼運作指針所在的線程位置,此外我們還可以看到每個線程所執行的函數體。
監視視窗與快速監視視窗的使用
• 在監視視窗中我們可以定義我們所關注的變量,輸入變量的内容我們即可擷取此變量的内容。
• 變量内容超出目前堆棧顯示範圍後自動失效,變為灰色。
• 此外我們可以在變量名上點選右鍵,選擇“添加到監視”則可以快速将變量設定到監視視窗内。
VisualStudio附加到程序調試方法
• 對已經運作的程式進行調試
• 此外F5調試啟動速度較慢,對于頻繁的調試不太友善,是以我們可以讓程式先運作起來,通過附加進行的方式繼續調試。
關于vs的基本的調試就先介紹到這裡,下篇我将繼續介紹vs的一些進階的調試技巧。pdb和dump和一些調試工具。
歡迎和我交流,共同進步!QQ群:119891802