Oracle® Developer Studio 12.5:Discover 和 Uncover 用户指南

退出打印视图

更新时间: 2016 年 6 月
 
 

使用 discover 的要求

本节介绍使用 discover 并取得最佳结果的要求,包含以下主题:

支持的二进制文件

discover 实用程序适用于使用 Sun Studio 12 Update 1、Oracle Solaris Studio 12.2-12.4 或 Oracle Developer Studio 12.5 编译器编译的二进制文件。它可以在基于 SPARC 或 x86 的系统上运行,但要求其操作系统至少为 Solaris 10 10/08、Oracle Solaris 11、Oracle Enterprise Linux 5.x 或 Oracle Enterprise Linux 6.x。

如果不满足这些要求,discover 实用程序会发出错误并且不检测二进制文件。不过,您可以检测不满足这些要求的二进制文件并使用 –l 选项检测有限数量的错误。请参见检测选项

编译后的二进制文件包含称为注释的信息,以帮助 discover 正确对其进行检测。添加这些少量信息不会影响二进制文件的性能或运行时内存使用情况。

使用 –g 选项可在编译二进制文件时生成调试信息,因此 discover 可在报告错误和警告时显示源代码和行号信息并生成更准确的结果。如果在编译二进制文件时未使用 –g 选项,discover 将仅显示相应计算机级别指令的程序计数器。此外,使用 –g 选项进行编译还可帮助 discover 生成更准确的报告。尽管 discover 可与许多优化的二进制文件一起使用,但仍建议使用 –g。有关更多信息,请参见解释 discover 错误消息

要获取最佳结果,编译二进制文件时应使用 –g 选项且不使用任何优化选项。优化代码可能会由于优化而不同于源代码,例如,对不同的变量使用相同的内存位置以及生成推测性代码。编译时使用高级优化选项可能会导致 discover 不正确地报告错误或者无法报告错误。


注 -  discover 支持重新定义标准内存分配函数(malloc()calloc()memalign()valloc()free())的二进制文件。

有关更多信息,请参见使用 discover 时的限制

使用预装入或审计的二进制文件不兼容

由于 discover 使用了运行时链接程序的某些特殊功能,因此您无法将其用于使用预装入或审计的二进制文件。

如果程序要求设置 LD_PRELOAD 环境变量,则该变量可能无法与 discover 一起正常运行,因为 discover 需要在某些系统函数上插入,但如果函数已预装入,将无法执行插入。

类似地,如果程序使用运行时审计,则由于二进制文件已通过 –p 选项或 –P 选项被链接,或者二进制文件要求设置 LD_AUDIT 环境变量,因此该审计将与 discover 使用的审计相冲突。如果在链接二进制文件时使用了审计,则 discover 会在检测时失败。如果在运行时设置了 LD_AUDIT 环境变量,结果将无法确定。