问题标签 [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.
c++ - 在 Linux 上使用 g++ 运行 clang scan-build
我有以下代码:
我正在尝试使用 clang 的扫描构建:
该程序使用 g++ 编译并运行良好。我正在使用 CentOS 和 clang3.8 和 g++4.8.5。
错误信息:
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++ 文件。有什么线索吗?
jenkins - 是否有任何用于 Clang 扫描构建报告的分析器,类似于 Jenkins xUnit 插件?
我正在参与一个为期一年多的项目。最近,我们的管理层决定使用 Clang 静态分析器对代码进行例行检查。
我们的项目有一个基于 Jenkins 的 CI 服务器。对 scan-build 的调用被添加到构建脚本中,该脚本在推送事件后由 Gitlab 启动。所有构建结果都在 Jenkins 中发布。
Clang scan-build 报告超过 600 个警告。我们希望与他们在一起并最终修复,但一旦出现所有新问题就会立即修复。
我正在寻找一个工具或 Jenkins 插件,它可以比较两个报告并突出显示差异,就像 xUnit 插件一样。该插件跟踪每个失败的测试用例,显示失败年龄,并为每个构建显示已修复/新出现的失败次数。
c - scan-build 没有找到“未初始化的变量”
我正在尝试使用扫描构建工具在已审核的项目中查找错误。它的输出报告似乎非常适合发送给代码作者。工具发现了一些好的警告。
我还使用 KDevelop 5.0.3,它向我显示了更多警告。具体来说,它报告了多个“只要 'if' 条件为真 [-Wsometimes-uninitialized] 时使用未初始化的变量 'pkginfo_handle'”。我相信 KDevelop 解析器是由 clang 支持的,但我不知道它是如何工作的
我用于运行工具的命令:
我检查了 **/*.c 是否涵盖了 KDevelop 发现问题的文件。
我可以说服 scan-build 也寻找这个错误吗?
arm - 使用带有交叉编译工具链的 clang 静态分析器
我正在尝试为我们的代码库设置静态分析,该代码库是为基于 ARM 的 CPU 交叉编译的。看来,clang 提供的 scan-build 是最好的开源解决方案之一。当我运行 scan-build 时,这就是我得到的。
显然,Linker 正在尝试查找一些文件但没有找到它。我更深入地研究了链接器如何通过运行此命令获取文件。
这打印了很多数据,这是我觉得有趣的。
Mycrti.o
不在上述任何路径中,因此ld
失败。
现在的问题。当 scan-build 调用链接器时,它如何通知搜索目录,我可以更改它吗?
clang - 如何使用 Clang Static Checker 检测所有缓冲区访问
我的目标: 使用 clang 静态检查器检测 C/C++ 中的所有缓冲区访问。
我的想法:使用 CheckPosition 让所有内存读/写,然后过滤不相关的项目。
我的问题:但是,当我尝试过滤诸如“int i = 1”“i++”之类的内容时,我被卡住了。
我的解决方案: 过滤此问题的一种方法是使用 isPointerType() 检查变量是否为指针类型。
我的问题: 但我需要先获得 QualType。问题是如何?或者,我还有其他方法可以实现我的目标吗???
我的 Clang 检查器代码如下:
测试结果如下:
以下是选择的一些不满意的测试结果:
应过滤 int 类型变量
返回表达式应该被过滤
这出现了两次
顺便说一句,测试代码在这里: https ://github.com/lucascapalbo/ep2AED
测试命令在这里:
clang - Clang静态分析与构建分开?
是否可以在构建后执行 clang 静态分析?就像是scan-build <file>
我尝试使用 scan-build 但它总是返回No bugs found
并运行scan-build cmake ..
,scan-build make
似乎是实际获取错误的唯一方法
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 TARGET
scan-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:
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 编译器?
c - 扫描构建不工作报告“删除目录 xxx,因为它不包含报告。”
简单的错误代码文件
你好ç
使用 gcc 运行命令和结果
铿锵
我不明白警告是生成的(可能是编译器?),但为什么扫描构建不起作用?
**** 2021 年 6 月 30 日更新
我按照本教程进行操作,最终得到了 scan-build 的“python”版本,这是一个误解,答案完美地解决了我的问题,现在正在工作。 https://github.com/rizsotto/scan-build