我有一个.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