1 示例代碼
#include <iostream>
using namespace std;
class A
{
public:
A();
virtual ~A();
void Add();
private:
int m;
};
A::A()
{
m = 0;
}
A::~A()
{
}
void A::Add()
{
m++;
}
int main()
{
A Test;
for (int i=0;i<10;++i)
{
Test.Add();
}
return 0;
}
很簡單的一個程序,我們通過調用Add方法改變成員變量m的值,所以可以針對於變量m設置數據斷點和邏輯斷點。
2 數據斷點
斷點作用:用於檢測任意變量,包括類中或者結構體中某個成員變量的值發生了變化,如果此時設置了數據斷點,只要該變量的值發生了變化就會觸發數據斷點,導致程序中斷。用於Debug時,查找莫名其妙改變值的變量,用於鎖定隱藏bug,以及通過堆棧信息梳理邏輯漏洞。
2.1 根據內存地址設置數據斷點
參考1中示例代碼,針對成員變量m設置數據斷點,只要成員變量的值m發生了變化則觸發數據斷點。
先在示例代碼第36行設置一個普通斷點,第36行爲:
for (int i=0;i<10;++i)
目的是,先執行代碼行:
A Test;
使得對象構造成功。
然後對Test對象的成員變量m添加監視,如下圖:
然後對監視對象添加&,獲取Test.m在內存中的地址,如下圖:
然後點擊調試-新建斷點-數據斷點,如下圖
然後將Test.m的內存地址填入進入就OK了,F5運行程序,即可觸發數據斷點。
2.2 根據變量名設置數據斷點
如果不想像上述步驟一樣通過添加監視獲取變量地址,通過變量地址設置數據斷點,可以使用變量名的方式。
直接打開調試-新建斷點-數據斷點,填入&(變量名),運行即可觸發數據斷點。
3 條件斷點
作用:當變量值滿足某種條件時,觸發斷點。
以Test.m == 5觸發斷點爲例。
依然在示例代碼第39行設置一個普通斷點,第39行爲:
用鼠標在該斷點上停留,則會出現如下設置按鈕:
點擊設置按鈕-條件,如下圖:
在條件表達式中輸入:
Test.m == 5
如下圖:
然後調試運行程序,即可觸發條件斷點