Oracle® Developer Studio 12.5:概述

退出打印视图

更新时间: 2016 年 6 月
 
 

用于验证应用程序的工具

Oracle Developer Studio 提供了一些工具,可以帮助您验证应用程序的稳定性。以下工具结合了动态、静态和代码覆盖分析,以检测应用程序漏洞,包括内存泄漏和内存访问违规。

discover

一种命令行实用程序,可以帮助检测代码中的内存访问错误。

uncover

一种命令行实用程序,显示应用程序代码的哪些区域不在测试所涵盖的范围内。

代码分析器

一种图形工具,用来分析并显示 C 或 C++ 编译器所收集的静态代码错误数据,以及 discoveruncover 收集的数据。代码分析器将静态错误数据与动态内存访问错误数据和代码覆盖数据相结合,从而使您能够在应用程序中发现单独使用其他错误检测工具无法找到的错误。

codean

一种命令行实用程序,提供类似于代码分析器的功能。

用于检测内存错误的 discover 工具

内存错误搜索工具 (discover) 是用于检测程序中内存访问错误的高级开发工具。使用 –g 选项编译二进制文件使 discover 可以在报告错误和警告时显示源代码和行号信息。

discover 实用程序的用法很简单。在使用 –g 选项编译二进制文件后,您可以对二进制文件运行 discover 命令已对其进行检测。然后运行经检测的二进制文件,以创建 discover 报告。您可以请求 HTML 格式、文本格式或者这两种格式的 discover 报告。该报告显示内存错误、警告和内存泄漏,您可以显示每个错误或警告所对应的源代码和堆栈跟踪。

以下示例来自 discover(1) 手册页,该示例说明了如何准备、检测及运行可执行文件,以生成一份 discover 报告,用于检测内存访问错误。discover 命令行上的 –w 选项指示报告应采用文本格式,–o 选项则指示应输出到屏幕上。

% cc -g -O2 test.c -o test.prep
% discover -w - -o test.disc test.prep
% ./test.disc
ERROR (UMR): accessing uninitialized data from address 0x5000c (4 bytes) at:
     foo() + 0xdc  <ui.c:6>
          3:    int *t;
          4:    foo() {
          5:     t = malloc(5*sizeof(int));
          6:=>   printf("%d0, t[1]);
          7:    }
          8:
          9:    main()
     main() + 0x1c
     _start() + 0x108
    block at 0x50008 (20 bytes long) was allocated at:
     malloc() + 0x260
     foo() + 0x24  <ui.c:5>
          2:
          3:    int *t;
          4:    foo() {
          5:=>   t = malloc(5*sizeof(int));
          6:     printf("%d0, t[1]);
          7:    }
          8:
     main() + 0x1c
     _start() + 0x108

     ***************** Discover Memory Report *****************

1 block at 1 location left allocated on heap with a total size of 20 bytes

    1 block with total size of 20 bytes
     malloc() + 0x260
     foo() + 0x24  <ui.c:5>
          2:
          3:    int *t;
          4:    foo() {
          5:=>   t = malloc(5*sizeof(int));
          6:     printf("%d0, t[1]);
          7:    }
          8:
     main() + 0x1c
     _start() + 0x108

有关更多信息,请参见 discover(1) 手册页和Oracle Developer Studio 12.5:Discover 和 Uncover 用户指南

用于度量代码覆盖的 uncover 工具

uncover 是一种用于度量代码覆盖的命令行工具。该工具显示当应用程序运行时,已实施、未实施以及未涵盖在测试范围内的代码区域。Uncover 会生成一份报告,其中包含统计信息和各项度量,可以帮助您确定应在测试套件中添加哪些函数,以确保测试期间覆盖更多代码。

uncover 可以与使用 Oracle Developer Studio 编译器所生成的任何二进制文件结合使用,而当生成不包含优化的二进制文件时效果最佳。使用 –g 选项编译二进制文件使 uncover 可以在报告代码覆盖情况时显示源代码和行号信息。

在编译了二进制文件后,对二进制文件运行 uncover 命令。uncover 将创建添加了检测代码的新的二进制文件,还将创建名为 binary.uc 的目录,其中将包含程序的代码覆盖数据。每次运行已检测的二进制文件时,都将收集代码覆盖数据并存储在 binary.uc 目录中。

您可以在性能分析器中显示实验数据,或者生成 HTML 格式的 uncover 报告并用 Web 浏览器显示。

下例说明如何准备、检测及运行可执行文件,以生成用于检查代码覆盖的 uncover 报告。已优化二进制文件是 test,由名称也为 test 的已检测二进制文件所取代。

% cc -g -O2 test.c -o test
% uncover test
% test

实验目录是 test.uc,其中包含已检测的 test 运行时所生成的数据。test.uc 目录还包含未检测的 test 二进制文件的副本。

在性能分析器中查看实验:

% uncover test.uc

在浏览器的 HTML 页面查看实验:

% uncover -H test.html test.uc

有关更多信息,请参见 uncover(1) 手册页和Oracle Developer Studio 12.5:Discover 和 Uncover 用户指南

用于集成错误检查的代码分析器工具

    Oracle Developer Studio 代码分析器是一种图形工具,可用来对代码执行集成分析。代码分析器使用您通过其他工具收集的三种类型的信息:

  • 静态代码检查,当您使用 Oracle Developer Studio C 或 C++ 编译器并指定 –xprevise=yes 选项来编译应用程序时,执行该检查。

  • 动态内存访问检查,当您使用带有 –a 选项的 discover 来检测二进制文件,然后运行检测后的二进制文件时,执行该检查。

  • 代码覆盖检查,当您使用 uncover 检测二进制文件,运行检测后的二进制文件,然后对收集的覆盖数据运行带有 –a 选项的 Uncover 时,执行该检查。

您可以对已使用其中的任一种工具或其任意组合来准备的二进制文件使用代码分析器。但是,综合查看这三种类型的数据可以最为详细地了解您的代码,因而使您能够创建更安全、更可靠的应用程序。

下例说明了如何对已经使用 discoveruncover 准备的二进制文件 a.out 运行代码分析器。

% code-analyzer a.out

在下图中,代码分析器正在显示在二进制文件 a.out 中发现的问题。

image:代码分析器 UI

有关更多信息,请参见集成的代码分析器帮助、Oracle Developer Studio 12.5:代码分析器用户指南Oracle Developer Studio 12.5:代码分析器教程

用于集成检查的 codean 工具

此外,还可以使用 codean 命令行实用程序,根据通过编译器、discoveruncover 收集的数据生成报告。codean 工具提供类似于代码分析器的功能,但可在没有图形环境的系统上使用,也可供偏好命令行的用户使用。codean 工具还可用于自动化脚本,并且有一些在代码分析器工具中尚未提供的功能。

有关更多信息,请参见 codean(1) 手册页、Oracle Developer Studio 12.5:代码分析器用户指南Oracle Developer Studio 12.5:代码分析器教程