Oracle® Solaris Studio 12.4:代码分析器用户指南

退出打印视图

更新时间: 2014 年 10 月
 
 

收集静态错误数据

要收集 C 或 C++ 程序的静态错误数据,请在 Oracle Solaris Studio 12.3 或者 12.4 C 或 C++ 编译器中使用 –xprevise=yes 选项来编译该程序。 以前使用 –xanalyze=code 选项,但此选项已停止使用,建议改用 –xprevise=yes 选项。在先前的 Oracle Solaris Studio 发行版中,–xprevise=yes 选项在编译器中不可用。 使用此选项时,编译器会自动提取静态错误并将数据写入 binary-name.analyze 目录的 static 子目录中。

如果使用 –xprevise=yes 选项编译程序,然后在单独的步骤中链接此程序,那么您还需要在链接步骤中包括 –xanalyze=code 选项。

在 Linux 上,必须指定 –xannotate 选项和 –xprevise=yes 才能收集静态错误数据。例如:

% cc -xprevise=yes -xannotate -g t.c

请注意,编译器并不能检测到代码中的所有静态错误。

  • 某些错误依赖于仅在运行时可用的数据。例如,假设给定以下代码,编译器不会检测 ABW(数组越界写)错误,因为它无法检测从某个文件读取的 ix 值是否位于 [0,9] 范围之外:

    void f(int fd, int array[10])
    {
      int ix;
      read(fd, &ix, sizeof(ix));
      array[ix] = 0;
    }
  • 有些错误不明确,也可能不是实际错误。编译器不报告这些错误。

  • 在此发行版中,编译器不检测某些复杂的错误。

收集静态错误数据之后,可以启动代码分析器的 GUI 或命令行工具 (codean) 来分析和显示数据,或者重新编译程序,以便可以收集动态内存访问或代码覆盖数据。