Visual Studio - 发现方法是否在某个时刻被另一个方法调用

时间:2015-06-16 00:41:15

标签: visual-studio visual-studio-2013 static-analysis

我想知道,visual studio是否有一个功能,我给它一个2个方法名称,然后如果在调用堆栈的某个地方,第二个方法调用第一个方法(静态,无需调试) 。

e.g。 假设我有一个方法FireBullet,我想看看是否可以在某个时候调用IsOutsideWestBoundary

FireBullet() - >的HitTest() - > CheckBoundaries() - > IsOutsiteWestBoundary()

你可以看到FireBullet最终会导致在某些时候调用IsOutsideWestBoundary。

我理解这可能会成为一个非常大的问题,尤其是深层调用堆栈和每个级别调用的多个方法,但是对于相对较小的调用堆栈深度,这可能非常有用。

当然这样的事情必定存在吗?

由于 托马斯

1 个答案:

答案 0 :(得分:0)

Visual Studio扩展NDepend可以做到这一点。它允许写code rules and code queries through C# LINQ queries。以下在Visual Studio中实时执行的LINQ代码查询满足您的需求:

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工作。