2015-06-16 87 views
1

我想知道,visual studio是否有一個功能,以便我給它一個2方法名稱,然後如果在調用堆棧的第一個地方方法被第二個調用(靜態地,不必調試)。Visual Studio - 發現如果方法在某個點被另一個方法調用

例如 說我有一個方法FireBullet,我想看看IsOutsideWestBoundary 可以在某些時候

FireBullet()被調用 - >的HitTest() - > CheckBoundaries() - > IsOutsiteWestBoundary()

你可以看到FireBullet最終可能導致IsOutsideWestBoundary在某個時候被調用。

我知道這可能會成爲一個非常大的問題,特別是深度調用堆棧和多個方法在每個級別調用,但仍然,對於相對較小的調用堆棧深度,這可能非常有用。

這樣的事情肯定存在嗎?

感謝 托馬斯

+0

您是否試圖使用CallerMemberName屬性進行日誌記錄? –

回答

0

在Visual Studio擴展NDepend的可以做到這一點。它可以讓我們寫code rules and code queries through C# LINQ queries。下面的LINQ查詢的代碼,在Visual Studio實時執行的,回答你的需要:

from m in Methods 
where m.Name == "FireBullet()" 
let depth0 = m.DepthOfIsUsing("MyNamespace.Program.IsOutsiteWestBoundary()") 
where depth0 >= 0 orderby depth0 
select new { m, depth0 } 

注意到代碼查詢結果還提供呼叫的深度。它可以存儲在您的NDepend項目中,並且可以通過添加前綴warnif count > 0將其轉換爲規則。

NDepend method call indirect

此查詢獲取由NDepend的產生時,右鍵點擊的方法和選擇的方法是查詢的啓發......這給我打電話(直接或間接)

NDepend method call indirect

如果您單擊按鈕出口到圖形你得到這樣的調用圖(在此here更多信息):

NDepend method call graph

14天的全功能試用版here

聲明:我爲NDepend工作。

相關問題