【问题标题】:I am looking for a recursion analysis tool [closed]我正在寻找递归分析工具 [关闭]
【发布时间】:2011-03-21 18:00:37
【问题描述】:

我这个周末遇到了一个问题,方法 1 调用了方法 2,方法 2 调用了捕获异常的方法 3,并且在异常处理中再次调用了方法 1...

M1 -> M2 -> M3 -> M1 ....

一旦问题发生,问题就会变得明显且易于修复。

有人知道在 .NET 应用程序中检测此类问题的工具吗?

【问题讨论】:

  • 用于检测未绑定递归的编译时间(又名静态)分析很难做到。我认为 .NET 领域中没有任何工具可以帮助您解决这个问题。
  • @Steven - 是的,我找不到任何关于工具的东西......我最接近的是一篇关于它的 ACM 文章......当我发布这个问题时,我交叉手指。
  • 您想检测任意递归?或者具体来说,通过异常处理程序发生的递归?

标签: .net recursion code-analysis static-code-analysis


【解决方案1】:

要正确执行此操作,您需要 C# 应用程序上的全局调用图,使用 C# 语义计算,相当于点分析,可以说包括它调用的库。使用这样的调用图,您可以枚举其中的循环,这些循环就是要检查的候选对象。

我不知道你从哪里可以得到一个现成的为 C# 计算这样一个全局调用图的工具。

您可以使用简单的代码扫描技术对此进行近似计算。对于每个方法 M,提取它包含的明显调用集作为标识符 I。大多数情况下,它们将显示为类似于 identifier( 在这一步之后你有 M_i -> I 的语法。你可以将其构建为一个(非常保守的)基本调用图,然后计算传递闭包。这样,你有一个带有循环的近似调用图,你可以进行循环分析。这将通过名称和其他情况传递大量方法,但是它可能已经足够了。

【讨论】:

  • 不是我一直在寻找的答案(一个工具),而是一个很好的任务复杂性的简历(这有点解释了缺乏这样的工具)。谢谢
【解决方案2】:

Gendarme 将捕获一些(最常见但基本的)递归案例。 MS FxCop 也有一些(IIRC)。然而,两者都没有规则(目前)来涵盖更复杂的情况,例如:M1->M2->M3->M1...

遗憾的是,我不知道有任何其他工具可以对 .NET 进行此类检测。请分享你发现的任何东西:-)

【讨论】:

猜你喜欢
  • 2014-03-14
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 1970-01-01
  • 2010-09-27
  • 2012-02-15
  • 2012-08-06
相关资源
最近更新 更多