2012-05-28 75 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

相關問題