Clang的静态代码分析器包装。

scan-build的Python项目详细描述


https://travis-ci.org/rizsotto/scan-build.svg?branch=masterhttps://ci.appveyor.com/api/projects/status/k5fi1xy90xieqxir/branch/master?svg=truehttps://coveralls.io/repos/github/rizsotto/scan-build/badge.svg?branch=masterhttps://img.shields.io/pypi/v/scan-build.svghttps://img.shields.io/pypi/l/scan-build.svghttps://img.shields.io/pypi/dm/scan-build.svghttps://img.shields.io/pypi/pyversions/scan-build.svghttps://badges.gitter.im/rizsotto/scan-build.svg

扫描生成

一个包,用于包装构建,以便所有对gcc/clang的调用 截获并登录到compilation database和/或管道 叮当声静态分析仪。包括intercept构建工具,它记录 生成,以及扫描生成工具,它记录生成并运行 上面的叮当声静态分析仪。

如何获取

可从the Python Package Index

$ pip install scan-build

便携性

应该在unix操作系统上工作。

  • 它已经在freebsd、gnu/linux、os x和windows上进行了测试。

先决条件

  1. clang编译器,编译源代码并使用静态分析器。
  2. 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-buildanalyze-build工具 一起做的工作与scan-build做的相同。所以,你可以期待 此行的输出与简单的scan-build相同:

$ intercept-build <your build command> && analyze-build

主要的区别在于如何和何时运行分析器。那scan-build 工具有三个不同的模型来运行分析器:

  1. 使用编译器包装器进行操作。 编译器包装器确实运行真正的编译器和分析器。 这是默认行为,可以使用^{tt7}强制执行$ 旗帜。
  2. 在构建过程中使用特殊库拦截编译器调用。 构建完成后,分析器对每个模块运行。 使用--intercept-first标志获取此模型。
  3. 使用编译器包装器在生成过程中拦截编译器调用。 构建完成后,分析器对每个模块运行。 将--intercept-first--override-compiler标志一起使用可获得 这个模型。

一号。和3。正在使用编译器包装器,它仅在生成 进程尊重CCCXX环境变量。(一些建筑 进程只能将这些变量重写为命令行参数。本案 您需要手动传递编译器包装器。例如: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_PRELOADDYLD_INSERT_LIBRARIES环境变量, 它不附加到它,而是覆盖它。所以使用这些 变量可能不起作用。(我不知道有什么构建工具能做到这一点,但是 如果有,请告诉我。)

问题报告

如果您在本文档或程序的其他地方发现错误,或者 喜欢专业提出改进意见,请使用项目的issue tracker。 请描述一下这个错误和你在哪里发现的。如果你有建议 如何修复它,包括它。也欢迎使用修补程序。

许可证

该项目获得伊利诺伊大学/NCSA开源许可。 有关详细信息,请参见license.txt。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java:字符串。RTL设备语言用标志“+”格式化,数字后加符号   java GAE作为桌面应用程序(Swing)的服务提供商   java将InputStream转换为FileInputStream不适用于Apache POI   java外部Voronoi库“网格”:什么是草图和处理?   重载重写的泛型方法java   java显示组织上设置的错误。springframework。验证。jsp中的错误对象   java一些Spring模型属性没有显示在我的JSP中   java无法编译Guava 23的SimpleTimeLimiter示例   java如何更改JTree中的“根”目录名?   java如何在安卓中对相对布局产生连锁反应?   java错误:org。冬眠例外SQLGrammarException:无法提取结果集,dateAccessed是未知列   如何使用java监听JSON文件更新   由抽象封闭类创建的匿名内部类能否通过反射确定实现类?