次の方法で共有


reportAvOnComRelease MDA

Note

この記事は .NET Framework に固有のものです。 .NET 6 以降のバージョンを含む、.NET の新しい実装には適用されません。

COM 相互運用を実行していて、COM の生呼び出しと組み合わせた reportAvOnComRelease または Release メソッドを使用しているときに、ユーザー参照カウントのエラーが原因で例外がスローされると、ReleaseComObject マネージド デバッグ アシスタント (MDA) がアクティブ化されます。

現象

アクセス違反およびメモリ破損が発生します。

原因

COM 相互運用を実行していて、生の COM 呼び出しと組み合わせた Release または ReleaseComObject メソッドを使用しているときに、ユーザー参照カウントのエラーが原因で例外がスローされることがあります。 通常、この例外は破棄されます。これは、破棄しないと CLR でアクセス違反が発生し、ダウンしてしまうためです。 このアシスタントが有効な場合は、そのような例外を単に破棄するのではなく、検出して報告できます。

解決方法

参照カウントのコードを調べてエラーを探します。また、オブジェクトのネイティブ クライアントに参照カウントのエラーがないかどうかも調べます。

ランタイムへの影響

2 つのモードを利用できます。 allowAv 属性が true の場合、アシスタントは、ランタイムがアクセス違反を破棄しないようにします。 allowAvfalse の場合 (既定)、ランタイムはアクセス違反を破棄しますが、例外がスローされて破棄されたことを通知する警告メッセージがユーザーに報告されます。

出力

可能な場合、出力には COM インターフェイス ポインターの元の vtable が含まれます。 それ以外の場合は、情報メッセージが表示されます。

構成

<mdaConfig>
  <assistants>
    <reportAvOnComRelease />
  </assistants>
</mdaConfig>

関連項目