4

我有一个 .NET 项目(C#),在我的代码中有这样的函数:

public void myFunction(string myStr)
{
   myStr = "This is not an empty string";

   if(String.IsNullOrEmpty(myStr))
   {
       DoSomething();
   }
}

我想分析我的应用程序,看看是否有无法访问的代码块。我怎么能这样做?

4

3 回答 3

1

使用ReSharper让您的代码更高效。检查其中一项功能中的不可用代码区域。

于 2012-05-28T14:08:34.233 回答
1

通常,要做到这一点,您需要对所有控制路径上的值进行符号分析,并进行布尔符号简化以确定条件是否为真。例如:

void bar(...a) {
  ...
  x=2*a;
  if (...)  x=17;
  foo(x)
  ...
}
void foo(int x) {
  if (x<a && !x>5) { // dead code if called from bar ...
  ...

要知道死代码行真的死了,您必须找到所有对 foo 的调用,并验证每个调用是否都会导致这种情况发生。所以你需要一个全局调用图,你需要全局函数指针分析,你需要全局和局部指向分析......

我不知道有任何现成的工具可以做到这一点。

一个程序转换系统可以通过一些努力来构建。我们的DMS Software Reengineering Toolkit包含所有提到的可用于 C 的机制。虽然所有这些机制都不适用于 C#,但它主要以与语言无关的方式实现,因此实现 C# 是汗水,但并非不切实际。

于 2012-05-28T16:12:28.430 回答
-1

您可能想要使用ReSharper之类的工具,它可以在开发时进行代码质量分析。它会给你警告,比如“代码是启发式无法访问的”

于 2012-05-28T14:09:09.780 回答