我有传统的C#代码,我使用Visual Studio 2008年.我要寻找一个工具,排序的代码分析工具,会对我说哪一个类中未使用,也有一些其他有用的信息,可能对代码优化非常有用.
如果有确切的重复,请注明.
谢谢.
我在visual studio 2008中有一些c#项目,我想得到所有方法调用的图形(map?table?).我希望它是静态的,而不是运行时(如"调用堆栈"); 任何功能 - 谁叫它,多少次等等
我可以在方法之后查找所有引用方法,并将每个调用复制到表或Graphviz文件,但这将花费几个小时.是否有可以提供帮助的自动工具或插件?
我必须说我真的很喜欢VS 2010的新代码分析,我的代码中有很多区域我没有使用CultureInfo.InvariantCulture,代码分析让我对此感到温暖.
我很确定我想使用CultureInfo.InvariantCulture代码分析检测到它在Convert.ToString操作中丢失的地方.
反正有没有让VS自动修复这种类型的警告?
我最近将我的项目从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吗?
我想知道什么应该是一步一步的分析方式,以明确的问题搞清楚可能的设计模式,可以适合在溶液中.
您可以推荐任何指导?
谢谢
我需要一个可以用来更好地理解大型C项目的工具.我希望能够看到各种C模块之间的关系,以及调用什么,最常用的函数,使用的标题等等.
我在这里和谷歌搜索过,但是所有的源代码分析工具似乎都能给你一些我不感兴趣的代码行和其他指标.我只是希望得到一个关于事物结构的高级视图.在跳入代码之前互连.
有这样的事吗?
我看过这些,但它们似乎没有做我想要的:源代码工具
自从张贴这个以来我尝试了Doxygen,它似乎给了我一些我需要的东西.还有其他人?
这里有很多关于SO的相关问题,但他们都要求编写一个程序来计算任意算法的复杂性(这显然是不可判定的).我愿意对输入做出以下限制:
问题是,是否可以编写程序来通过静态分析来计算这种算法的时间复杂度?如果输入算法未终止,则程序行为未定义(可能会崩溃,返回谎言或无法终止).
big-o computer-science code-analysis halting-problem time-complexity
我想了解为什么我的代码中会出现两个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) 如何更改AOSP源代码中的应用程序无响应(ANR)超时?默认超时为5秒,但该设置在何处以及如何更改?
我已经阅读了很多有关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 …