标签: static-analysis

javax.annotation:@Nullable vs @CheckForNull

两者有什么区别?两者似乎都意味着该值可以为null并且应该相应地处理,即检查为null.

更新: 上面的两个注释是JSR-305/FindBugs的一部分:http: //findbugs.sourceforge.net/manual/annotations.html

java annotations static-analysis findbugs

43
推荐指数
3
解决办法
6万
查看次数

C#/ .NET分析工具查找竞争条件/死锁

有没有一个工具可以分析.NET代码并找到竞争条件?

我有一些代码,它有一个公共静态属性,可以获取或创建一个私有静态字段.它还有一个公共静态方法,将此字段设置为null(...是的,我知道!..)

由于这些方法中没有任何一种方法可以锁定,因此可以肯定的是,未来的事情将会出现严重错误.我需要一个工具,它递归地遍历调用这些方法之一的东西,看看是否有任何东西在另一个线程上产生.

我正在寻找一个工具或者一个nDepend SQL脚本(如果可能的话).

.net c# multithreading static-analysis ndepend

40
推荐指数
1
解决办法
2万
查看次数

带有java.util.concurrent.locks.ReadWriteLock的@GuardedBy注释

注释受保护的字段的正确/首选方法是什么,ReadWriteLock以便像FindBugs这样的工具可以利用注释?应该ReadWriteLock简单地在@GuardedBy注释中写下名称.是否有理由在@GuardedBy注释中写入只读锁的名称,或只写写锁?不FindBugs的,或其他工具,甚至支持ReadWriteLock@GuardedBy

java concurrency annotations static-analysis findbugs

40
推荐指数
1
解决办法
3万
查看次数

我在哪里可以找到一个积极开发的Ruby工具?

我编写的大多数代码都是在Ruby中,每隔一段时间,我会做一些错字,只会在一段时间后被捕获.当我的脚本运行很长的任务时,这很烦人,并返回发现我有一个错字.

是否有一个积极开发的Ruby工具lint工具可以帮助我克服这个问题?是否可以在一个使用大量源文件的系统中使用它,其中一些是动态加载的?

以此片段为例:

a = 20
b = 30
puts c
Run Code Online (Sandbox Code Playgroud)

要获得赏金,请告诉我一个工具,它将检测c变量为未创建/未定义.

ruby code-analysis static-analysis lint

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

如何用gcc确定嵌入式系统中的最大堆栈使用量?

我正在为嵌入式系统编写启动代码 - 在跳转到main()函数之前加载初始堆栈指针的代码 - 我需要告诉它我的应用程序将使用多少字节的堆栈(或更大的,保守估计).

我被告知gcc编译器现在有一个-fstack-usage选项和-fcallgraph-info选项,它可以以某种方式用于静态计算我的"最大堆栈使用率".(" Botcazou,Comar和Hainque的编译时堆栈需求分析与GCC").

奈杰尔琼斯说,递归在嵌入式系统中是一个非常糟糕的主意("计算你的堆栈大小"2009),所以我一直小心不要在这段代码中做任何相互递归的函数.

另外,我确保我的中断处理程序都没有重新启用中断,直到它们最终从中断返回指令,所以我不需要担心重入中断处理程序.

如果没有递归或重入中断处理程序,则应该可以静态地确定最大堆栈使用情况.(所以大多数答案如何确定最大堆栈使用量?不适用).我的理解是我(或者最好是我的PC上的一些代码在每次重建可执行文件时自动运行)首先找到每个中断处理程序的最大堆栈深度,当它没有被更高优先级的中断中断时,最大值当main()函数没有被中断时,它的堆栈深度.然后我将它们全部添加到找到总(最坏情况)最大堆栈深度.当main()后台任务在被最低优先级中断中断时处于最大深度时发生(在我的嵌入式系统中),并且当中断被下一个最低优先级中断时,该中断处于其最大深度中断,等等.

我正在使用YAGARTO和gcc 4.6.0来编译LM3S1968 ARM Cortex-M3的代码.

那么如何使用-fstack-usage选项和-fcallgraph-info选项与gcc一起计算最大堆栈深度?或者是否有更好的方法来确定最大堆栈使用量?

(有关针对Keil编译器的几乎相同问题,请参阅如何确定嵌入式系统中的最大堆栈使用情况?)

