问题标签 [scan-build]

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 投票
1 回答
346 浏览

c++ - 在 Linux 上使用 g++ 运行 clang scan-build

我有以下代码:

我正在尝试使用 clang 的扫描构建:

该程序使用 g++ 编译并运行良好。我正在使用 CentOS 和 clang3.8 和 g++4.8.5。

错误信息:

0 投票
1 回答
5701 浏览

c - scan-build make 没有检测到任何错误

我有一个非常简单的 .c 文件,里面有一些明显的错误。

我正在尝试使用 clang 的静态代码分析器工具(scan-build)来检测错误。当我直接在文件上运行该工具时,例如使用以下命令:

扫描构建 g++ -o 1 1.c

我确实得到了预期的输出,包括来自编译器的警告,其中提到了除以 0。

scan-build: 使用 '/usr/lib/llvm-3.8/bin/clang' 进行静态分析

1.c:在函数'int test2(int)'中:1.c:16:11:警告:除以零[-Wdiv-by-zero]返回5/(xx);^

1.c:16:11:警告:除以零返回 5/(xx);

~^~~~~~ 1 个警告生成。扫描构建:发现 1 个错误。scan-build:运行“scan-view /tmp/scan-build-2016-07-11-152043-3028-1”来检查错误报告。

现在,我正在尝试将该命令放入一个非常简单的 Makefile 中。我的 Makefile 的内容是:

但是,每当我使用 make 运行 scan-build 时,使用以下命令:

扫描构建

我仍然收到来自编译器的警告,但不是扫描构建工具!!!

scan-build: 使用 '/usr/lib/llvm-3.8/bin/clang' 进行静态分析

g++ -o 1 1.c

1.c:在函数'int test2(int)'中:

1.c:16:11:警告:除以零 [-Wdiv-by-zero] 返回 5/(xx);

^ scan-build:删除目录'/tmp/scan-build-2016-07-11-152326-3055-1',因为它不包含任何报告。扫描构建:没有发现错误。

我在 C 和 C++ 文件中都观察到了相同的行为。我看到有人在过去(2012 年)遇到过类似的错误,但是建议的答案似乎不起作用,而且似乎只引用了 C++ 文件。有什么线索吗?

0 投票
2 回答
1021 浏览

jenkins - 是否有任何用于 Clang 扫描构建报告的分析器,类似于 Jenkins xUnit 插件?

我正在参与一个为期一年多的项目。最近,我们的管理层决定使用 Clang 静态分析器对代码进行例行检查。

我们的项目有一个基于 Jenkins 的 CI 服务器。对 scan-build 的调用被添加到构建脚本中,该脚本在推送事件后由 Gitlab 启动。所有构建结果都在 Jenkins 中发布。

Clang scan-build 报告超过 600 个警告。我们希望与他们在一起并最终修复,但一旦出现所有新问题就会立即修复。

我正在寻找一个工具或 Jenkins 插件,它可以比较两个报告并突出显示差异,就像 xUnit 插件一样。该插件跟踪每个失败的测试用例,显示失败年龄,并为每个构建显示已修复/新出现的失败次数。

0 投票
0 回答
203 浏览

c - scan-build 没有找到“未初始化的变量”

我正在尝试使用扫描构建工具在已审核的项目中查找错误。它的输出报告似乎非常适合发送给代码作者。工具发现了一些好的警告。

我还使用 KDevelop 5.0.3,它向我显示了更多警告。具体来说,它报告了多个“只要 'if' 条件为真 [-Wsometimes-uninitialized] 时使用未初始化的变量 'pkginfo_handle'”。我相信 KDevelop 解析器是由 clang 支持的,但我不知道它是如何工作的

我用于运行工具的命令:

