2012-10-19 40 views
0

我知道我們有監視在調試模式下監視一個變量,你可以改變,刪除或分配給另一個對象的變量。在Visual Studio中監視某個對象?

但我的意思是監視一個centain對象狀態在內存中。

說我有將接收的對象,並分配到一個變量

即方法:

void DoSomething(object anObject){ 
    object tempObject = anObject; 
} 

該方法將被調用超過1次。

如果我在這個tempObject上使用Watch,那麼當新的賦值對象值時,Watch中的tempObject將繼續改變。

我在這裏感興趣的是僅僅觀看這個anObject。在第二次調用這個方法時,我發現這個anObject有centain參數是不正確的,我想跟蹤這個對象,看看這個不正確的參數何時會變回正確的參數。 (甚至超出範圍)。

我該怎麼做?或者有可能在Visual Studio中執行它?

因爲現在我有類似的問題,我有一個centain對象,我看到它被處置,但不知何故某處被再次使用,它的說不處理。使用監視我不知道這是否與我一直在觀看的對象相同。

我希望我明確這一點。

+0

在Dispose()中放置斷點將縮小過早調用的範圍。爲了其他目的,你總是可以有條件斷點。 – Ankush

+0

@Ankush我已經做了,我看到Dispose方法被執行,一個參數改變了。但後來我可以看到一個具有相同參數但沒有處理的對象,我不知道這是否是同一個對象。 (在Disposed方法中,將某個參數設置爲true)。 –

+0

您可以評估ReferenceEqual並查看兩個對象是否相同。 – Ankush

回答

1

試着拿着一個WeakReference到有問題的對象並觀看它。從那裏您可以看到WeakReference的目標和所討論的對象是否實際上是同一個對象。

+0

Visual Studio本身不能在調試模式下爲我們做這些東西? (我的意思就像我們使用Watch一樣簡單)這幾乎是我現在正在做的,必須修改代碼來保存對象引用,然後自己檢查它... –

+0

不是我所知道的。我只能假設這很容易通過一個乾淨的設計和正確放置斷點來解決。 – doogle

+0

我之所以使用WeakReference而不是你正在做的事情是因爲WeakReference仍然允許GC收集一個對象。這樣您就可以調試並且不會阻礙應用程序的正常流程。 – doogle

0

只要有強烈的引用,對象不會被垃圾回收器處置。某些代碼可能正在調用對象上的Dispose,或者您可能正在使用弱引用。

使用Son of Strike調試擴展,您可以隨時跟蹤對象的GC Roots。我不確定我們是否可以收到事件通知。