1、利用斷點進行調試
添加斷點的方式有以下幾種
- 1.鍵盤快捷鍵F9
- 2.通過菜單【Debug(調試)】-》【Toggle BreakPoint(切換斷點)】
- 3.點擊代碼行左邊的空白處(推薦)
設置斷點后,按F5運行程序,當運行到斷點處時就會暫停
此時可以 按F10逐過程或F11逐語句執行后面的程序語句
2、條件斷點
條件斷點會在條件觸發時斷點才生效。
假設有以下代碼(C#):
循環輸出 i,
1 static void Main(string[] args) 2 { 3 for(int i = 0;i<100;i++) 4 { 5 Console.WriteLine(i); 6 } 7 }
如果我們想在i == 50的時候進入斷點,可以這么操作
1.按【利用斷點調試】中的方法建立斷點
2.在斷點上右鍵,選擇,條件。輸入 i == 50
3.按F5運行程序,當i = 50時,程序會暫停進入斷點。
3.數據斷點(限C++ Native)
數據斷點可以對指定變量進行監控,程序運行到變量值發生變化 時進入調試狀態。
注意:
1、數據斷點在程序執行后,才可以添加。
2、數據斷點只能對全局變量進行監控
創建C++控制臺應用程序
1 #include <iostream>2 3 int b = 0;4 5 int main()6 {7 std::cout << "Hello World!\n";8 9 b = 100; 10 }
我們在第7行處添加一個普通斷點,按F5執行程序。
當運行到第7行進行斷點時,通過快速監視功能,獲取變量b的地址。
然后通過菜單
Debug(調試)-》New Breakpoint(新建斷點)-》Data Breakpoint(數據斷點),打開數據斷點窗口。輸入變量b的地址,單擊確定
也可以通過將變量b添加監視
然后在監視窗口中變量b的選項中選擇值更改時中斷
這樣當變量b的值在更改時,就會觸發斷點
4.監視功能
將變量添加到監視后可以實時查看變量的變化。監視功能在調試全局變量時非常有用,可以實時查看變量的值。
通過調試-》窗口-》監視-》監視1,可以打開監視窗口。
將變量添加到監視后,可以實時查看變量值的變化
測試代碼如下:
1 int main() 2 { 3 int num = 0; 4 5 for (int i = 0; i < 100; i++) 6 { 7 num++; 8 } 9 }
在num = 0處和num++處添加斷點,按F5執行程序,將num添加監視。
然后多次按下F5,可以看到num的值在變化。
5.快速監視
快速監視簡單來說就是執行單次監視功能。可以查看代碼執行到當前位置時,變量的值,還可以執行表達式。
快速監視可以方便我們在運行時,對變量執行相關操作,并且馬上可以看到結果。如有一個DataTable dt,我們想查找第一行某一列的值,如果單獨編寫代碼來完成,費時又費力,這時就可以借助快速監視功能,在表達式框中輸入 dt.Rows[0]["xx],再按下回車就可以看到結果。
這里我們對num執行快速監視,可以看到當前的值是32
執行表達式,如 num + 100,按下回車,可以看到值是132
6.調用堆棧
使用調用堆棧功能可以查看函數調用的層次結構。
通過調試-》窗口-》調用堆棧可以打開調用堆棧窗口
測試代碼如下:
1 #include <iostream>2 #include<Windows.h>3 4 void func2()5 {6 7 }8 9 void func1() 10 { 11 func2(); 12 } 13 14 15 int main() 16 { 17 func1(); 18 }
在func2函數中,添加一個斷點,按F5執行程序。打開調用堆棧,可以看到函數的調用層次
此時雙擊調用堆棧中的調用層次,可以跳轉到調用的地方 。
當程序拋出異常時,也可以打開調用堆棧,然后定位到引發異常的函數,并進行修改。
7.查看內存里的數據
在日常開發中,經常會需要進行數據的傳遞,一般會傳遞一個指針變量。而有時會因為某種原因而導致部分數據出錯。在排查問題時,就 可以使用內存窗口
通過調試-》窗口-》內存-》內存1,可以打開內存窗口。
測試代碼如下:
1 void PrintArray(int* ar,int size)2 {3 for (int i = 0; i < size; i++)4 {5 std::cout << *ar << std::endl;6 ar++;7 }8 }9 10 int main() 11 { 12 int ar[]{ 1,2,3 }; 13 PrintArray(ar, 3); 14 }
假設我們拿到了一直int指針,想查看指針指向的內存里的數據。如上面的ar,
在PrintArray函數中,添加斷點,按F5執行程序,當程序執行中斷點處時,打開內存窗口
首先復制指針所指向的內存地址
粘貼到內存窗口中,按下回車,可以看到內存里的數據