共用方式為


多處理器語法

KD 和核心模式 WinDbg 支援多個處理器偵錯。 您可以在任何多處理器平台上執行此類偵錯。

處理器編號為 0 到 n

如果目前的處理器是處理器 0(也就是說,如果它是導致偵錯工具處於作用中的處理器),您可以檢查其他非目前的處理器(處理器 1 到 n)。 不過,您無法變更非現行處理器中的任何內容。 您只能檢視其狀態。

選擇處理器

您可以使用 .echocpunum(顯示CPU編號) 命令來顯示當前處理器的處理器編號。 此命令的輸出允許您立即透過核心偵錯提示中的文字辨識您是否正在多處理器系統上工作。

在下列範例中,kd> 提示字元前面的 0: 表示您正在偵錯電腦中的第一顆處理器。

0: kd>

使用 ~s (變更目前處理器) 指令在處理器之間切換,如下列範例所示。

0: kd> ~1s
1: kd>

現在您正在偵錯電腦中的第二個處理器。

在多處理器系統中,如果您遇到中斷且無法理解堆疊追蹤,您可能需要更換處理器。 岔斷可能發生在不同的處理器上。

在其他指令中指定處理器

您可以在數個指令之前新增處理器號碼。 此數字前面沒有波浪號 (~),但 ~S 命令除外。

注意 在使用者模式偵錯中,波浪號可用來指定執行緒。 如需此語法的詳細資訊,請參閱 執行緒語法

不需要明確提及處理器識別碼。 相反地,您可以使用數值運算式來解析為對應至處理器識別碼的整數。 若要指出運算式應該解譯為處理器,請使用下列語法。

||[Expression]

在此語法中,方括弧是必需的, 而 Expression 代表任何解析為對應至處理器識別碼之整數的數值運算式。

在下列範例中,處理器會根據使用者定義的虛擬暫存器的值而變更。

||[@$t0]

範例

下列範例會使用 k (顯示堆疊回溯) 命令來顯示處理器二的堆疊追蹤。

1: kd> 2k 

下列範例使用 r (暫存器) 指令來顯示處理器三的 eax 暫存器。

1: kd> 3r eax 

不過,下列指令會提供語法錯誤,因為您無法變更現行處理器以外的處理器狀態。

1: kd> 3r eax=808080 

中斷點

在核心偵錯期間, bp、bu、bm (設定中斷點)ba (存取中斷) 命令會套用至多處理器電腦的所有處理器。

例如,如果目前的處理器是三個,你可以輸入以下指令,在 SomeAddress處放一個斷點。

1: kd> bp SomeAddress 

然後,任何在該位址執行的處理器(不僅限於處理器 1)都會觸發斷點陷阱。

顯示處理器資訊

您可以使用 !running 延伸模組來顯示目標電腦上每個處理器的狀態。 針對每個處理器,!running 也可以顯示處理程序控制區塊(PRCB)的目前與下一個線程欄位、16 個內建的佇列旋轉鎖的狀態,以及堆疊追蹤。

您可以使用 !cpuinfo!cpuid 延伸模組來顯示處理器本身的相關資訊。