我检查了 **/*.c 是否涵盖了 KDevelop 发现问题的文件。

我可以说服 scan-build 也寻找这个错误吗?

0 投票
0 回答
582 浏览

arm - 使用带有交叉编译工具链的 clang 静态分析器

我正在尝试为我们的代码库设置静态分析,该代码库是为基于 ARM 的 CPU 交叉编译的。看来,clang 提供的 scan-build 是最好的开源解决方案之一。当我运行 scan-build 时,这就是我得到的。

显然,Linker 正在尝试查找一些文件但没有找到它。我更深入地研究了链接器如何通过运行此命令获取文件。

这打印了很多数据,这是我觉得有趣的。

Mycrti.o不在上述任何路径中,因此ld失败。

现在的问题。当 scan-build 调用链接器时,它如何通知搜索目录,我可以更改它吗?

0 投票
1 回答
91 浏览

clang - 如何使用 Clang Static Checker 检测所有缓冲区访问

我的目标: 使用 clang 静态检查器检测 C/C++ 中的所有缓冲区访问。

我的想法:使用 CheckPosition 让所有内存读/写,然后过滤不相关的项目。

我的问题:但是,当我尝试过滤诸如“int i = 1”“i++”之类的内容时,我被卡住了。

我的解决方案: 过滤此问题的一种方法是使用 isPointerType() 检查变量是否为指针类型。

我的问题: 但我需要先获得 QualType。问题是如何?或者,我还有其他方法可以实现我的目标吗???

我的 Clang 检查器代码如下:

测试结果如下:

以下是选择的一些不满意的测试结果:

应过滤 int 类型变量

返回表达式应该被过滤

这出现了两次

顺便说一句,测试代码在这里: https ://github.com/lucascapalbo/ep2AED

测试命令在这里:

0 投票
0 回答
40 浏览

clang - Clang静态分析与构建分开?

是否可以在构建后执行 clang 静态分析?就像是scan-build <file>

我尝试使用 scan-build 但它总是返回No bugs found并运行scan-build cmake ..scan-build make似乎是实际获取错误的唯一方法

0 投票
1 回答
1715 浏览

gcc - Clang 的“scan-build”实用程序不适用于“make”

我正在尝试通过 Clang 的静态代码分析器工具静态分析我的代码scan-build,当我使用命令运行代码时scan-build g++,它会为我提供错误报告,但是当我尝试使用 CMake 和scan-build make命令做同样的事情时,它会告诉我没有发现任何错误。

我已经尝试通过 bash 导出命令替换CC和变量,使用和标志并使用. 所有这一切都没有让我找到正确的解决方案,恐怕这不能与 CMake/make 一起使用。CXX--use_cc--use_c++scan-build make TARGETscan-build

  • Clang 版本 8.0.0 (tags/RELEASE_800/final)
  • Gcc 版本 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04)

这是一个简单的例子。

CMakeLists.txt

主文件

当前行为 g++:

当前行为 CMake & make:

0 投票
1 回答
152 浏览

c++ - Clang scan-build 将 CXX 编译器识别为 GNU 9.1.0,而不是 clang

我试图将 scan-build 与 cmake 一起使用。紧随scan-build make其后scan-build cmake。但是当使用 scan-build 时,它将 CXX 编译器识别为 GNU 9.1.0。但是如果我们不使用 scan-build 它会正确地将 CXX 识别为 clang。由于 CXX 编译器标识为 GNU 9.1.0,因此检查 clang 中的某些诊断标志(例如Wunreachable_code_break, Werror_range_loop_analysis)失败。

输出,同时使用扫描构建:

输出,没有扫描构建:

如何确保 scan-build 必须将 clang 识别为 CXX 编译器?

0 投票
1 回答
341 浏览

c - 扫描构建不工作报告“删除目录 xxx,因为它不包含报告。”

简单的错误代码文件

你好ç

使用 gcc 运行命令和结果

铿锵

我不明白警告是生成的(可能是编译器?),但为什么扫描构建不起作用?

**** 2021 年 6 月 30 日更新

我按照本教程进行操作,最终得到了 scan-build 的“python”版本,这是一个误解,答案完美地解决了我的问题,现在正在工作。 https://github.com/rizsotto/scan-build

现在工作!