我有一個.NET項目(C#),凡在我的代碼有這樣的功能:塊永遠不能達到
public void myFunction(string myStr)
{
myStr = "This is not an empty string";
if(String.IsNullOrEmpty(myStr))
{
DoSomething();
}
}
我想分析我的應用程序,以查看是否有塊的代碼,永遠不可能達成。我怎麼能這樣做?
我有一個.NET項目(C#),凡在我的代碼有這樣的功能:塊永遠不能達到
public void myFunction(string myStr)
{
myStr = "This is not an empty string";
if(String.IsNullOrEmpty(myStr))
{
DoSomething();
}
}
我想分析我的應用程序,以查看是否有塊的代碼,永遠不可能達成。我怎麼能這樣做?
使用ReSharper使您的代碼更有效。 檢查其中一個功能中的不可用代碼區域。
這是否處理OP的例子? –
只是檢查了主題中給出的代碼,是suprized,但resharper是沉默的,並沒有給出任何警告。雖然它仍然是我對代碼質量最有用的工具。 –
所以,我知道resharper對你來說通常是有用的,但爲什麼這會讓OPs的問題變得更加複雜呢? –
您可能需要使用工具,如ReSharper它可以做代碼質量分析而開發。它會給出警告,如「代碼是啓發式無法訪問」
要做到這一點,您需要對所有控制路徑上的值進行符號分析,並使用布爾符號簡化來確定條件是否爲真。例如:
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#是汗水,但不是不切實際的。
感謝您的回答 – Nick
http://stackoverflow.com/q/65585/419436? – Jan
不會VS2010底線時,一段代碼無法訪問? –
@AdamSweeney只有在明確的情況下 – Nick