共用方式為


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)

下列範例會 遞增 eaxebx 快取器,直到其中一個緩存器至少為 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 )

另請參閱

j (執行 If-Else)