我已经使用PC-Lint和MPLAB几年了,它确实非常有用.MPLAB即将改为基于netbeans的IDE,我没有为PC-Lint找到任何netbeans插件.
有没有人有PC-Lint与netbeans或MPLAB X IDE集成的经验?
TIA
有时,函数在某些情况下返回null,但是使用它们的人却没有意识到它,因此NPE是不可避免的.
例如(这只是一个例子,显示我在说什么):
public class Test
{
public static void main(final String[] args)
{
final int t=0;
System.out.println("result:"+foo(t).toString()); // no warning here...
}
public static String foo(final int t)
{
if(t>0)
return "positive";
else return null;
}
}
Run Code Online (Sandbox Code Playgroud)
Eclipse没有警告这样的事情,它甚至没有在设置上.
只有在没有涉及功能时才能检测到这些问题(参见下面的编辑).
不仅如此,我找不到一个注释,说明返回的值可以为null.我认为它有相反的结果.
所以我认为既然Eclipse没有一些检查(并且没问题),我可以使用替代静态代码分析工具,如FindBugs和CodePro Analytix.两者都未能找到这样的错误.
我试图联系这两个项目,但还没有得到任何答案.对于CodePro,我甚至不确定我是否做得对...事实上,我认为这个项目已经停止(2010年的最新更新......).
是否有任何工具可以帮助避免此类错误?
编辑:因为许多人认为只需更改代码就可以解决这个问题,所以考虑在一个庞大的团队中工作,有些人可能会忘记它(每个人都会犯错误).或者你甚至可能正在开发一个使用SDK(甚至可能是封闭源代码)的项目,它可以在某些情况下返回null,但是没有记录,因为SDK的创建者忘记了它.
无论你作为程序员有多好,都会发生这样的事情.
我要求的是通过让日食帮助来克服这个问题.它应该能够警告我,至少在我写在这里的基本例子上.
Eclipse应该能够进行这样的检查,就像它可以警告我这个例子一样:
int t=0;
--t;
String s="s";
if(t<0)
s=null;
System.out.println(s.toString()); // here you will get a warning
Run Code Online (Sandbox Code Playgroud)
在Eclipse的设置上启用它时可以检测到这种情况:
Java-> Compiler-> Errors/Warning-> Potential …Run Code Online (Sandbox Code Playgroud) java eclipse nullpointerexception eclipse-jdt static-code-analysis
我正在使用cppcheck进行静态分析.为了加快审查过程,我想设置cppcheck来查找一些自定义规则,例如检查geter函数是否定义为const.
如果有人有为cppcheck编写自定义规则的经验,那么你能提供一些编写自定义规则的例子吗?
PS我已经做了一些研究,找到了一个工具,可以让我编写自定义规则,让审查过程更快.我找到了关于这个主题的这些链接
在 Python 世界中,最广泛使用的静态代码分析工具之一,pylint有一个特殊的 check,可以检测注释和文档字符串中的拼写错误。
有没有办法使用静态代码分析来检测 JavaScript 代码中的拼写错误?
为了使问题更具体,这是我想引起警告的示例代码:
// enter credntials and log in
scope.loginPage.logIn(browser.params.regularUser.login, browser.params.regularUser.password);
Run Code Online (Sandbox Code Playgroud)
这里credntials拼错了。
最近cppcheck在一些C代码中引发了一个错误,它具有以下结构:
((void)(value_prev = value), value = new_value())
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,这可以拆分为2行,但是在某些情况下,这在单个语句中很有用.
在实践中,我发现这适用于流行的编译器(GCC/Clang/MSVC),它们不会发出任何警告(即使警告级别设置为最高).
示例代码:
#include <stdio.h>
int get_next(int i);
int main() {
int i = 0, i_prev = 10;
do {
printf("%d\n", i);
} while ((void)(i_prev = i),
(i = get_next(i)) != 10);
}
Run Code Online (Sandbox Code Playgroud)
CppCheck 1.73 (撰写本文时的最新版本)给出了以下代码的错误:
(error) Expression '(void)(i_prev=i),(i=get_next(i))!=10'
depends on order of evaluation of side effects`
Run Code Online (Sandbox Code Playgroud)
虽然代码可以更改为安静警告,但订单是否真的未定义?
我在visual studio 2008中有一些c#项目,我想得到所有方法调用的图形(map?table?).我希望它是静态的,而不是运行时(如"调用堆栈"); 任何功能 - 谁叫它,多少次等等
我可以在方法之后查找所有引用方法,并将每个调用复制到表或Graphviz文件,但这将花费几个小时.是否有可以提供帮助的自动工具或插件?
我正在分析一些旧代码。它大约是80.000行的旧plsql代码。乍看之下,源中有很多重复项需要删除。而是不用做diff的手册并查看每个文件,那里必须有一些工具/命令行配置来检测源代码的重复行。
我的目标是就源代码重写的最小规模以及该程序中捕获的实际知识量做出有根据的猜测。我写了一些基本的静态代码分析器来查找每个文件中的控制语句IF ELSE FOR等和函数。但是重复的代码仍然需要从我的统计信息中删除。
我真的很喜欢VS11的新内置功能来查找"代码克隆",但似乎没有任何方法可以配置它.
一个例子只显示5行或更多的确切克隆.
现在它给出了精确,强,中和弱匹配,看起来它们是10行或更多.如果我可以配置它,它将有助于克隆的工作,它会找到我确信已经多年来切割和粘贴的那些小方法.
更新 以下是Release Preview版本文档中有关如何配置排除生成文件的能力的说明
从代码克隆分析中排除T4模板生成的文件
将模板放在Visual Studio项目的子目录中.将其命名为GeneratedFiles.
将新文本文件添加到项目中,并将其名称和扩展名更改为t4Exclusions.codeclonesettings
更改文件的内容,如下所示:
<CodeCloneSettings> <Exclusions> <File>GeneratedFiles*的.cs</File> </Exclusions> </CodeCloneSettings>
更新 - 08/27/2012我在Code Clone文档中找到了这个,它在早期版本中没有.这是找到长度小于10行的克隆的一种方法.
查找特定代码片段的克隆
1.突出显示方法或get/set定义中的代码片段.
注 - 您可以找到语句的克隆,但不能查找字段,方法或属性签名等声明.
2.在片段的快捷菜单上,选择"在解决方案中查找匹配的克隆".
当您想知道解决方案中是否存在类似的方法或片段时,请使用此方法.
您可以为Python推荐哪种有用的静态代码分析.我相信它们对于重构代码很有用.我知道
有静态呼叫分析仪吗?如果我想编制一个自定义的,这将是最简单的方法?
你能想到其他什么类型的静态代码检查?或者甚至可能像ABC这样的Python魔术?
编辑:我发现使用http://docs.python.org/3.3/library/ast.html或甚至http://www.astroid.org/可以用来编程一些自定义解析器.然后可以使用graphviz来可视化甚至是用于UML图的PlantUML.
静态CA使解决方案构建变得更慢.在我的情况下>比没有CA慢2倍.我们可以禁用它,但这是失去力量的坏决定.所以,我们能做些什么?
首先让我们看看CA的工作原理.
你建立解决方案.在每个项目构建之后,msbuild编译目标fxcopcmd.exe被调用,其中包含应该分析的程序集的路径.fxcopcmd.生成由VS(或可能是输出流)使用的CA xml日志.fxcopcmd.exe加载程序集(快速)并同步分析它,因此只加载一个CPU而3个(在我的情况下)什么都不做.只有在CA完成后,才会构建项目依赖关系链中的下一个项目.
因此,CA中的弱点是我们可以改进它 - 强制它并行工作以使用所有CPU.
我看到这样的解决方案
要制作将从MSBUILD中获取参数的假fxcopcmd.exe,请记住它并立即向msbuild报告一切正常并且没有错误(通过CA xml.log或成功文件,或者可能是流..).所以MSBUILD将构建下一个项目,那时我们将使用保存的参数调用真正的fxcopcmd.exe ...如果MSBUILD将在下一个项目中调用fxcopcmd.exe - 我们将再次调用fxcopcmd.exe ...所以会有很少有加载所有CPU的进程.真正的fxcopcmd.exe完成后我们可以调用我们的MSBUILD目标,它将从microsoft.common.targtets只调用CA目标而没有编译,我们的假fxcopcmd.exe会立即报告结果(CA在那时完成,我们有日志)到MSBUILD-VS.
你怎么看?这会加速CA吗?为什么Microsoft没有在CA中创建这样的人员并且只使用一个CPU?
.net msbuild code-analysis visual-studio static-code-analysis
c ×2
cppcheck ×2
.net ×1
automation ×1
c# ×1
c++ ×1
comments ×1
debugging ×1
duplicates ×1
eclipse ×1
eclipse-jdt ×1
eslint ×1
java ×1
javascript ×1
jshint ×1
lint ×1
mplab ×1
msbuild ×1
netbeans ×1
plsql ×1
python ×1
refactoring ×1