标签: code-analysis

需要分析C#代码才能找到未引用的类

我有传统的C#代码,我使用Visual Studio 2008年.我要寻找一个工具,排序的代码分析工具,会对我说哪一个类中未使用,也有一些其他有用的信息,可能对代码优化非常有用.

如果有确切的重复,请注明.

谢谢.

c# code-analysis

5
推荐指数
1
解决办法
560
查看次数

用c#代码制作函数/方法调用的图形/图表(visual studio 2008)

我在visual studio 2008中有一些c#项目,我想得到所有方法调用的图形(map?table?).我希望它是静态的,而不是运行时(如"调用堆栈"); 任何功能 - 谁叫它,多少次等等

我可以在方法之后查找所有引用方法,并将每个调用复制到表或Graphviz文件,但这将花费几个小时.是否有可以提供帮助的自动工具或插件?

c# code-analysis visual-studio-2008 static-code-analysis

5
推荐指数
1
解决办法
1946
查看次数

VS2010代码分析,能否自动修复某些警告?

我必须说我真的很喜欢VS 2010的新代码分析,我的代码中有很多区域我没有使用CultureInfo.InvariantCulture,代码分析让我对此感到温暖.

我很确定我想使用CultureInfo.InvariantCulture代码分析检测到它在Convert.ToString操作中丢失的地方.

反正有没有让VS自动修复这种类型的警告?

code-analysis visual-studio-2010

5
推荐指数
1
解决办法
905
查看次数

我应该压制CA2204:文字应拼写正确吗?

我最近将我的项目从Visual Studio 2008升级到Visual Studio 2010.

通过启用代码分析,我收到了很多警告,导致规则CA2204:文字应拼写正确.

编辑:

假设我有一个调用的方法GetResult(),并且在其中我想出于某种原因抛出异常.我想要例外说"GetResult() has failed for some reason".这将给我警告,因为GetResult不是一个字.我不会在方法名称上收到警告GetResult(),只有当我把它放在一个字符串中时.这是因为Get和Result是合法的词.

我不相信写作GetResult() has failed for some reason是解决方案.

编辑:在MSDN中它说:

此规则将文字字符串解析为单词,标记复合词,并检查每个单词/标记的拼写.

这是否意味着应该将GetResult检查为两个词:"获取"和"结果"?

我应该抑制CA2204吗?

code-analysis fxcop conventions visual-studio-2010

5
推荐指数
1
解决办法
2266
查看次数

如何分析问题以使其与合适的设计模式相匹配?

我想知道什么应该是一步一步的分析方式,以明确的问题搞清楚可能的设计模式,可以适合在溶液中.

您可以推荐任何指导?

谢谢

code-analysis design-patterns

5
推荐指数
1
解决办法
245
查看次数

哪些开源工具可以帮助我理解用C编写的大型遗留应用程序?

我需要一个可以用来更好地理解大型C项目的工具.我希望能够看到各种C模块之间的关系,以及调用什么,最常用的函数,使用的标题等等.

我在这里和谷歌搜索过,但是所有的源代码分析工具似乎都能给你一些我不感兴趣的代码行和其他指标.我只是希望得到一个关于事物结构的高级视图.在跳入代码之前互连.

有这样的事吗?

我看过这些,但它们似乎没有做我想要的:源代码工具

自从张贴这个以来我尝试了Doxygen,它似乎给了我一些我需要的东西.还有其他人?

legacy code-analysis

5
推荐指数
1
解决办法
3731
查看次数

自动计算终止算法的算法时间复杂度

这里有很多关于SO的相关问题,但他们都要求编写一个程序来计算任意算法的复杂性(这显然是不可判定的).我愿意对输入做出以下限制:

  1. 算法终止
  2. 该算法纯粹是功能性的

问题是,是否可以编写程序来通过静态分析来计算这种算法的时间复杂度?如果输入算法未终止,则程序行为未定义(可能会崩溃,返回谎言或无法终止).

