问题标签 [static-code-analysis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1563 浏览

java - 对源代码、字节码、机器码等进行静态分析的权衡是什么?

对不同级别的代码执行静态分析的各种权衡是什么?例如对于 Java,为什么有人会对 Java 源代码、Jasmin代码和 Java 字节码进行静态分析?选择是否限制或扩展了能够进行的各种类型的分析?选择是否影响分析的正确性?谢谢。

0 投票
1 回答
1131 浏览

visual-studio-2010 - 通过流利的验证抑制 CA1062

我有一个流畅、可扩展的验证助手,例如:

它是可扩展的,因为 That 方法实际上是通用的 (That<T>) 并使用隐式类型来返回通用的 IAssertCondition<T> 对象。IsNotNull 实际上是一个扩展方法。

无论如何,使用这种方法验证传递给方法的参数的问题是我收到 CA1062 警告,指示我在使用参数之前验证参数,当然,我已经在这样做了。

我阅读了 Eric Smith 的帖子(此处)关于使用 ValidatedNotNullAttribute 来通知 FxCop 正在验证该参数,但我不知道如何使用我描述的流畅界面来完成此操作。

我有哪些选择,以便代码分析能够识别出上述语句满足要求并且不会出现警告?

0 投票
5 回答
5153 浏览

c# - 处理对象的代码分析友好方式

作为我们 Visual Studio 2010(主要是 C# 4.0)开发标准的一部分,我们启用了代码分析。当我审查最近提交的新项目代码时,我看到了大量

CA2000:Microsoft.Reliability:在方法“XYZ”中,对象“ABC”并未沿所有异常路径进行处理。在对对象“ABC”的所有引用超出范围之前调用 System.IDisposable.Dispose。

警告。问题是我所做的任何事情似乎都无法消除警告——而且我已经花了几个小时在网上搜索并尽我所能。

首先,让我明确一点,我不是在谈论放置一个简单的 using 块来正确处理局部变量——这不是问题。就我而言,当对象由方法返回或分配给方法中的另一个对象时,就会出现这些警告。

这是一个包含四个此类警告的代码示例:

我已经评论了出现警告的行。

我已尝试按照 MSDN 文章(此处)中的描述重构这两种 Create 方法,但仍然出现警告。

更新 我应该注意到 SomeObject 和 SomeOtherObject 都实现了 IDisposable。

此外,虽然对象初始化器可能是问题的一个组成部分,但请记住,初始化器与两个私有方法隔离,与 MainMethod 中的警告无关。

谁能告诉我如何正确实施这些方法来消除 CA2000 警告?

0 投票
2 回答
908 浏览

php - PHP静态代码分析工具,检测未捕获的异常?

PHP的静态代码分析工具似乎有很多,请您推荐一种,可以检测PHP代码中抛出的异常,但永远不会被捕获?(理论上可以停止PHP脚本的执行)。

我很高兴只看到像throw new SomeException()where SomeExceptionextends之类的东西Exception

我不是在寻找太复杂的东西——只是为了警告我,如果我从(你明白了)运行someFunctionThatCanThrow(因为里面有throw声明index.php),我会遇到麻烦。即使在运行时也不会发生。

谢谢。

0 投票
1 回答
2362 浏览

sonarqube - Sonar 2.9 不导入 SuppressionFilter

我正在尝试使用我的 checkstyle 规则 xml 在 Sonar 2.9 中创建新的规则配置文件。当我尝试导入配置了抑制过滤器的 checkstyle 规则文件时,声纳会给我以下消息:

我现在不关心 SuppressionCommentFilter,但是如何启用 SuppressionFilter?如果不可能,是否有任何其他方法可以具有类似的功能,从 Sonar 的特定检查中排除特定文件?

0 投票
4 回答
1425 浏览

c++ - 用于检测将 wchar_t* 传递给 BSTR 的静态代码分析

由于 aBSTR只是 atypedef对于wchar_t*我们的代码库有几个(很多?)地方,其中字符串文字被传递给期望 a 的方法,BSTR这可能会混淆编组器或任何试图使用任何BSTR特定方法的人(例如SysStringLen)。

有没有办法静态检测这种类型的滥用?

我尝试使用 VC10/Wall和静态代码分析Microsoft All Rules进行编译,但以下有问题的代码没有被它们中的任何一个标记。


更新:在试图破坏wtypes.h以检测这些类型的违规行为后,我已经放弃了。

我尝试了两条路径,这两条路径都可以使用上面的示例程序,但是一旦我尝试了一个真正的项目,它们就失败了。

  1. 创建一个名为的类BSTR,但由于 aVARIANT有 aBSTR作为联合成员,因此新类不能有任何构造函数或赋值运算符,这破坏了每个地方都NULL被视为 a BSTR。我尝试用NULL具有转换运算符的类型替换,但在添加了数十个新运算符(比较、转换等)后,我开始遇到模棱两可的调用并放弃了。
  2. 然后我尝试了@CashCow 和@Hans 建议的方式(制作BSTRtypedef一种类型的指针)。这也不起作用,在添加toBSTRfromBSTR方法并乱扔comutil.h ( _bstr_t) 和其他带有转换的地方之后,我终于到了编译器在 IDL 生成的头文件中窒息的地步(默认值被转换为文字宽字符串)。

简而言之,我已经放弃尝试自己实现这一目标,如果有人知道可以帮助我的代码分析工具,我会很高兴听到它。

0 投票
1 回答
402 浏览

visual-studio - 门控签入构建忽略源中的 [SuppressMessage]

我们希望拒绝违反我们自定义的静态代码规则的签入。因此,我们定义了一个 Gated Checkin 构建,其中“执行代码分析”设置为“AsConfigured”。

当我在本地构建解决方案时,使用为 Gated Check in 构建定义的相同配置和目标,没有错误。但是 Gated Checkin 构建似乎忽略了我们在源代码中定义的任何 [SuppressMessage] 属性,因此报告错误。

门控签入构建不会忽略 GlobalSuppressions 文件中定义的 [SuppressMessage] 属性。

其他人有这个问题吗?

0 投票
2 回答
315 浏览

c# - 哪个代码写得更好?

我在我们的工具上运行了一个静态代码分析工具,并查看了它的结果,下面的代码是它正在谈论的事情之一:

因此,我将其更改为下面的代码,并修复了该工具正在谈论的错误:

那么在您看来,您认为哪种编码风格更合适且不易出错?

谢谢

0 投票
1 回答
394 浏览

c++ - VS2010静态代码分析Bug?

好的,我很确定这只是由于 Visual Studio 中经常出现错误的静态代码分析器,但我认为更多的关注这不会有什么坏处。

我已经编写了自己的矢量风格容器集合。它们似乎工作正常,但我注意到来自 Visual Studio 静态代码分析器的以下警告:

警告 C6386:缓冲区溢出:访问“参数 1”,可写大小为“newspace*4”字节,但可能会写入“4194240”字节

上述警告出现在以下代码(memcpy)的最后一行,并突出显示所有前面的行。这个特定的向量类可以拥有的所有可能的类型都是 POD。 mSpace包含向量中可用内存可以容纳的项目数, mSize包含当前项目数。 mDynamic指向当前由向量管理的内存块。

我一直看着这个,直到我的眼睛流血(好吧,几乎)并且看不出分析仪为什么会产生这个警告。我在其他地方也看到了同样的警告,它的值也相当奇怪,4194240,这就是为什么我假设它是分析器中的另一个错误。

谁能确认这是分析器中的一个已知错误(对连接的快速搜索没有提供任何结果),或者我的代码中是否有一个我没有看到的明显错误?

0 投票
4 回答
12160 浏览

c++ - 非托管 C++ 代码的代码度量分析

有谁知道一个免费工具,类似于 Visual Studio 2010 中内置的托管代码,可以分析非托管 MFC C++ 代码并给出指标(代码行、依赖关系或耦合等)?

我在谷歌上搜索了一段时间,但真的找不到任何有用的东西。万分感谢!