VS 条件断点学习总结2
1 設(shè)置條件斷點(diǎn)
右擊斷點(diǎn)–編輯窗口左側(cè)的紅點(diǎn),在上下文菜單上選擇“Condition…”。
這時(shí)彈出一個(gè)對(duì)話框供你設(shè)置激活該斷點(diǎn)所需的條件。比如:我們希望只有當(dāng)局部變量paginatedDinners的尺寸小于10時(shí),調(diào)試才中斷。我們可以寫出對(duì)應(yīng)的表達(dá)式。
現(xiàn)在我再運(yùn)行這個(gè)程序,實(shí)現(xiàn)搜索,只有返回值小于10時(shí),程序運(yùn)行才會(huì)被中斷。對(duì)于大于10的值,該斷點(diǎn)將被跳過。
記錄到達(dá)斷點(diǎn)次數(shù)
有時(shí)你希望,只有當(dāng)?shù)贜次滿足條件的運(yùn)行到達(dá)斷點(diǎn)時(shí),才中斷程序運(yùn)行。例如:當(dāng)?shù)谖宕畏祷厣儆?0的查詢結(jié)果時(shí),中斷程序運(yùn)行。
可以通過右擊斷點(diǎn),然后在彈出菜單上選擇“Hit count…”菜單命令實(shí)現(xiàn)。
? 這時(shí)系統(tǒng)彈出一個(gè)對(duì)話框,它允許你指定:(1)當(dāng)滿足條件,而且進(jìn)入斷點(diǎn)的累計(jì)次數(shù)等于N時(shí),斷點(diǎn)命中一次。(2)當(dāng)滿足條件,而且進(jìn)入斷點(diǎn)的累計(jì)次數(shù)是N的倍數(shù)時(shí),斷點(diǎn)命中一次。(3)當(dāng)滿足條件,而且進(jìn)入斷點(diǎn)的累計(jì)次數(shù)大于N時(shí),每次命中斷點(diǎn)。
2 VS 2010使用條件斷點(diǎn)進(jìn)行調(diào)試
以調(diào)試C++控制臺(tái)代碼為例子,介紹條件斷點(diǎn)。
條件斷點(diǎn)是在滿足條件時(shí),才會(huì)斷下來的。
方法/步驟
1
啟動(dòng)VS 2010,新建C++控制臺(tái)工程。
2
以C++代碼為例,寫了一個(gè)求和的C++控制臺(tái)程序,
輸出的是1~9的和。
3
先用普通斷點(diǎn)。在12行的左側(cè)空白點(diǎn)擊一下就可以插入一個(gè)斷點(diǎn)了。
在調(diào)試的時(shí)候可以看到每次代碼經(jīng)過這里時(shí)都會(huì)斷下來。
4
如果想看一下i=5時(shí),res的值怎么辦呢?雖然普通斷點(diǎn)也能達(dá)到,但麻煩了。
5
在斷點(diǎn)處,右鍵,選擇“Condition...”進(jìn)行設(shè)置條件。
6
輸入條件為i == 5。
默認(rèn)是選擇"Is true",表示當(dāng)條件為true是斷下來。
"Has changed",則如果本次的條件值和最近一次的條件值不同時(shí),才斷下來。
7
按F5進(jìn)行調(diào)試,可以看到i == 5的時(shí)候,觸發(fā)了斷點(diǎn)。
3 VS條件斷點(diǎn)的一個(gè)坑
今天早上要調(diào)試一個(gè)方法,所以在方法的入口處也就是’{’打了一個(gè)條件斷點(diǎn),可是隨后就發(fā)現(xiàn)對(duì)這個(gè)方法的調(diào)用都無法獲得正確的結(jié)果了,不管傳遞什么參數(shù),方法的返回值都一樣,而且這個(gè)返回值與輸入的參數(shù)完全無關(guān),這個(gè)問題折騰了我一早上,差點(diǎn)把我搞崩潰,而且詭異的是,這個(gè)問題只有在調(diào)試程序的時(shí)候才會(huì)出現(xiàn),如果不調(diào)試直接運(yùn)行的話,就是完全正常的。
在抓耳撓腮了一早上之后,用盡了各種辦法找不到原因,偶然把條件斷點(diǎn)點(diǎn)開,終于發(fā)現(xiàn)了問題,原來我把'”==”不小心打成了”=”,如果在代碼中出現(xiàn)這種問題的話,代碼肯定會(huì)編譯失敗的,可是在條件斷點(diǎn)里并不會(huì)進(jìn)行類似的檢查,并且由于寫成了賦值=,還把方法參數(shù)給改了。
?
4 VS打字符串條件斷點(diǎn)的方法 及 查看CStringArray的方法
?
條件設(shè)置為strcmp(fuzzCharRes, "RtlEnterCriticalSection") == 0
Visual Studio中的添加斷點(diǎn)功能中支持的字符串函數(shù)有:strlen, wcslen, strnlen, wcsnlen, strcmp, wcscmp, _stricmp, _wcsicmp, strncmp, wcsncmp, _strnicmp, _wcsnicmp, strchr, wcschr, strstr, wcsstr.
查看CStringArray的方法
exportedFunctions.m_pData,7056 逗號(hào)后面加這個(gè)數(shù)組的長(zhǎng)度
std::string stdStr = "12";
設(shè)置條件斷點(diǎn)strcmp(stdStr._Bx._Buf, "12") == 0
{_Buf=0x0000000000b54c90 "貐?" _Ptr=0x000000003ea68c90 "F" _Alias=0x0000000000b54c90 "?|>" }
? ? _Buf: 0x0000000000b54c90 "貐?"
? ? _Ptr: 0x000000003ea68c90 "F"
? ? _Alias: 0x0000000000b54c90 "?|>"
CString 設(shè)置條件斷點(diǎn) wcscmp(strObjAddr.m_pszData, L"66") == 0
wcscmp(rcx, L"MOV RCX, 2 ?Current CallLevel: 1 \n") == 0 帶寄存器的版本,配合OutputDebugStringW斷點(diǎn)
訪問指針成員的變量 在Intermidate窗口或字符串?dāng)帱c(diǎn)中
{,,NsDataModel10.dll}(*(Ns::Member*){*}pVisitable).m_id
?
總結(jié)
以上是生活随笔為你收集整理的VS 条件断点学习总结2的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在 emu8086 中学习汇编In,Ou
- 下一篇: 傅里叶变换在图像处理中的应用初步学习