我一直在尋找一種工具來調試未發佈的COM引用,這通常會導致如果代碼沒有正確調用所有COM實例上的Marshal.ReleaseCOMObject
,Word/Outlook進程將掛起在內存中。 (Outlook 2007部分修復了Outlook加載項,但這是一個通用的問題)。如何從託管代碼調試未發佈的COM引用?
是否有一個工具可以顯示至少一個由託管代碼持有的COM引用列表(按類型)?理想情況下,它還會顯示內存分析器樣式的對象樹,以幫助調試參考增量發生的位置。
在運行時進行調試並不重要,因爲能夠附加到掛起的進程 - 因爲當代碼與COM接口完成並且有人忘記釋放某些內容時通常會發生問題 - 應用程序(例如winword)掛起內存,即使在調用託管應用程序退出之後。
如果這樣的工具不存在,什麼是(技術?)原因?在使用COM互操作時,調試大量非常難以發現的問題將非常有用。
不利於在所有的時候掛起的原因使用枚舉,或忘記了「一條龍」的屬性訪問要求每個實例被釋放,例如是例如document.Sections [0] .Ranges [0]。文本。 – Marek 2010-03-09 08:29:35
我承認它並不像您要找的那樣乾淨或簡單。但是,如果你做了一個子程序AddRef和發佈,並報告返回值,並且之前和對象的所有使用後調用這個(或只是你是可疑的手段,來減少工作量),你會得到更好的發生了什麼事情的圖片。例如,如果你之前和使用之後枚舉這樣做,你可以看到,如果事情在該代碼是圍繞着離開的參考。 – 2010-03-09 17:02:04