Sun Studio 12:线程分析器用户指南

3.3 如何使用线程分析器查找死锁

可以使用线程分析器检查程序中的潜在死锁和实际死锁。线程分析器沿用与 Sun Studio 性能分析器相同的“收集分析”模型。使用线程分析器包括以下三个步骤:

3.3.1 对源代码进行编译

编译代码,并确保指定了 -g。不要指定高优化级别,因为在高优化级别中可能会错误地报告行号和调用栈等信息。使用 -g -xopenmp=noopt 编译 OpenMP 程序,仅使用 -g -mt 编译 POSIX 线程程序。

有关更多信息,请参见 cc.1CC.1f95.1

3.3.2 创建死锁检测实验

使用线程分析器的带有 -r deadlock 选项的 collect 命令。此选项将在执行程序的过程中创建死锁检测实验。

可通过创建多个死锁检测实验提高检测到死锁的可能性。为不同的实验使用不同的线程数和不同的输入数据。

有关更多信息,请参见 collect.1collector.1

3.3.3 检查实验结果

可以使用 tha 命令、analyzer 命令或 er_print 实用程序检查死锁检测实验。当 er_print 使用命令行界面时,线程分析器分析器均代表 GUI 界面。

有关详细信息,请参见 tha.1analyzer.1er_print.1

3.3.3.1 线程分析器界面

线程分析器包含菜单栏、工具栏和包含各种选项卡的拆分窗格(不同选项卡对应不同的显示)。在左窗格上,缺省情况下显示以下三个选项卡:

3.3.3.2 er_print 界面

与左窗格相对应,右窗格包含了“死锁详细信息”选项卡,该选项卡中显示了“死锁”选项卡中选择的死锁的详细信息。使用 er_print 检查死锁的最有用的子命令如下:

有关更多信息,请参见 er_print.1