2015-06-16 58 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工作。

相关问题