條件表達式也有兩種類型:
為 ture (Is ture)
如下圖示,此處設(shè)置的條件為: 當 testInt == 4 is ture 時命中斷點。
更改時 (When changed)
如下圖示,此處設(shè)置的條件為: 當 testInt 被更改的時候命中斷點。
命中次數(shù)
命中次數(shù)在 Debug 循環(huán)語句時非常有用。
比如你懷疑程序出錯點發(fā)生在 N 次循環(huán)之后或者某些次循環(huán),那么可以設(shè)置循環(huán)語句內(nèi)的命中次數(shù),讓它在某些次或者某次循環(huán)停下來,而不是每次都停下來。
如下圖,設(shè)置的條件為:讓它每隔一次循環(huán)斷下來。
篩選器
篩選器是用來限制斷點命中時所在的設(shè)備、進程和線程。
比如,在一個多線程的程序中,你不必手動 GetThreadId,可以通過篩選器,設(shè)置讓它只在某線程中執(zhí)行到此處時停下來。
篩選器表達式用法為:
MachineName = "name"
ProcessId = value
ProcessName = "name"
ThreadId = value
ThreadName = "name"
多個表達式之間可以使用運算符 & (AND), || (OR), ! (NOT) 連接 。
3. 追蹤斷點
在斷點設(shè)置窗口,除了條件,我們還可以看到操作 (Action)選項框。
操作 (Action) 的意義是設(shè)置追蹤點 (Tracepoint)。
Tracepoint 相當于是一種臨時的有 Trace 功能的斷點,它會把消息打印到 Output 窗口。
勾選后面的繼續(xù)執(zhí)行 (Continue Execution),代表 Tracepoint 命中時,Debugger 不會停下來,否則將會在此處停下來。兩種情況下,消息都會打印出來。
可以使用下面的關(guān)鍵字作為消息。
4. 函數(shù)斷點
在 Debug 菜單下,點擊新建斷點,可以新建兩種類型的斷點:函數(shù)斷點 (Function Breakpoint)和數(shù)據(jù)斷點(Data Breakpoint)。
函數(shù)斷點是通過函數(shù)名設(shè)置斷點,當程序執(zhí)行到該函數(shù)的時候斷點斷下來。
5. 數(shù)據(jù)斷點
緊接上面,這里講下數(shù)據(jù)斷點。
數(shù)據(jù)斷點的意義是,讓程序在當某處地址指定字節(jié)發(fā)生改變的時候中斷下來。它只有在 Break Mode 下才可以設(shè)置。
地址欄可以用具體的內(nèi)存地址,也可以用表達式來代表內(nèi)存地址。例如,可以使用 &avar,讓程序在當變量 avar 內(nèi)容發(fā)生改變的時候中斷下來。
6. 在 Call Stack Window 設(shè)置斷點
也許你不知道,是可以在 Call Stack 窗口設(shè)置斷點的。
當你在查看函數(shù)的調(diào)用關(guān)系的時候,想在這一些列的函數(shù)中快速設(shè)置斷點,那么其實很簡單:在 Call Stack 窗口,點擊想要設(shè)置斷點的函數(shù)所在的行,按下 F9 即可。
7. 在 Disassembly Window 設(shè)置斷點
還可以在 Disassembly 窗口設(shè)置斷點。但前提必須是 Break Mode 下。
反匯編窗口設(shè)置斷點的方式跟在源代碼中設(shè)置斷點的方式相同,只要在代碼左邊欄邊緣處點擊一下,紅色圓點就出現(xiàn)了。
8. 斷點管理
我們前面所設(shè)置的所有斷點都會出現(xiàn)在斷點窗口 (Breakpoints Windows)。
在這里,可以對所有的斷點進行管理,比如批量啟用、禁用、刪除等,還可以在程序運行過程中,查看斷點的命中狀態(tài)。
當你的工程非常大,Debug 時設(shè)置了很多的斷點的時候,它會非常有用。
總結(jié)
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com