Clang的静态代码分析器包装。
scan-build的Python项目详细描述
扫描生成
一个包,用于包装构建,以便所有对gcc/clang的调用 截获并登录到compilation database和/或管道 叮当声静态分析仪。包括intercept构建工具,它记录 生成,以及扫描生成工具,它记录生成并运行 上面的叮当声静态分析仪。
便携性
应该在unix操作系统上工作。
- 它已经在freebsd、gnu/linux、os x和windows上进行了测试。
先决条件
- clang编译器,编译源代码并使用静态分析器。
- python解释器(2.7、3.4、3.5、3.6、3.7版)。
如何使用
对项目运行clang静态分析器的步骤如下:
$ scan-build <your build command>
生成编译数据库文件的步骤如下:
$ intercept-build <your build command>
对具有编译数据库的项目运行clang静态分析器 像这样:
$ analyze-build
使用--help了解有关命令的更多信息。
限制
一般来说,intercept-build和analyze-build工具 一起做的工作与scan-build做的相同。所以,你可以期待 此行的输出与简单的scan-build相同:
$ intercept-build <your build command> && analyze-build
主要的区别在于如何和何时运行分析器。那scan-build 工具有三个不同的模型来运行分析器:
- 使用编译器包装器进行操作。 编译器包装器确实运行真正的编译器和分析器。 这是默认行为,可以使用^{tt7}强制执行$ 旗帜。
- 在构建过程中使用特殊库拦截编译器调用。 构建完成后,分析器对每个模块运行。 使用--intercept-first标志获取此模型。
- 使用编译器包装器在生成过程中拦截编译器调用。 构建完成后,分析器对每个模块运行。 将--intercept-first和--override-compiler标志一起使用可获得 这个模型。
一号。和3。正在使用编译器包装器,它仅在生成 进程尊重CC和CXX环境变量。(一些建筑 进程只能将这些变量重写为命令行参数。本案 您需要手动传递编译器包装器。例如:intercept-build--override-compiler make CC=intercept-ccCXX=intercept-c++ all其中 原来的构建命令应该是make all才行。
一号。在真正编译之后立即运行分析器。所以,如果建筑 进程移除移除分析器的中间模块(生成的源) 输出仍然保持。
2号。和3。首先生成编译数据库,并筛选出 不存在的模块。所以,它适用于 发展。
2号。模式仅在FreeBSD、Linux和OSX上可用。其中库预加载 可从动态加载程序获得。不同的安全扩展/模式 操作系统可能会禁用库预加载。在这种情况下,构建行为 正常情况下,但结果编译数据库将为空。(值得注意的例子 对于启用的安全模式是:sip on os x captain和selinux on fedora, 程序检查sip的安全模式,然后失败。 回到3。模式。
intercept-build命令只使用2。和3。生成 编译数据库。analyze-build只对 捕获的编译器调用。
已知问题
因为它使用LD_PRELOAD或DYLD_INSERT_LIBRARIES环境变量, 它不附加到它,而是覆盖它。所以使用这些 变量可能不起作用。(我不知道有什么构建工具能做到这一点,但是 如果有,请告诉我。)
问题报告
如果您在本文档或程序的其他地方发现错误,或者 喜欢专业提出改进意见,请使用项目的issue tracker。 请描述一下这个错误和你在哪里发现的。如果你有建议 如何修复它,包括它。也欢迎使用修补程序。
许可证
该项目获得伊利诺伊大学/NCSA开源许可。 有关详细信息,请参见license.txt。