embedded gcc code-analysis static-analysis

38
推荐指数
4
解决办法
2万
查看次数

误报:前提是多余的

一旦警告级别达到第二级或更高级别,为什么我会在这个简单的代码示例中收到以下警告?

public int Foo(int a)
{
    if (a >= 0) throw new ArgumentException("a should be negative", "a");
    Contract.EndContractBlock();
    return a;
}
Run Code Online (Sandbox Code Playgroud)

CodeContracts:建议要求:此前提条件是多余的:请考虑将其删除.您是否将结构值与null进行比较?

显然,整数可以是负数,因此前提条件几乎不是多余的,为什么我会收到此警告?

编辑:这是ILSpy在查看exe时为创建的函数显示的内容:

public int Foo(int a)
{
    if (a >= 0)
    {
        ContractHelper.RaiseContractFailedEvent(ContractFailureKind.Precondition, null, "a < 0", null);
        throw new ArgumentException("a should be negative", "a");
    }
    return a;
}
Run Code Online (Sandbox Code Playgroud)

代码合同设置

.net c# static-analysis code-contracts visual-studio-2013

37
推荐指数
1
解决办法
1400
查看次数

是否有适用于Delphi/Pascal的静态代码分析工具?

是否有适用于Delphi/Pascal的静态代码分析工具?

我已经看到了很多C++和.NET的选项,但Delphi/Pascal没有.

理想情况下可以集成到持续集成系统中.

delphi pascal static-analysis

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

静态Actionscript代码分析的可能性

我想直观地看到类,函数和变量/属性,依赖性,如NDepend,但是对于ActionScript 2或AS3代码.

任何计划或想法?

以某种方式使用doxygen

的FlexUnit?

actionscript code-analysis static-analysis actionscript-3

34
推荐指数
2
解决办法
7536
查看次数

如果Code Contracts静态检查器能够检查算术绑定吗?

(也发布在MSDN论坛上 - 但据我所知,这并没有太大的流量.)

我一直试图提供一个Assert和的例子Assume.这是我得到的代码:

public static int RollDice(Random rng)
{
    Contract.Ensures(Contract.Result<int>() >= 2 &&
                     Contract.Result<int>() <= 12);

    if (rng == null)
    {
        rng = new Random();
    }
    Contract.Assert(rng != null);

    int firstRoll = rng.Next(1, 7);
    Contract.Assume(firstRoll >= 1 && firstRoll <= 6);

    int secondRoll = rng.Next(1, 7);
    Contract.Assume(secondRoll >= 1 && secondRoll <= 6);

    return firstRoll + secondRoll;
}
Run Code Online (Sandbox Code Playgroud)

(关于能够传入空引用而不是现有Random引用的业务当然是纯粹的教学法.)

我曾希望如果检查员知道firstRoll并且secondRoll每个都在范围内[1, 6],那么就可以计算出总和在范围内[2, 12].

这是一个无理的希望吗?我意识到这是一项棘手的事情,确切地说明可能会发生什么......但我希望检查器足够聪明:)

如果现在不支持这个,那么这里是否有人知道它是否可能在近期未来得到支持? …

math static-analysis code-contracts

34
推荐指数
1
解决办法
1327
查看次数

如何关闭JSLint缩进警告?

我发现JSLint会产生很多关于表单的警告:

Expected 'foo' to have an indentation at X instead at Y.
Run Code Online (Sandbox Code Playgroud)

所述的JSLint选项文档描述了一种indent识别表示的空间缩进的每个级别的量的数值选项.这个选项允许我说每个级别的缩进使用2个空格.我只是在我的JavaScript文件的顶部写这样的东西:

/*jslint indent: 2 */
Run Code Online (Sandbox Code Playgroud)

太好了.现在JSLint知道每个缩进级别缩进多少,但JSLint似乎是硬编码来决定每行应该具有什么级别的缩进.

假设我想以不同于JSLint规定的方式缩进我的代码.我可以使用一些JSLint选项吗?如果没有,我至少可以关闭缩进警告吗?我试过了:

/*jslint indent: false */
Run Code Online (Sandbox Code Playgroud)

但这并没有导致缩进警告被忽略; 它导致了JSLint错误.

formatting static-analysis jslint

34
推荐指数
1
解决办法
2万
查看次数