Oracle® Solaris Studio 12.4:线程分析器用户指南

退出打印视图

更新时间: 2014 年 12 月
 
 

检测代码

为了在程序中检测数据争用,必须首先对代码进行检测以监视运行时的内存访问。检测可以在应用程序源代码或应用程序二进制文件上执行。本教程将介绍如何使用这两种检测程序的方法。

检测源代码

要检测源代码,必须使用特殊的编译器选项 -xinstrument=datarace 对应用程序进行编译。此选项会指示编译器对生成的代码进行检测,以便检测数据争用。

-xinstrument=datarace 编译器选项添加到用于编译程序的现有选项集中。


注 -  使用 -xinstrument=datarace 对程序进行编译时,务必还要指定 –g 选项,目的是生成其他信息以启用线程分析器的全部功能。对程序进行编译以检测数据争用时,不要指定高优化级别。请使用 -xopenmp=noopt 编译 OpenMP 程序。使用高优化级别时,报告的信息(如行号和调用堆栈)可能是错误的。

可以使用以下命令检测本教程的源代码:

% cc -xinstrument=datarace -g -xopenmp=noopt -o prime_omp_inst prime_omp.c -lm
% cc -xinstrument=datarace -g -o prime_pthr_inst prime_pthr.c -lm

请注意,本示例在结尾处使用了 _inst 指定输出文件,因此可以知道该二进制代码是检测后的二进制代码。不过,这不是必需的。

检测二进制代码

要检测程序的二进制代码而非源代码,需要使用 Oracle Solaris Studio 中包含的 discover 工具,discover(1) 手册页和Oracle Solaris Studio 12.4:Discover 和 Uncover 用户指南 中对该工具进行了说明。

对于本教程示例,请键入以下命令编译代码:

% cc -xopenmp=noopt -g -o prime_omp prime_omp.c -lm
% cc -g -O2 -o prime_pthr prime_pthr.c -lm

然后,对所创建的 prime_ompprime_pthr 优化二进制代码运行 discover

% discover -i datarace -o prime_omp_disc prime_omp
% discover -i datarace -o prime_pthr_disc prime_pthr

这些命令将创建检测后的二进制代码 prime_omp_discprime_pthr_disc,可以将这些二进制代码与 collect 一起使用,以创建可使用线程分析器进行检查的实验。