KD とカーネル モード WinDbg では、複数のプロセッサ デバッグがサポートされています。 この種のデバッグは、任意のマルチプロセッサ プラットフォームで実行できます。
プロセッサには、0 から n までの番号が付 けられます。
現在のプロセッサがプロセッサ 0 の場合 (つまり、現在デバッガーがアクティブになっているプロセッサの場合)、他の非現在のプロセッサ (プロセッサ 1 から n) を調べることができます。 ただし、現在以外のプロセッサでは何も変更できません。 表示できるのは、その状態のみです。
プロセッサの選択
.echocpunum (CPU 番号の表示) コマンドを使用して、現在のプロセッサのプロセッサ番号を表示できます。 このコマンドからの出力を使用すると、カーネル デバッグ プロンプトのテキストを使用して、複数のプロセッサ システムで作業しているタイミングをすぐに確認できます。
次の例では、0:kd> プロンプトの前のは、コンピューター内の最初のプロセッサをデバッグしていることを表します。
0: kd>
次の例に示すように、 ~s (現在のプロセッサの変更) コマンドを使用してプロセッサを切り替えます。
0: kd> ~1s
1: kd>
次に、コンピューターの 2 番目のプロセッサをデバッグします。
中断が発生し、スタック トレースを理解できない場合は、マルチプロセッサ システムのプロセッサを変更する必要がある場合があります。 中断が別のプロセッサで発生した可能性があります。
その他のコマンドでのプロセッサの指定
複数のコマンドの前にプロセッサ番号を追加できます。 ~S コマンドを除き、この数値の前にチルダ (~) はありません。
手記 ユーザー モード デバッグでは、チルダを使用してスレッドを指定します。 この構文の詳細については、「スレッド構文」を参照 してください。
プロセッサ ID を明示的に参照する必要はありません。 代わりに、プロセッサ ID に対応する整数に解決される数値式を使用できます。 式をプロセッサとして解釈する必要があることを示すには、次の構文を使用します。
||[Expression]
この構文では、角かっこが必要です。 式 は、プロセッサ ID に対応する整数に解決される任意の数値式を表します。
次の例では、プロセッサはユーザー定義の擬似レジスタの値に応じて変化します。
||[@$t0]
の例
次の例では、 k (Display Stack Backtrace) コマンドを使用して、プロセッサ 2 からのスタック トレースを表示します。
1: kd> 2k
次の例では、 r (Registers) コマンドを使用して、プロセッサ 3 の eax レジスタを表示します。
1: kd> 3r eax
ただし、現在のプロセッサ以外のプロセッサの状態を変更できないため、次のコマンドでは構文エラーが発生します。
1: kd> 3r eax=808080
ブレークポイント
カーネル デバッグ中、 bp、bu、bm (ブレークポイントの設定) および ba (アクセスの中断) コマンドは、複数のプロセッサ コンピューターのすべてのプロセッサに適用されます。
たとえば、現在のプロセッサが 3 の場合は、次のコマンドを入力して 、SomeAddress にブレークポイントを設定できます。
1: kd> bp SomeAddress
その後、そのアドレスで実行されるすべてのプロセッサ (プロセッサ 1 だけでなく) によってブレークポイント トラップが発生します。
プロセッサ情報の表示
!running 拡張機能を使用すると、ターゲット コンピューター上の各プロセッサの状態を表示できます。 ! running では、プロセッサごとに、プロセス制御ブロック (PRCB) の現在および次のスレッド フィールド、16 個の組み込みのキューに登録されたスピンロックの状態、スタック トレースを表示することもできます。