次の方法で共有


ICorDebugModule2::ApplyChanges メソッド

メタデータの変更および Microsoft Intermediate Language (MSIL) コードの変更を実行中のプロセスに適用します。‏

HRESULT ApplyChanges (
    [in] ULONG                       cbMetadata,
    [in, size_is(cbMetadata)] BYTE   pbMetadata[],
    [in] ULONG                       cbIL,
    [in, size_is(cbIL)] BYTE         pbIL[]
);

パラメーター

  • cbMetadata
    [入力] デルタ メタデータのサイズ (バイト単位)。

  • pbMetadata
    [入力] デルタ メタデータを格納するバッファー。 バッファーのアドレスは、IMetaDataEmit2::SaveDeltaToMemory メソッドから返されます。

    メタデータの相対仮想アドレス (RVA: Relative Virtual Address) は、MSIL コードの先頭を基準とする必要があります。

  • cbIL
    [入力] デルタ MSIL コードのサイズ (バイト単位)。

  • pbIL
    [入力] 更新された MSIL コードを格納するバッファー。

解説

pbMetadata パラメーターは、特別なデルタ メタデータ形式です (IMetaDataEmit2::SaveDeltaToMemory によって出力)。 pbMetadata は、前のメタデータをベースとして使用し、個々の変更を記述してそのベースに適用します。

これに対して、pbIL[] パラメーターには更新されたメソッドの新しい MSIL が格納され、そのメソッドの以前の MSIL を完全に置き換えます。

デバッガーのメモリでデルタ MSIL とメタデータが作成されると、デバッガーは ApplyChanges を呼び出して、変更内容を共通言語ランタイム (CLR: Common Language Runtime) に送信します。 ランタイムはメタデータ テーブルを更新し、新しい MSIL をプロセスに配置して、新しい MSIL の Just-In-Time (JIT) コンパイラを設定します。 変更が適用されると、デバッガーは IMetaDataEmit2::ResetENCLog を呼び出して、次の編集セッションを準備する必要があります。 デバッガーはプロセスを続行することもできます。

デルタ メタデータを持つモジュールでデバッガーが ApplyChanges を呼び出す場合、変更内容の出力に使用されるコピーを除いて、そのモジュールのメタデータのすべてのコピーで同じメタデータを持つ IMetaDataEmit::ApplyEditAndContinue も呼び出す必要があります。 メタデータのコピーが実際のメタデータと同期しなくなると、デバッガーはそのコピーを破棄して、新しいコピーを取得できます。

ApplyChanges メソッドが失敗すると、デバッグ セッションは無効な状態になるため、再起動する必要があります。

必要条件

プラットフォーム: 「.NET Framework システム要件」を参照

ヘッダー: CorDebug.idl、CorDebug.h

ライブラリ: CorGuids.lib

.NET Framework のバージョン: 4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0

参照

参照

ICorDebugModule2 インターフェイス

ICorDebugModule インターフェイス