跳过导航链接 | |
退出打印视图 | |
![]() |
Oracle Solaris Studio 12.3:线程分析器用户指南 Oracle Solaris Studio 12.3 Information Library (简体中文) |
关于在收集实验之前检测应用程序以检测数据争用的提示:
如果从编译器收到一条错误消息,指出编译器选项 -xinstrument=datarace 非法,则表明您使用的是不支持线程分析器的旧版 Sun Studio 编译器。可以通过键入命令 cc -Version 检查所使用的编译器的版本。最早支持线程分析器的版本日期为 2006 年 6 月。
如果没有检测二进制代码以进行数据争用检测,collect -r race 命令会发出一条如下所示的警告:
% collect -r races a.out WARNING: Target `a.out' is not instrumented for datarace detection; reported datarace data may be misleading
通过使用 nm 命令以及查找对 tha 例程的调用,可以确定是否检测了二进制代码以进行数据争用检测。如果显示名称以 __tha_ 开头的例程,则表明已检测二进制代码。示例输出如下所示。
源代码级检测:
% cc -xopenmp -g -xinstrument=datarace source.c % nm a.out | grep __tha_ [71] | 135408| 0|FUNC |GLOB |0 |UNDEF |__tha_get_stack_id [53] | 135468| 0|FUNC |GLOB |0 |UNDEF |__tha_src_read_w_frame [61] | 135444| 0|FUNC |GLOB |0 |UNDEF |__tha_src_write_w_frame
二进制代码级检测:
% cc -xopenmp -g source.c % discover -i datarace -o a.out.i a.out % nm a.out.i | grep __tha_ [88] | 0| 0|NOTY |GLOB |0 |UNDEF |__tha_read_w_pc_frame [49] | 0| 0|NOTY |GLOB |0 |UNDEF |__tha_write_w_pc_frame
要使用 discover,必须使用编译器优化标志 (-xO1, -xO2, -xO3, -xO4, -xO5) 之一编译输入的二进制代码。编译器必须来自不低于 Oracle Solaris Studio 12 Update 1 的发行版。操作系统至少必须为 Oracle Solaris 10 Update 5 或 Oracle Solaris 11。否则,可能会收到一条如下所示的警告。
% discover -i datarace -o a.out.i a.out discover (warning): a.out has no annotations. Results may be incomplete. See discover documentation for compiler flag/OS recommendation
如果使用编译器选项 -xbinopt=prepare 编译了二进制代码,可能也可以在基于 SPARC 的系统中运行的早期 Solaris 版本上使用 discover 工具。有关该编译器选项的信息,请参见 cc(1)、CC(1) 或 f95(1) 手册页。