跳过导航链接 | |
退出打印视图 | |
![]() |
Oracle Solaris Studio 12.3 概述 Oracle Solaris Studio 12.3 Information Library (简体中文) |
Oracle Solaris Studio 提供了一些工具,可以帮助您验证应用程序的稳定性。以下工具结合了动态、静态和代码覆盖分析,以检测应用程序漏洞,包括内存泄漏和内存访问违规。
Discover。一种命令行实用程序,可以帮助检测代码中的内存访问错误。
Uncover。一种命令行实用程序,显示应用程序代码的哪些区域不在测试所涵盖的范围内。
代码分析器。一种图形工具,用来分析并显示 C 或 C++ 编译器所收集的静态代码错误数据,以及 Discover 和 Uncover 收集的数据。“代码分析器”将静态错误数据与动态内存访问错误数据和代码覆盖数据相结合,从而使您能够在应用程序中发现单独使用其他错误检测工具无法找到的错误。
内存错误搜索工具 (Discover) 是用于检测程序中内存访问错误的高级开发工具。使用 -g 选项编译二进制文件使 Discover 可以在报告错误和警告时显示源代码和行号信息。
Discover 简单易用。在使用 -g 选项编译二进制文件后,您可以对二进制文件运行 discover 命令已对其进行检测。然后运行经检测的二进制文件,以创建 Discover 报告。您可以请求 HTML 格式、文本格式或者这两种格式的 Discover 报告。该报告显示内存错误、警告和内存泄漏,您可以显示每个错误或警告所对应的源代码和堆栈跟踪。
以下示例来自 discover(1) 手册页,该示例说明了如何准备、检测及运行可执行文件,以生成一份 Discover 报告,用于检测内存访问错误。discover 命令行上的 -w 选项指出报告应采用文本格式,- 选项则指出应输出到屏幕上。
% 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 Solaris Studio 12.3:Discover 和 Uncover 用户指南》。
Uncover 是一种用于度量代码覆盖的命令行工具。该工具显示当应用程序运行时,已实施、未实施以及未涵盖在测试范围内的代码区域。Uncover 会生成一份报告,其中包含统计信息和各项度量,可以帮助您确定应在测试套件中添加哪些函数,以确保测试期间覆盖更多代码。
Uncover 可以与使用 Oracle Solaris 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 Solaris Studio 12.3:Discover 和 Uncover 用户指南》。
Oracle Solaris Studio 代码分析器是一种图形工具,可用来对代码执行集成分析。“代码分析器”使用您通过其他工具收集的三种类型的信息:
静态代码检查,当您使用 Oracle Solaris Studio C 或 C++ 编译器并指定- xanalyze=code 选项来编译应用程序时,执行该检查。
动态内存访问检查,当您使用带有 -a 选项的 Discover 来检测二进制文件,然后运行检测后的二进制文件时,执行该检查。
代码覆盖检查,当您使用 Uncover 检测二进制文件,运行检测后的二进制文件,然后对收集的覆盖数据运行带有 -a 选项的 Uncover 时,执行该检查。
您可以对已使用其中的任一种工具或其任意组合来准备的二进制文件使用代码分析器。但是,综合查看这三种类型的数据可以最为详细地了解您的代码,因而使您能够创建更安全、更可靠的应用程序。
下例说明了如何对已经使用 Discover 和 Uncover 准备的二进制文件 a.out 运行代码分析器。
% code-analyzer a.out
在下图中,代码分析器正在显示在二进制文件 a.out 中发现的问题。