static-analysis相关内容

如何使用 Clang 查找所有成员字段读/写?

给定一个 C++ 源代码,我想找到每个函数写入和读取的类字段.使用 Clang 前端执行此操作的最佳方法是什么? (我不是要求对所有步骤进行详细解释;但是,如果能找到一个有效解决方案的起点会很棒.) 到目前为止,我尝试使用 RecursiveASTVisitor 解析语句,但是很难跟踪节点连接.另外,我不知道如何跟踪如下内容: int&x = m_int_field;x++; 这显 ..
发布时间:2021-11-26 17:55:48 C/C++开发

如何输出使用ANTLR构建的AST?

我正在为 C 制作一个静态分析器.我已经使用 ANTLR 完成了词法分析器和解析器,其中生成了 Java 代码. ANTLR 是否通过 options {output=AST;} 自动为我们构建 AST?还是我必须自己做树?如果是,那么如何吐出该 AST 上的节点? 我目前认为该 AST 上的节点将用于制作 SSA,然后进行数据流分析以制作静态分析器.我在正确的道路上吗? 解决方 ..
发布时间:2021-11-26 17:37:16 其他开发

javac数据流分析的奇怪误报

我有以下形式的代码: class 测试 {私人最终 A t;公共测试(){为了 ( ... : ... ) {最终 A u = 空;}t = 新 A();}私有类 A {}} 编译器说: 变量 t 可能已经被赋值 有趣的是,如果我对循环执行以下任何更改,它就会起作用! 将循环的内容更改为A u = null 移除循环(但保持final A u = null;) 用经典的计数循环替 ..
发布时间:2021-11-22 16:43:30 Java Web开发

在侦听器中使用 ParserRuleContext 遍历令牌 - ANTLR4

