reportAvOnComRelease MDA
注意
本文專屬於 .NET Framework。 它不適用於較新的 .NET 實作,包括 .NET 6 和更新版本。
如果在執行 COM Interop 並使用與原始 COM 呼叫組合的 reportAvOnComRelease
或 Release 方法時,因為使用者參考計數錯誤而擲回例外狀況,就會啟用 ReleaseComObject Managed 偵錯助理 (MDA)。
徵兆
存取違規與記憶體損毀。
原因
有時候,在執行 COM Interop 並使用與原始 COM 呼叫組合的 Release 或 ReleaseComObject 方法時,會因為使用者參考計數錯誤而擲回例外狀況。 通常會捨棄此例外狀況,因為如果不這麼做,就會導致 CLR 發生存取違規,而降低效能。 如果啟用此助理,就會偵測並提報這類例外狀況,而不是直接捨棄。
解決方法
檢查您的參考計數程式碼,並搜尋錯誤,另外也要檢查物件的原生用戶端,查看是否有參考計數錯誤。
對執行階段的影響
有兩種模式可用。 如果 allowAv
屬性為 true
,該助理會防止執行階段捨棄存取違規。 如果 allowAv
為 false
(預設值),則執行階段會捨棄存取違規,但是會向使用者提報警告訊息,指出已擲回並捨棄例外狀況。
輸出
如果可能,輸出會包含 COM 介面指標的原始 vtable。 否則,就會顯示告知性訊息。
組態
<mdaConfig>
<assistants>
<reportAvOnComRelease />
</assistants>
</mdaConfig>