Sun Studio 12: dbx コマンドによるデバッグ

スレッド情報

dbx では、次のスレッド情報を入手できます。


(dbx) threads
    t@1 a l@1  ?()  実行中 : 現在の関数 main()
    t@2      ?() 0xef751450 でスリープ : 現在の関数  in_swtch()
    t@3 b l@2  ?()  実行中 : 現在の関数 sigwait()
    t@4     consumer()  0x22bb0 でスリープ : 現在の関数 in _lwp_sema_wait()
  *>t@5 b l@4 consumer()  ブレークポイント : 現在の関数 Queue_dequeue()
    t@6 b l@5 producer()     実行中 : 現在の関数 in _thread_start()
(dbx)

ネイティブコードに対して、情報の各行の内容は次のとおりです。

Java コードでは、情報の各行は次で構成されています。

表 11–1 スレッドの状態と LWP の状態

スレッドの状態と LWP の状態 

内容の説明 

中断 

スレッドは明示的に中断されています。 

実行可能 

スレッドは実行可能であり、コンピューティング可能なリソースとして LWP を待機しています。 

ゾンビ 

結合されてないスレッド (thr_exit) がある場合、thr_join() で再結合するまでゾンビ状態になります。THR_DETACHED は、ス レッド作成時に指定するフラグです (thr_create())。非結合のスレッドは、再実行されるまでゾンビ状態です。

syncobj でスリープ中

スレッドは所定の同期オブジェクトでブロックされています。libthreadlibthread_db によるサポートレベルにより、syncobj が伝える情報は単純な 16 進アドレスになったり、より詳細な内容になります。

アクティブ 

LWP でスレッドがアクティブですが、dbx は LWP をアクセスできません。

未知 

dbx では状態を判定できません。

lwpstate

結合スレッドやアクティブスレッドの状態に、LWP の状態が関連付けられています。 

実行中 

LWP が実行中でしたが、ほかの LWP と同期して停止しました。 

システムコール num

所定のシステムコール番号の入口で LWP が停止しました。 

システムコール num 戻り

所定のシステムコール番号の出口で LWP が停止しました。 

ジョブコントロール 

ジョブコントロールにより、LWP が停止しました。 

LWP 中断 

LWP がカーネルでブロックされています。 

シングル中断 

LWP により、1 ステップが終了しました。 

ブレークポイント 

LWP がブレークポイントに達しました。 

障害 num

LWP に所定の障害番号が発生しました。 

シグナル name

LWP に所定のシグナルが発生しました。 

プロセス sync 

この LWP が所属するプロセスの実行が開始しました。 

LWP 終了 

LWP は終了プロセス中です。