问题标签 [static-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.
javascript - 有没有 JavaScript 静态分析工具?
当我做一些愚蠢的事情(比如变量名的拼写错误)时,我习惯于让我的编译器抱怨,但 JavaScript 有让这个通过的习惯。
有 JavaScript 的静态分析工具吗?
asp.net-mvc - 有人为 ASP.NET MVC 应用程序的静态分析编写了工具吗?
有没有人编写过一个工具来对 ASP.NET MVC 应用程序进行静态分析?
免责声明:我不确定我真正想要的是静态分析——它只是我能想到的最接近的术语。
我想要的是获得所有控制器的列表,我的操作,显示它们是响应 GET 还是 POST,它们的缓存设置是什么等。
我相信您可以继续进行下去 - 并继续解决更高级的问题,例如是否每个操作实际上都可以通过路线访问。
如果没有人这样做——这是人们认为有用的东西吗?它还应该做什么?
c - 这真的是缓冲区溢出吗?
我们使用的静态分析工具将类似于以下的 C 代码标记为严重缓冲区溢出。
该工具的错误信息是: Buffer Overflow (Array Index Out of Bounds): The array 'buf' size is 1. Array 'buf' may use the 0..64 index。
这是合法的吗?将字符数组分配给空字符串是否真的导致其长度减少到单个字节,就好像它被定义为一样char buf [] = "";
?
objective-c - Code linting for Objective C
Are there any code linting tools for ObjectiveC?
python - 是否需要“使用严格”的 Python 编译器?
Python存在静态分析工具,但编译时检查往往与Python 所拥护的运行时绑定理念截然相反。可以使用静态分析工具包装标准 Python 解释器来强制执行一些“使用严格”类的约束,但我们没有看到这种东西被广泛采用。
Python 是否有某些东西使“使用严格”行为变得不必要或特别不受欢迎?
或者,尽管 Perl 被广泛采用,但“使用严格”行为是否不必要?
注意:“必要”是指“实际上必要”,而不是绝对必要。显然你可以不使用“use strict”来编写 Perl,但是(据我所见)大多数 Perl 程序员确实使用它。
注意:Python 解释器包装器不需要类似“use strict”的约束——您可以使用类似于“use strict”的伪编译指示,普通解释器会忽略它。我不是在谈论添加语言级别的功能。
更新:根据评论解释 Perl 中“使用严格”的作用。(官方文档的链接在第一段。)
“use strict”指令具有三个不同的组件,其中只有两个非常有趣:
use strict vars:静态检查程序中词法范围的变量使用情况。(请记住,在 Python 中,基本上只有
global
作用域和local
作用域)。许多 Python linter 会检查这类事情。因为这是他们唯一可以做的静态分析,所以 linter 假设你使用简单的词法作用域,并警告你在这种意义上看起来错误的事情,直到你告诉他们闭嘴。IE如果您没有对命名空间做任何花哨的事情,这对于检查拼写错误很有用。
use strict refs:防止符号命名空间取消引用。Python 最接近的类比是使用
locals()
和globals()
进行符号绑定和标识符查找。使用严格的潜艇:Python 中没有真正的模拟。
c++ - C++ 静态代码分析工具值得吗?
我们的管理层最近一直在与一些销售 C++静态分析工具的人交谈。当然,销售人员说他们会发现很多错误,但我对此表示怀疑。
这些工具在现实世界中如何工作?他们能找到真正的错误吗?它们是否帮助更多初级程序员学习?
他们值得麻烦吗?
code-analysis - 查找依赖于 .NET 3.5 SP1 的代码
有没有办法运行某种代码分析来查找可以使用 .NET 3.5 SP1 而不是 3.5 RTM 编译的代码?
FxCop 适用于随 SP1 引入的程序集,但对于仅调用新方法和属性的代码,它不会检测到这种用法。
c - 如何让夹板忽略我声明变量的位置?
你知道我怎样才能让夹板忽略我声明变量的地方吗?
我知道老派 c 告诉你在每个函数的开头声明变量,但由于我是一个坏人,我喜欢在我使用它们的地方声明东西。一个很好的例子是把 int i; 就在 for(i=0;...) 之前。
我们举一个非常简单的例子
这里夹板和大多数旧的 c 编译器都想移动 int i; 向上一行,或将 {} 放在声明和 for 循环周围。
现在的问题是,我如何关闭此检查?但是保持其他检查好?
谢谢约翰
注意 1:我已经使用 gcc 警告(见下文)作为第一道防线,而 valgrind 作为第二道防线。但是我正在考虑将夹板添加到可以控制我的愚蠢的事物列表中;-) 但是这个检查很烦人,
我使用的 gcc 警告: -Wall -W -Wextra -Wconversion -Wshadow -Wcast-qual -Wwrite-strings -Werror
注意 2:我知道这种不良行为可能带来的潜在可移植性问题。但我觉得它增加了可读性,也就是不需要上下跳跃来搜索这种类型的 off 声明更有价值(我们可以在另一个线程中讨论这个)。
更新:更多信息,我将上面的代码放在一个名为 main.c 的文件中。使用的平台是 Ubuntu 8.04 和 gvim 作为编辑器,这是我运行时 splint 的输出:
这又提出了两个我以前没有考虑过的问题。
“与当前值冗余”,当前值是多少?
为什么它是解析错误而不是警告?
更新::有可能修补夹板来支持这个问题,我还没有尝试过,但我认为这是解决方案。
.net - 弃用某些方法/类型
为了防止使用某些成员(或类型),有一种方法可以将它们标记为已过时(有时将来会完全删除它们)。
但是有没有办法弃用已编译的第三方程序集的成员(或类型)?或者,至少,在使用它们时确保(或发出警告)?