使用模式匹配选择用于 Polyspace 分析的文件
当您使用 Polyspace® 产品运行静态分析时,分析涵盖了在您的 Polyspace 工程中指定的所有文件(或在命令行中使用 -sources 指定的所有文件)。有时,您可能希望仅在这些文件的子集中查看结果,或者可能希望对文件子集应用不同的分析行为。您可以使用文件选择模式指定文件的子集。文件选择模式(glob 模式)使用 ? 或 * 等通配符来覆盖多个文件。
何时指定文件选择模式
当您从编译命令创建 Polyspace 工程或选项文件,或使用 Polyspace Bug Finder™ 运行静态分析时,可以选择文件的子集。
从编译命令设置 Polyspace 分析时选择文件
当您使用 polyspace-configure 创建工程时,可以包含或排除其路径与您传递给 -include-sources 或 -exclude-sources 选项的模式相匹配的源文件。您可以在命令行中多次指定这两个选项并将其组合使用。
本文中的示例使用以下文件夹结构。

要尝试这些示例,请使用 中的演示文件。polyspaceroot\polyspace\examples\doc_cxx\sources-select 是 Polyspace 的安装文件夹。polyspaceroot
运行以下命令:
polyspace-configure -allow-overwrite -include-sources "glob_pattern" \ -print-excluded-sources -print-included-sources make -B
glob_pattern 是 glob 模式,用于匹配在工程中包含或排除的文件路径。要确保 shell 不会展开您传递到 polyspace-configure 的 glob 模式,请将它们括在双引号中。运行 Bug Finder 分析时选择文件
在使用 Polyspace Bug Finder 分析 C/C++ 代码时,您可以在工程中定义需要在分析过程中进行特定处理的文件集。例如,您可能希望跳过第三方库中函数体的定义,或强制分析您拥有的文件中的所有函数。您可以在分类 XML 文件中枚举具有特定行为的文件集,并使用此分类文件微调 Bug Finder 分析。
在分类 XML 文件中,您可以在 file-pattern 元素(fileset > files-in-set 或 fileset > files-not-in-set 元素的子元素)内指定文件模式。例如,以下模式选择 myproject/inc 子文件夹中的 .hpp 文件,但排除以 -generated 结尾的文件。
<fileset name="Application implementation and header files">
<files-in-set>
<file-pattern>myproject/inc/**/*.hpp</file-pattern>
</files-in-set>
<files-not-in-set>
<file-pattern>myproject/inc/**/*-generated.hpp</file-pattern>
</files-not-in-set>
<behaviors>
<!-- Specific behaviors for this file set -->
</behaviors>
</fileset>要在静态分析期间指定分类文件,请使用分析选项 -classification。例如,您可以使用以下命令运行 Bug Finder:
polyspace-bug-finder -options-file myOptions.txt -classification myClassification.xml
支持的文件选择模式
下表中的示例假定 sources 是一个顶层文件夹。
| Glob 模式语法 | 示例 |
|---|---|
无特殊字符、正斜杠 ('/') 或反斜杠 ('\')。 模式将匹配相应的文件而非文件夹。 |
|
模式包含
匹配项不包含路径分隔符。 |
|
模式开头为:
模式仅匹配绝对路径。 |
|
模式结尾为:
模式匹配指定文件夹下的所有文件。
|
|
模式包含:
模式匹配指定路径中的零个或多个文件夹。 |
|
模式以 模式匹配相对于您运行命令的路径的路径。 | 如果您从
|
| 模式是 Windows 上的一个 UNC 路径。 | 如果您的文件位于服务器
|
polyspace-configure 不支持以下 glob 模式:
Windows 上相对于当前驱动器的绝对路径。
例如,
\foo\bar。当前文件夹的相对路径。
例如,
C:foo\bar。Windows 中的扩展长度路径。
例如,
\\?\foo。包含 '.' 或 '..' 的路径,位于模式开头时除外。
例如,
/foo/bar/../a?.c。单独的
'*'字符。
另请参阅
-classification | polyspace-configure