要收集 C 或 C++ 程序的静态错误数据,请在 Oracle Developer Studio 12.3、Oracle Developer Studio 12.4 或者 Oracle Developer Studio 12.5 C 或 C++ 编译器中使用 –xprevise=yes 选项来编译该程序。 以前使用 –xanalyze=code 选项,但此选项已停止使用,建议改用 –xprevise=yes 选项。在先前的 Oracle Developer 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) 来分析和显示数据,或者重新编译程序,以便可以收集动态内存访问或代码覆盖数据。