可以使用线程分析器检查程序中的潜在死锁和实际死锁。线程分析器沿用与 Sun Studio 性能分析器相同的“收集分析”模型。使用线程分析器包括以下三个步骤:
对源代码进行编译。
创建死锁检测实验。
检查实验结果。
编译代码,并确保指定了 -g。不要指定高优化级别,因为在高优化级别中可能会错误地报告行号和调用栈等信息。使用 -g -xopenmp=noopt 编译 OpenMP 程序,仅使用 -g -mt 编译 POSIX 线程程序。
有关更多信息,请参见 cc.1、CC.1 或 f95.1。
使用线程分析器的带有 -r deadlock 选项的 collect 命令。此选项将在执行程序的过程中创建死锁检测实验。
可通过创建多个死锁检测实验提高检测到死锁的可能性。为不同的实验使用不同的线程数和不同的输入数据。
有关更多信息,请参见 collect.1 和 collector.1。
可以使用 tha 命令、analyzer 命令或 er_print 实用程序检查死锁检测实验。当 er_print
使用命令行界面时,线程分析器
和分析器
均代表 GUI 界面。
有关详细信息,请参见 tha.1、analyzer.1 和 er_print.1。
线程分析器包含菜单栏、工具栏和包含各种选项卡的拆分窗格(不同选项卡对应不同的显示)。在左窗格上,缺省情况下显示以下三个选项卡:
“死锁”选项卡
此选项卡显示线程分析器在程序中检测到的潜在死锁和实际死锁列表。缺省情况下此选项卡处于选中状态。显示每个死锁涉及的线程。这些线程构成了一个循环链,其中每个线程都占用一个锁,并请求使用链中下一个线程占用的另一个锁。
“双重数据源”选项卡
在循环链中选择线程,并单击“双重数据源”选项卡。“双重数据源”选项卡显示线程占用锁的源位置,以及同一线程请求锁的源位置。突出显示线程占用锁和请求锁的源代码行。
“实验”选项卡
此选项卡显示实验中的装入对象,并列出错误和警告消息。在线程分析器显示屏的右窗格上,显示以下两个选项卡:
“摘要”选项卡显示在“死锁”选项卡中选择的死锁的摘要信息。
“死锁详细信息”选项卡显示“死锁”选项卡中选择的线程上下文的详细信息。
er_print
界面与左窗格相对应,右窗格包含了“死锁详细信息”选项卡,该选项卡中显示了“死锁”选项卡中选择的死锁的详细信息。使用 er_print
检查死锁的最有用的子命令如下:
-deadlocks
此选项报告在实验中检测到的任意潜在死锁和实际死锁。
-ddetail deadlock_id
此选项返回具有指定 deadlock_id 的死锁的详细信息。如果指定值 all 作为 deadlock_id,则 er_print
将显示所有死锁的详细信息。
-header
此选项显示有关实验的描述性信息,并报告所有错误或警告。
有关更多信息,请参见 er_print.1。