.reload (モジュールのリロード)
.reload コマンドは、指定されたモジュールのすべてのシンボル情報を削除し、必要に応じてこれらのシンボルをリロードします。 場合によっては、モジュール自体のリロードまたはアンロードも行います。
.reload [Options] [Module[=Address[,Size[,Timestamp]]]]
.reload -?
パラメーター
Options 以下のいずれかのオプション。
/d
デバッガーのモジュール リストにあるすべてのモジュールをリロードします (すべてのパラメーターを省略した場合は、この状態がユーザー モードのデバッグ中の既定になります)。
/f
シンボルを即座にロードするようにデバッガーに強制します。 このパラメーターは、シンボルの遅延読み込みをオーバーライドします。 詳細については、「解説」を参照してください。
/i
.pdb ファイルのバージョン間の不一致を無視します (このパラメーターを含めなかった場合、一致しなかったシンボル ファイルはロードされません)。/i を使用すると、明示的に指定しなくても、/f も使用されます。
/l
モジュールを一覧表示しますが、シンボルのリロードは行いません (カーネル モードでは、このパラメーターは lm コマンドと同様の出力を提供します)。
/n
カーネル シンボルのみをリロードします。 ユーザー シンボルはリロードしません (このオプションは、カーネル モードのデバッグ中にのみ使用できます)。
/o
シンボル サーバーのダウンストリーム ストア内のキャッシュされたファイルを強制的に上書きします。 このフラグを使用する場合は、/f も含める必要があります。 既定では、ダウンストリーム ストアのファイルは上書きされません。
シンボル サーバーは、バイナリの異なるビルドごとのシンボルに、別々のファイル名を使用するため、ダウンストリーム ストアが破損していると思われる場合を除き、このオプションを使用する必要はありません。
/s
システムのモジュール イメージ リスト内のすべてのモジュールをリロードします (すべてのパラメーターを省略した場合は、この状態がカーネル モードのデバッグ中の既定になります)。
ユーザー モードのデバッグを実行する際に、個々のシステム モジュールを名前でロードする場合は、/s を含める必要があります。
/u
指定されたモジュールと、対応するすべてのシンボルをアンロードします。 デバッガーは、フル パスに関係なく、ロード済みモジュールのうち名前が Module と一致するものをアンロードします。 イメージ名も検索対象になります。 詳細については、次の「備考」セクションの記述を参照してください。
/unl
アンロードされたモジュール リストにあるイメージ情報に基づいてシンボルをリロードします。
/user
ユーザー シンボルのみをリロードします (このオプションは、カーネル モードのデバッグ中にのみ使用できます)。
/v
冗長モードをオンにします。
/w
Module をリテラル文字列として処理します。 この処理により、デバッガーはワイルドカード文字を展開できなくなります。
Module
ホスト コンピューター上のシンボルをリロードするターゲット システム上のイメージの名前を指定します。 Module には、ファイルの名前とファイル名拡張子を含める必要があります。 /w オプションを使用しない場合、Module にはさまざまなワイルドカード文字や指定子が含まれる可能性があります。 構文の詳細については、「文字列のワイルドカードの構文」を参照してください。 Module を省略した場合、.reload コマンドの動作は、使用する Options によって異なります。
Address
モジュールのベース アドレスを指定します。 通常、このアドレスが必要になるのは、イメージ ヘッダーが破損しているかページアウトされている場合のみです。
Size
モジュール イメージのサイズを指定します。 多くの場合、デバッガーはモジュールの正しいサイズを認識しています。 デバッガーが正しいサイズを認識していない場合は、Size を指定する必要があります。 このサイズには、実際のモジュール サイズ以上の数値を指定できますが、実際のモジュール サイズ未満の数値は指定できません。 通常、このサイズが必要になるのは、イメージ ヘッダーが破損しているかページアウトされている場合のみです。
Timestamp
モジュール イメージのタイムスタンプを指定します。 多くの場合、デバッガはモジュールの正しいタイムスタンプ認識しています。 デバッガーが正しいタイムスタンプを認識していない場合は、Timestamp を指定する必要があります。 通常、このタイムスタンプが必要になるのは、イメージ ヘッダーが破損しているかページアウトされている場合のみです。
メモ: Address、Size、および Timestamp の各パラメーターの間には、空白をはさまないようにしてください。
-?
このコマンドの短いヘルプ テキストを表示します。
Environment
項目 | 説明 |
---|---|
モード | ユーザー モード、カーネル モード |
対象 | ライブ、クラッシュ ダンプ |
プラットフォーム | すべて |
追加情報
シンボルの遅延 (レイジー) 読み込みの詳細については、「シンボルの遅延読み込み」を参照してください。 その他のシンボル オプションの詳細については、シンボル オプションの設定に関する記事を参照してください。
解説
.reload コマンドの実行時に、シンボル情報の読み取りは行われません。 このコマンドでは、シンボル ファイルが変更された可能性があることや、新しいモジュールをモジュール リストに追加する必要があることをデバッガーに知らせます。 このコマンドにより、デバッガーはモジュール リストを修正し、指定されたモジュールのシンボル情報を削除します。 実際のシンボル情報は、その情報が必要になってから、個々の .pdb ファイルから読み取られます (このような読み込みは、シンボルのレイジー読み込みまたはシンボルの遅延読み込みとして知られています)。
シンボルの読み込みを強制的に実行するには、/f オプションを使用するか、ld (シンボルの読み込み) コマンドを発行します。
.reload コマンドは、システムが応答を停止 (クラッシュ) して、デバッグ中のターゲット コンピューターのシンボルが失われる可能性がある場合に役立ちます。 このコマンドは、シンボル ツリーを更新した場合にも便利です。
モジュールがアンロードされている場合やページアウトされた場合など、何らかの理由でイメージ ヘッダーが正しくない場合は、/unl 引数を使用するか、Address と Size の両方を指定することで、シンボルを正しく読み込むことができます。
.reload /u コマンドでは、広範な検索が行われます。 デバッガーはまず、パスに関係なく、Module と正確なモジュール名との照合を試みます。 この照合で一致しない場合は、Module が、読み込まれたイメージの名前として処理されます。 たとえば、メモリ内に常駐する HAL のモジュール名が halacpi.dll である場合、以下のどちらのコマンドを実行した場合も、対応するシンボルがアンロードされます。
kd> .reload /u halacpi.dll
kd> .reload /u hal
ユーザー モード デバッグを実行していて、ターゲット アプリケーションのモジュール リストに含まれないモジュールを読み込む場合は、次の例に示すように、/s オプションを含める必要があります。
0:000> .reload /u ntdll.dll
Unloaded ntdll.dll
0:000> .reload /s /f ntdll.dll