我想弄清楚如何避免在我的一個類中的StackOverflowException,其中一個方法間接調用一個屬性,最終再次調用該方法。當第一次發生這種情況時,我查找了堆棧跟蹤並修復了代碼,但之後又發生了,在另一個地方使用了相同的方法。我強烈懷疑在該方法中還有其他間接調用會再次導致異常,所以我希望能夠找到對該屬性的所有間接調用。如何找出直接或間接調用屬性的方法?
是否有某種方法,使用Visual Studio 2010 Graphs功能來直觀地幫助查找方法和屬性/字段之間的連接?
我想弄清楚如何避免在我的一個類中的StackOverflowException,其中一個方法間接調用一個屬性,最終再次調用該方法。當第一次發生這種情況時,我查找了堆棧跟蹤並修復了代碼,但之後又發生了,在另一個地方使用了相同的方法。我強烈懷疑在該方法中還有其他間接調用會再次導致異常,所以我希望能夠找到對該屬性的所有間接調用。如何找出直接或間接調用屬性的方法?
是否有某種方法,使用Visual Studio 2010 Graphs功能來直觀地幫助查找方法和屬性/字段之間的連接?
沒有圖形表示,但可以右鍵單擊該方法並點擊「查找所有引用」,通過這些調用並確保它們都不遞歸。
另一種選擇是調試,在該方法上設置一個斷點並檢查調用堆棧以識別任何可能的遞歸調用。
我想你的意思是'查找所有參考文獻',並且整個班級中都有很多參考文獻。我想把它縮小到只有一個具體的方法。 – user1306322
@ user1306322是的,ReSharper稱它爲查找用法,因此混亂!你可以縮小範圍的唯一方法是通過使用或調試,在方法上放置一個斷點,然後檢查調用堆棧。 – mattytommo
好吧,實際上有一個相當慢的方法 - 爲方法和屬性創建依賴關係圖,在所有意大利麪條中搜索所涉及的屬性並篩選所有未連接的節點,但這需要相當多的時間。如果只有更簡單的方法。 – user1306322
我想我會檢查它是否在代碼中發生,或重構,所以它不會。即使你現在排序,你以後有機會再次引入問題。 –
@TonyHopkinson是的,我知道我的代碼存在嚴重問題,而且我正在重寫它,這個問題是關於它的一個步驟。 – user1306322
使用resharper。單擊屬性(或其setter或getter)或方法時,可以獲取整個堆棧跟蹤,然後單擊檢查 - >傳入呼叫。具有用於直接遞歸調用的特殊圖標。 http://www.jetbrains.com/resharper/webhelp/Code_Analysis__Call_Tracking.html –