KD を使用したユーザーモード エラーのデバッグ

ユーザーモードのエラーを適切にデバッグするには、CDB または WinDbg が必要です。 ただし、ユーザーモードの例外は、ユーザーモードのデバッガーが存在しないため、KD に分割されることがあります。 カーネルモードの問題をデバッグしているときに、特定のユーザーモードプロセスがどのような処理を行っているかを監視することが役立つ場合もあります。

既定では、カーネルデバッガーは、指定されたアドレスと一致する最初のユーザーモードシンボル ( ku、または ln コマンド) の読み込みを試みます。

残念ながら、ユーザーモードシンボルがシンボルパスに指定されていないか、最初のシンボルが正しいものではありません。 シンボルが存在しない場合は、シンボルをシンボルパスにコピーするか、 . sympath (シンボルパスの設定) コマンドを使用して完全なシンボルツリーをポイントした後、 . reload (モジュールの再読み込み) コマンドを使用します。 間違ったシンボルが読み込まれた場合は、を実行してシンボルを明示的に読み込むことができます バイナリ > を再読み込みします。

Windows dll の多くは、異なるアドレスで読み込まれるように再配置されますが、例外もあります。 ビデオアダプターは、最も一般的な例外です。 すべてのビデオアダプターは同じベースアドレスに読み込まれるため、ほとんどの場合、KD は常に ati.dll (最初のビデオ記号はアルファベット順) になります。 ビデオについては、 lm コマンドを使用して識別できる .sys ファイルも読み込まれています。 この情報を使用して、 . リロード を発行して、正しいビデオ dll を取得できます。 デバッガーが混乱し、特定のシンボルを再読み込みすると、適切なスタックが得られる場合もあります。 関数をアセンブルして、シンボルが正しく表示されるかどうかを確認します。

ビデオ Dll と同様に、ほとんどすべての実行可能ファイルは同じアドレスに読み込まれるため、KD はアクセスを報告します。 [アクセス] にスタックトレースが表示されている場合は、 プロセス を実行してから、指定した実行可能ファイルの名前を 再読み込み します。 実行可能ファイルのシンボルパスにシンボルがない場合は、それをコピーして実行し ます。再度読み込み ます。

場合によっては、完全なシンボルツリーがシンボルパス内にある場合でも、KD または WinDbg で、正しいユーザーモードシンボルの読み込みに問題が発生することがあります。 この場合、ntdll.dll と kernel32.dll は、必要となる最も一般的なシンボルの2つです。 KD から CSRSS をデバッグする場合は、winsrv.dll と csrsrv.dll も読み込みの共通 Dll です。