z (執行 while)
z 命令會在指定的條件為 true 時執行命令。
使用者模式
Command ; z( Expression )
內核模式
Command ; [Processor] z( Expression )
參數
命令
指定要在 Expression 條件評估為非零值的命令時執行。 此命令一律至少執行一次。
處理器
指定套用至測試的處理器。 如需語法的詳細資訊,請參閱 多處理器語法。 您只能在核心模式中指定處理器。
表達
指定要測試的條件。 如果此條件評估為非零值, 則會再次執行 Command 命令,然後 再次測試 Expression 。 如需語法的詳細資訊,請參閱 數值表達式語法。
Environment
項目 | 說明 |
---|---|
模式 | 使用者模式、核心模式 |
目標 | 即時、損毀傾印 |
平台 | 全部 |
備註
在許多調試程式命令中,分號是用來分隔不相關的命令。 不過,在 z 命令中,分號會分隔 “z” 與 Command 參數。
命令一律至少執行一次,然後測試 Expression。 如果條件為非零值,則會再次執行命令,然後 再次測試 Expression 。 (此行為類似於 C 語言 do - while 迴圈,而不是簡單的 while 迴圈。
如果 「z」 左邊有數個分號,只要 Expression 條件為 true,“z” 左邊的所有命令都會重複。 這類命令可以是允許終端機分號的任何調試程式命令。
如果您在 z 命令之後新增另一個分號和其他命令,這些額外的命令會在迴圈完成之後執行。 我們通常不建議以 「z」 開頭的一行,因為除非條件因為其他動作而變成 false,否則它會永遠產生不感興趣的輸出。 請注意,您可以巢狀 z 命令。
若要中斷持續太久的迴圈,請在CDB或 KD 中使用 CTRL+C ,或使用 偵錯 |從功能表中斷 ,或 WinDbg 中的 CTRL+BREAK。
下列程式代碼範例示範零 eax 快取器不必要的複雜方式。
0:000> reax = eax - 1 ; z(eax)
下列範例會 遞增 eax 和 ebx 快取器,直到其中一個緩存器至少為 8,然後遞增 ecx 快取器一次。
0:000> reax=eax+1; rebx=ebx+1; z((eax<8)|(ebx<8)); recx=ecx+1
下列範例使用 C++ 表達式語法,並使用虛擬緩存 器$t 0 作為迴圈變數。
0:000> .expr /s c++
Current expression evaluator: C++ - C++ source expressions
0:000> db pindexcreate[@$t0].szKey; r$t0=@t0+1; z( @$t0 < cIndexCreate )