Oracle® Solaris Studio 12.4: dbx コマンドによるデバッグ

印刷ビューの終了

更新: 2015 年 1 月
 
 

スレッド作成動作について

次の例に示すように、thr_create イベントと thr_exit イベントを使用して、アプリケーションがスレッドを作成および破棄する頻度を調べることができます。

(dbx) trace thr_create
(dbx) trace thr_exit
(dbx) run

trace: thread created t@2 on l@2
trace: thread created t@3 on l@3
trace: thread created t@4 on l@4
trace: thr_exit t@4
trace: thr_exit t@3
trace: thr_exit t@2

ここでは、アプリケーションが 3 つのスレッドを作成します。スレッドは作成されたのとは逆の順序で終了し、アプリケーションにそれ以上のスレッドがある場合は、スレッドが累積されてリソースを消費します。

より広範囲な情報を得るために、別のセッションで次の例を試してみることもできます。

(dbx) when thr_create { echo "XXX thread $newthread created by $thread"; }
XXX thread t@2 created by t@1
XXX thread t@3 created by t@1
XXX thread t@4 created by t@1

この出力には、3 つのすべてのスレッドがスレッド t@1 によって作成されたことが示されています。これは、一般的なマルチスレッド化のパターンです。

スレッド t@3 を、その出力セットからデバッグする場合を考えます。次のようにすると、スレッド t@3 が作成されたポイントでアプリケーションを停止できます。

(dbx) stop thr_create t@3
(dbx) run
t@1 (l@1) stopped in tdb_event_create at 0xff38409c
0xff38409c: tdb_event_create       :    retl
Current function is main
216       stat = (int) thr_create(NULL, 0, consumer, q, tflags, &tid_cons2);
(dbx)

アプリケーションがスレッド t@1 ではなく、スレッド t@5 から新しいスレッドを生成することがある場合は、そのイベントを次のように取得できます。

(dbx) stop thr_create -thread t@5