是否有PHP文件的静态代码分析器?二进制本身可以检查语法错误,但我正在寻找更多的东西,比如未使用的变量赋值,分配到的数组,而不是先被初始化,以及可能的代码样式警告.开源程序将是首选,但如果强烈建议,我们可能会说服公司支付费用.
哪些工具可用于针对C#代码进行静态分析?我知道FxCop和StyleCop.还有其他人吗?我之前遇到过NStatic,但是它一直处于开发阶段,看起来像是永远的 - 它看起来很漂亮,看起来很少见,所以如果它能看到光明的一天会很好.
沿着这些相同的路线(这主要是我对静态分析的兴趣),用于测试多线程问题(死锁,竞争条件等)代码的工具似乎也有点稀缺.刚出现了Typemock Racer,所以我会看着它.除此之外还有什么?
关于您使用的工具的现实意见表示赞赏.
代码如下所示:
namespace Test
{
public interface IMyClass
{
List<IMyClass> GetList();
}
public class MyClass : IMyClass
{
public List<IMyClass> GetList()
{
return new List<IMyClass>();
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行代码分析时,我得到以下建议.
警告3 CA1002:Microsoft.Design:更改'IMyClass.GetList()'中的'List'以使用Collection,ReadOnlyCollection或KeyedCollection
我应该如何解决这个问题以及这里有什么好的做法?
我在Eclipse中使用PyDev创建了一个Python项目,PyDev不断为我的代码生成错误的错误.我有一个settings定义settings对象的模块.我在模块中导入它b并分配一个属性:
from settings import settings
settings.main = object()
Run Code Online (Sandbox Code Playgroud)
在我的一些代码中 - 但不是全部代码,如下所示:
from settings import settings
print settings.main
Run Code Online (Sandbox Code Playgroud)
...在Eclipse代码错误窗格中生成"来自import:main的未定义变量"消息,即使代码运行没有问题.我怎样才能纠正这些?
在搜索Python项目时,我发现了几行注释# noqa.
import sys
sys.path.append(r'C:\dev')
import some_module # noqa
Run Code Online (Sandbox Code Playgroud)
noqaPython的意思是什么?它只针对Python吗?
任何人都可以告诉我如何从以下代码中删除所有CA2202警告?
public static byte[] Encrypt(string data, byte[] key, byte[] iv)
{
using(MemoryStream memoryStream = new MemoryStream())
{
using (DESCryptoServiceProvider cryptograph = new DESCryptoServiceProvider())
{
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptograph.CreateEncryptor(key, iv), CryptoStreamMode.Write))
{
using(StreamWriter streamWriter = new StreamWriter(cryptoStream))
{
streamWriter.Write(data);
}
}
}
return memoryStream.ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
警告7 CA2202:Microsoft.Usage:对象'cryptoStream'可以在方法'CryptoServices.Encrypt(string,byte [],byte [])'中多次处理.为避免生成System.ObjectDisposedException,不应在对象上多次调用Dispose:Lines:34
警告8 CA2202:Microsoft.Usage:对象'memoryStream'可以在方法'CryptoServices.Encrypt(string,byte [],byte [])'中多次处理.为避免生成System.ObjectDisposedException,不应在对象上多次调用Dispose:Lines:34,37
您需要Visual Studio代码分析才能看到这些警告(这些不是c#编译器警告).
深入研究Python的源代码后,我发现它维护了一个PyInt_Objects 数组,范围从int(-5)到int(256)(@src/Objects/intobject.c)
一个小实验证明了这一点:
>>> a = 1
>>> b = 1
>>> a is b
True
>>> a = 257
>>> b = 257
>>> a is b
False
Run Code Online (Sandbox Code Playgroud)
但是如果我在py文件中一起运行这些代码(或者用分号连接它们),结果会有所不同:
>>> a = 257; b = 257; a is b
True
Run Code Online (Sandbox Code Playgroud)
我很好奇为什么它们仍然是同一个对象,所以我深入研究语法树和编译器,我想出了一个下面列出的调用层次结构:
PyRun_FileExFlags()
mod = PyParser_ASTFromFile()
node *n = PyParser_ParseFileFlagsEx() //source to cst
parsetoke()
ps = PyParser_New()
for (;;)
PyTokenizer_Get()
PyParser_AddToken(ps, ...)
mod = PyAST_FromNode(n, ...) //cst to ast
run_mod(mod, ...)
co = PyAST_Compile(mod, ...) //ast to CFG …Run Code Online (Sandbox Code Playgroud) 我在Visual Studio的项目中使用了以前的StyleCop + FxCop.但现在我正在测试Visual Studio代码分析工具,它更容易集成到MSBuild中,我发现这个工具分析了FxCop和StyleCop的一些规则.
这个工具是FxCop和StyleCop的完全替代品还是只是实现了一些规则?
您是否有任何可用的工具来简化理解C/C++代码的任务?我们刚刚继承了其他人编写的大量软件,我们需要快速掌握它.有关可能简化此任务的工具的任何建议吗?
在Visual Studio 2013中,我使用"代码分析"窗口向开发和管理团队提供报告.
在Visual Studio 2015 Enterprise RTM中,这些错误已返回到错误窗口,我不再只能查看单个项目的CA问题,或按类型过滤它们.
有没有办法将代码分析窗口带回来?