11

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

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

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

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

4

2 回答 2

6

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

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

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

于 2011-09-25T20:30:26.447 回答
2

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

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

于 2011-08-07T19:06:14.970 回答