永远无法达到的代码块

时间:2012-05-28 14:04:08

标签: .net profiling code-analysis

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

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

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

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

3 个答案:

答案 0 :(得分:1)

使用ReSharper提高您的代码效率。 检查其中一个功能中的不可用代码区域。

答案 1 :(得分: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#实现这一目标只是汗水,但并非不切实际。

答案 2 :(得分:-1)

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