在使用侦听器迭代令牌时,我想知道如何使用 ParserRuleContext 来查看令牌流中的下一个令牌或接下来的几个令牌? 在下面的代码中,我试图查看当前令牌之后直到 EOF 的所有令牌: @Override公共无效输入分号(JavaParser.SemicolonContext ctx){令牌tok,semiColon = ctx.getStart();int currentIndex ..
发布时间:2021-11-11 04:06:34 其他开发

在侦听器中使用 ParserRuleContext 遍历令牌 - ANTLR4

在使用侦听器迭代令牌时,我想知道如何使用 ParserRuleContext 来查看令牌流中的下一个令牌或接下来的几个令牌? 在下面的代码中,我试图查看当前令牌之后直到 EOF 的所有令牌: @Override公共无效输入分号(JavaParser.SemicolonContext ctx){令牌tok,semiColon = ctx.getStart();int currentIndex ..
发布时间:2021-11-11 03:48:43 其他开发

如何输出使用ANTLR构建的AST?

我正在为 C 制作一个静态分析器.我已经使用 ANTLR 完成了词法分析器和解析器,其中生成了 Java 代码. ANTLR 是否通过 options {output=AST;} 自动为我们构建 AST?还是我必须自己做树?如果是,那么如何吐出该 AST 上的节点? 我目前认为该 AST 上的节点将用于制作 SSA,然后进行数据流分析以制作静态分析器.我在正确的道路上吗? 解决方 ..
发布时间:2021-11-11 03:32:20 其他开发

对于 FindBugs,jar305.jar 中的注释是否应该优于 annotation.jar 中的类似注释?

在 FindBugs 发行版中,annotations.jar 不是 jsr305.jar 的子集.但是,几个注释似乎是重复的(完全或非常接近).如果可以选择,我是否应该更喜欢 jsr305.jar 中的注释? 请注意,我不只是想知道使用来自 jsr305.jar 的注释会“更好",因为它们代表一个标准.相反,如果我更喜欢特定注释的 jsr305.jar 版本,我想知道 FindBugs 工 ..
发布时间:2021-11-10 22:45:00 其他开发

javax.annotation: @Nullable vs @CheckForNull

两者有什么区别?两者似乎都意味着该值可能为空,应该相应地进行处理,即检查是否为空. 更新:上面的两个注释是 JSR-305/FindBugs 的一部分:http://findbugs.sourceforge.net/manual/annotations.html 解决方案 我认为从您添加的链接中可以很清楚地看出:如果您使用 @CheckForNull 并且使用该值的代码没有检查 nu ..
发布时间:2021-11-10 22:36:31 其他开发

Java 9 的 JSR-305 注释替换

到目前为止,我们一直在使用 Findbugs JSR-305 注释 (com.google.code.findbugs:jsr305),包括工具支持(Sonar、Eclipse、Findbugs 等)在内的一切都运行良好. 然而,我们的理解是 Java 9 中的 Jigsaw 将破坏 JSR-305 注释(不允许在两个模块中使用一个包).这在 JavaOne 2015 上得到了证实.Orac ..
发布时间:2021-11-10 22:18:25 其他开发

是否有可能创建一个“正数"?输入斯威夫特?

对不起,如果这是一个愚蠢的问题,但我想知道 Swift 中是否有一种方法可以创建一种类型,该类型专门保存严格大于零的数字,并且在编译时强制执行值的“正数". 例如,我可以以某种方式编写代码吗 funcdivide(x: PositiveNumber, y: PositiveNumber){返回 x/y} 这样 divide(1, 3) 有效但 divide(1, 0) 不会编译? ..
发布时间:2021-08-30 18:31:36 其他开发

Visual Studio 2013 静态代码分析 - 它有多可靠?

我正在尝试探索 VS 2013 中的静态代码分析选项.我在下面写了非常简单的代码 int main(){国际a, b;//找到未使用的变量std::cout >一种;int* i = 新整数;//分析没有发现这个内存泄漏//删除我;//i = NULL;} 当我在上面的块上运行代码分析时,我希望它找到 int* i = new int; 并警告内存泄漏 ..
发布时间:2021-08-30 18:31:33 其他开发

静态分析和符号执行中的错误检测

静态分析(例如编译器)可以检测到哪些类型的错误而符号执行不能检测到哪些错误?以及符号执行可以检测到静态分析无法检测到的错误类型是什么?例如符号执行可以检测语法错误吗? 解决方案 简而言之,静态分析能够发现编码问题,例如不良做法.例如,如果您(不必要地)将类字段声明为公共字段,静态分析工具可能会警告您应该将此类字段声明为私有字段.然而,“最干净"的代码不一定没有错误.尽管在某些代码中没有发现 ..
发布时间:2021-08-30 18:31:30 其他开发

为什么 XCode 静态分析器无法检测未发布的保留属性?

我有这样声明的保留属性: @property (nonatomic, retain) NSMutableDictionary *codes; 然后我合成这个: @synthesize 代码; 我使用这样的属性: self.codes = [NSMutableDictionary 字典]; 然后,我忘记在我的dealloc 中说[codes release];. 当我在 XCode ..
发布时间:2021-08-30 18:31:27 其他开发

如何使用 Soot 创建控制流图?

一段时间以来,我一直在努力使用 Soot 创建控制流图,而我有点迷失在它的教程中.我一直在尝试将 Soot 用作库或 API,而不是将 Soot 用作 Eclipse 插件. 我想做的是,我有一堆 Java 项目,我想创建/生成这些项目的控制流图.我还看到 Soot 中有一个功能,我可以生成“DOT"格式的控制流图,这对我来说也是可以接受的. 任何展示如何使用 Soot 创建/生成控制 ..
发布时间:2021-08-30 18:31:24 其他开发

Frama-C anagram 函数行为验证

我写了一个 C 函数来检查两个给定的字符串(C 风格)是否是字谜.我尝试用 Frama-C 验证它,但它无法验证函数的最终行为(其他规范有效).第一个进入超时(即使 WP 中的超时值非常高),第二个是未知的. 代码如下: #include //@幽灵字符字母表[26] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l ..
发布时间:2021-08-30 18:31:21 其他开发

使用 Frama-C 检查 C 代码的无效内存访问

我得到了这个 C 代码(代码的细节,包括可能的错误,不是很相关): int read_leb128(char **ptr, char *end) {整数 r = 0;整数 s = 0;字符 b;做 {if ((intptr_t)*ptr >= (intptr_t)end) (exit(1));b = *(*ptr)++;r += (b & (char)0x7f) ..
发布时间:2021-08-30 18:31:17 其他开发

使用地图真的能降低圈复杂度吗?

假设我有下面的原始方法. public String someMethod(String str) {字符串 returnStr;if("BLAH".equals(str)) {returnStr="ok";} else if ("BLING".equals(str)) {returnStr="不行";} else if ("BONG".equals(str)) {returnStr="ok"; ..
发布时间:2021-08-30 18:31:14 其他开发

将我的静态程序分析器的演示创建为 Web 应用程序?[不向客户端发送 .jar 文件]

我一直在开发一个静态程序分析器(一种试图在编译时检测程序错误的工具),它几乎完成了.我想在网上发布一个演示版本,以便可能对该工具感兴趣的少数人可以测试其功能. 上下文:1. 如有需要,我有一台个人电脑用作服务器.否则,我不确定在技术上是否可以将演示放到我研究所的计算机上,因为他们的计算机没有用于启动演示所需的库. 我正在使用 Eclipse 和 Maven 来开发这个分析器.分析器是用 ..
发布时间:2021-08-30 18:31:11 其他开发

如何在 C++ 中禁用 CodeSonar 警告

标题说明了一切......我有一个项目需要清理 MISRA 2004,公司被告知 CodeSonar 是一个很好的静态分析工具. 在其他静态分析工具上,您可以添加一个魔术注释来禁用对下一行\代码块的分析,(PC-Lint 是 //lint -esym(42),CStat 使用 #pragma cstat_suppress="MISRAC++2008-6-4-1") 但 CodeSonar 似 ..
发布时间:2021-08-30 18:31:08 其他开发