2012-05-28 74 views
4

我有一个.NET项目(C#),凡在我的代码有这样的功能:块永远不能达到

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

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

我想分析我的应用程序,以查看是否有块的代码,永远不可能达成。我怎么能这样做?

+0

http://stackoverflow.com/q/65585/419436? – Jan

+0

不会VS2010底线时,一段代码无法访问? –

+0

@AdamSweeney只有在明确的情况下 – Nick

回答

1

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

+0

这是否处理OP的例子? –

+0

只是检查了主题中给出的代码,是suprized,但resharper是沉默的,并没有给出任何警告。虽然它仍然是我对代码质量最有用的工具。 –

+0

所以,我知道resharper对你来说通常是有用的,但为什么这会让OPs的问题变得更加复杂呢? –

-1

您可能需要使用工具,如ReSharper它可以做代码质量分析而开发。它会给出警告,如“代码是启发式无法访问”

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#,它在很大程度上是不可知的langauge是这样实现的,从而到达那里的C#是汗水,但不是不切实际的。

+0

感谢您的回答 – Nick

相关问题