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