big-o computer-science code-analysis halting-problem time-complexity

5
推荐指数
1
解决办法
1308
查看次数

CA1404 - 尽管语句前面有返回子句CA2000 - 尽管没有进一步的参考用法

我想了解为什么我的代码中会出现两个CA警告:

CA2000在丢失范围之前处置对象在方法'ImpersonateValidUser(string,string,string,LogOnType,LogOnProvider,ImpersonationLevel)'中,在对对象'tempWindowsIdentity'的所有引用超出范围之前调用System.IDisposable.Dispose.

CA1404在P/Invoke方法'ImpersonateValidUser(字符串,字符串,字符串,LogOnType,LogOnProvider,ImpersonationLevel)'调用GetLastWin32Error后立即调用GetLastError,但前一次调用'IDisposable.Dispose()'不是P/Invoke语句.将调用移动到GetLastWin32Error,以便它立即跟随相关的平台调用调用.

下面是简化的代码示例,其中的行完全在警告外观的位置进行了注释:

private static void Impersonate(string userName, string domain, string password, LogOnType logonType, LogOnProvider logonProvider, ImpersonationLevel impersonationLevel)
{
    var token = IntPtr.Zero;
    var tokenDuplicate = IntPtr.Zero;
    if (NativeMethods.RevertToSelf())
    {
        if (NativeMethods.LogonUser(userName, domain, password, (int)logonType, (int)logonProvider, ref token) != 0)
        {
            if (NativeMethods.DuplicateToken(token, (int)impersonationLevel, ref tokenDuplicate) != 0)
            {
                /* CA2000 */ using (var tempWindowsIdentity = new WindowsIdentity(tokenDuplicate))
                {
                    _impersonationContext = tempWindowsIdentity.Impersonate();
                    return;
                }
            }
        }
    }
    /* CA1404 */ var e = Marshal.GetLastWin32Error();
    throw new Win32Exception(e); …
Run Code Online (Sandbox Code Playgroud)

c# code-analysis

5
推荐指数
1
解决办法
545
查看次数

如何在AOSP中更改应用程序无响应(ANR)超时

如何更改AOSP源代码中的应用程序无响应(ANR)超时?默认超时为5秒,但该设置在何处以及如何更改?

android code-analysis android-source android-anr-dialog

5
推荐指数
1
解决办法
3814
查看次数

Visual Studio 2015代码分析C6386警告缓冲区溢出

我已经阅读了很多有关Visual Studio代码分析警告C8386的内容,但是无法弄清楚我的代码中的这个特定问题。我将其简化为以下小程序:

unsigned int nNumItems = 0;

int main()
{
    int *nWords=nullptr;
    unsigned int nTotal;

    nTotal = 3 + 2 * nNumItems;
    nWords = new int[nTotal];

    nWords[0] = 1;
    nWords[1] = 2; // this is line 18, warning C6386

    delete[] nWords;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

分析->运行代码分析->在解决方案中将给出以下警告:

file.cpp(18):警告C6386:写入'nWords'时缓冲区溢出:可写大小为'nTotal * 4'字节,但可能写入了'8'字节。

这是合法的吗?现在,如果我移动全局变量并将其设置为局部变量,警告将消失!

int main()
{
    unsigned int nNumItems = 0;
...
}
Run Code Online (Sandbox Code Playgroud)

但是我不能像完整的代码那样执行此操作,这是一个成员变量。

同样,如果将nTotal的定义移到 “ new int ”中,我也可以删除警告:

    nWords = new int[3 + 2 * nNumItems];
Run Code Online (Sandbox Code Playgroud)

但是我不能这样做,因为完整代码中的其他地方都引用了nWords。

这仅仅是Visual …

c++ code-analysis static-code-analysis visual-studio-2015

5
推荐指数
2
解决办法
2503
查看次数