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