學會代碼調試是每個程序員必須掌握的一項技能。通過調試,我們可以發現代碼中隱藏的問題或者缺陷,從而使寫出來的程序更加強壯和穩定。
那麼,怎樣調試C++代碼呢?下面,就以VS為例,來給大家演示調試C++代碼的方法。
工具/原料
VS
一、打印當前變量值
在程序運行過程中,如果能知道當前某個表達式或變量的值,就能更好地判斷程序是否正常執行或者判斷問題的所在。那麼,這該怎麼做呢?
比如,有如圖所示的一段代碼,當程序運行到某個斷點時,我想知道其中某個變量的值是多少。
一個比較通用的方法是首先在底部的調試窗口中切換到“監視”選項卡。
然後在名稱一欄點擊一下鼠標,輸入需要顯示的表達式或變量名,回車,即可顯示其值。
當然,查看的表達式或變量不限於一個,你可以同時查看多個,並且還可以在查看值的同時看到它們的類型。
二、添加斷言 _ASSERT
在某些情況下,我們可能希望在表達式或變量變成某個特定值時終止程序執行。比如說,當某個變量變成 false 時終止程序,這就可以使用_ASSERT宏。
_ASSERT宏的用法如下:
它的唯一一個參數是一個布爾類型的表達式,當表達式的值為假時,程序終止執行。
例如,在我們下面的示例中,我們希望當 Hashtable[Pos].bEmpty 為假時終止程序的執行,則可添加一句代碼:
_ASSERT(Hashtable[Pos].bEmpty);
這樣,當程序運行時出現 Hashtable[Pos].bEmpty 為假的情況,就會彈出提示框終止運行。
三、使用 GetLastError函數得到錯誤信息
在進行代碼調試時,GetLastError是一個非常好用的函數,尤其是當怎麼也找不出錯誤時,使用此函數常常“柳暗花明又一村”。
該函數無需提供參數,不過,它的返回值能夠給出一個錯誤代碼。通過查詢這個錯誤代碼,我們常常能夠找出代碼出問題的原因。
例如,在一個對話框程序中,編譯通過,但怎麼也不彈出對話框來,令人百思不得其解。為了查找原因,我們可以在DialogBox函數後添加一句 GetLastError ,並在該處設一個斷點,查看一下GetLastError的返回值,以確定究竟是哪兒出了問題。
我們根據返回的錯誤代碼,對比windows錯誤代碼表,很快就找到錯誤原因。原來,是對話框的樣式設成子窗口樣式了。
注意事項
熟練掌握各種調試代碼的方法,是成為一個優秀程序員的前提條件。