reportAvOnComRelease MDA
當執行 COM Interop 和使用 Release 或 ReleaseComObject 方法來結合未經處理的 COM 呼叫,卻由於使用者參考計數 (Reference Counting) 錯誤而擲回例外狀況時,reportAvOnComRelease Managed 偵錯助理 (MDA) 就會啟動。
症狀
存取違規和記憶體損毀。
原因
由於在執行 COM Interop 和使用 Release 或 ReleaseComObject 方法來結合未經處理的 COM 呼叫時,所發生的使用者參考計數錯誤,偶爾便會擲回例外狀況。 由於不捨棄這個例外狀況就會造成 CLR 中的存取違規,並使 CLR 終止,所以通常都會捨棄這個例外狀況。 在啟用這個助理時,即可偵測和報告這種例外狀況,而非只是捨棄。
解決方式
檢查您的參考計數程式碼和搜尋錯誤,並檢查物件的原生用戶端以找出參考計數錯誤。
對執行階段的影響
有兩種模式可供使用。 如果 allowAv 屬性為 true,這個助理就會防止執行階段捨棄存取違規。 如果 allowAv 是 false (預設值),執行階段就會捨棄存取違規,不過會有警告訊息向使用者報告,表示已經擲回和捨棄例外狀況。
Output
如果可能的話,輸出就會包含 COM 介面指標的原始 vtable。 否則,就會顯示一項資訊訊息。
組態
<mdaConfig>
<assistants>
<reportAvOnComRelease allowAv="false"/>
</assistants>
</mdaConfig>