Oracle® Solaris Studio 12.4:代码分析器教程

退出打印视图

更新时间: 2014 年 10 月
 
 

收集和显示静态错误数据

使用 –xprevise 编译器选项生成二进制文件时,编译器会自动提取静态错误并将数据放入源代码所在目录中的 binary-name.analyze 目录的 static 子目录中。有关编译器找到的静态错误的类型列表,请参见静态代码问题

  1. sample 目录中,键入以下内容以生成应用程序:


    注 -  –xprevise 选项与 –xanalyze=code 同义,后者已弃用。
    • 在 Oracle Solaris 上:

      $ cc -xprevise main.c previse*.c sample1.c sample2.c sample3.c
    • 在 Oracle Linux 上:

      $ cc -xannotate -xprevise main.c previse*.c sample1.c sample2.c sample3.c

    注 -  教程的此部分无需编译 sample4.c

    静态错误数据将写入 sample/a.out.analyze/static 目录。

  2. 启动代码分析器 GUI 以查看结果:

    $ code-analyzer a.out &
  3. 此时将打开代码分析器 GUI,"Results"(结果)标签中会显示编译期间发现的静态代码问题。"Results"(结果)标签左上的文本指示发现了十三个静态代码问题。

    image:显示静态问题的代码分析器 “Results“(结果)标签

    对于每个问题,此标签显示问题类型、发现问题的源文件的路径名以及该文件中突出显示相关源代码行的代码片段。

  4. 要查看有关第一个问题("Double Freeing Memory"(双重释放内存)错误)的更多信息,请单击错误图标 image:错误图标

    此时将打开问题的堆栈跟踪,其中显示错误路径:

    image:显示错误路径的 “Double Freeing Memory“(双重释放内存)错误

    请注意,在打开堆栈跟踪时,问题的右上角的图标从 image:未访问的图标 变为 image:已访问的图标 ,指示您已经查看了该问题。


    注 -  通过单击 "Results"(结果)标签顶部的 "Reviewed"(已查看)按钮 image:隐藏已查看的问题按钮 ,可隐藏您已经查看的问题。再次单击此按钮可取消隐藏问题。
  5. 单击同一个错误图标以关闭堆栈跟踪。

  6. 单击某个 "Uninitialized Memory Read"(读取未初始化的内存)警告的堆栈跟踪警告图标 image:警告图标 可打开堆栈跟踪。

    此问题的错误路径所包含的函数调用远远多于 "Double Freeing Memory"(双重释放内存)问题的错误路径所包含的函数调用。

  7. 双击第一个函数调用。

    此时将打开源文件,并且突出显示该调用。错误路径显示在源代码下的 "Details Window"(详细信息窗口)中。

    image:突出显示函数调用并在下方显示错误路径的源代码窗口
  8. 双击错误路径中的其他函数调用以沿着路径找到导致错误的代码。

  9. 单击问题描述左边的信息按钮 image:信息按钮 可了解有关 UMR 错误类型的更多信息。

    联机帮助浏览器中显示了错误类型的描述,其中包括代码示例和可能的原因。

  10. 按右上角的 X 关闭代码分析器 GUI。