確保在Debug模式下而不是Release
打斷點(break point)
直接在有代碼的行前單擊,會出現紅色的點(再次單擊會取消);或者光標停留在某行,按F9
這意味著程序當執行到這一行時會終止
在打完斷點后點擊”本地Windows調試器“或者按F5
往下翻會有代碼供測試
界面如下:
在工具欄有這樣三個操作
- 逐語句(step into):步入進函數,看看這個函數做了什么——F11
- 逐過程(step over):從當前函數跳到下一行代碼——F10
- 跳出(step out):跳出當前函數,回到調用這個函數的位置——Shift+F11
測試代碼:
#include<iostream>
using namespace std;
int main() {int a = 8;a++;const char* string = "Hello";for (int i = 0; i < 5; i++) {const char c = string[i];cout << c << endl;}cout << "Hello World" << endl;
}
首先我們來看a的值,顯示10016,你可能會疑惑:為什么是10016?為什么不是10086? 為什么不是8?
這是因為雖然箭頭此時指向這條語句,但并不意味著已經運行了這行代碼;而是我們正要運行它
所以調試器顯示的是:a將要被設置的內存位置的數字
我們沒有把這個變量設置成任何東西,它只是未初始化的內存
看到這里你就明白了為什么你的a的值既不是8也不是10016
內存視圖(memory view)
- 調試->窗口->內存->內存1
- Debug->windows->memory->memory1
輸入&a 就被帶到變量a的內存地址
按F10后我們可以觀察到a的值變為了8(局部變量/自動窗口)
四個字節的內存也被設置為8(內存1): 08 00 00 00
再按F10,a變為了9
再按F10,string也發生了變化。前面的是它的地址,
將其復制到內存1中查找:48 65 6c 6c 6f ;這是ASCII碼,翻譯過來就是Hello
如果你不想一個個按F10,而是讓程序接著運行到某一句,就在那一句前打斷點,按F5或continue
另外,你還可以右鍵->轉到反匯編,來查看CPU指令
以上就是全部內容,希望你能很好的應用Debug
視頻:https://www.youtube.com/watch?v=0ebzPwixrJA