日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VS 条件断点学习总结2

發(fā)布時(shí)間:2025/4/14 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VS 条件断点学习总结2 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。