dbx は、マルチスレッドプログラムを検出すると、libthread_db.so の dlopen を試行します。これは、/usr/lib にあるスレッドデバッグ用の特別なシステムライブラリです。
dbx は同期的に動作します。つまり、スレッドか軽量プロセス (LWP) のいずれかが停止すると、ほかのスレッドおよび LWP もすべて自動的に停止します。この動作は、「世界停止」モデルと呼ばれる場合があります。
(dbx) threads *> t@1 a l@1 ?() ブレークポイント :現在の関数 main() t@2 b l@2 ?() 実行中 :現在の関数 __signotifywait() t@3 ?() スリープ(対象不明) :現在の関数 _swtch() t@5 mt_sig() 実行可能 :現在の関数 _restorefsr()
* (アスタリスク) は、ユーザーの注意を必要とするイベントがこのスレッドで起こったことを示します。
アスタリスクの代わりに「o」が示される場合は、dbx 内部イベントが発生しています。
矢印は現在のスレッドを示します。
t@num はスレッド ID であり、特定のスレッドを指します。number は、thr_create によって返された thread_t の値になります。
b l@num は指定の LWP に結合していることを示し、a l@num は LWP に結合しアクティブであることを示します。
thr_create に渡されたスレッドの開始関数。?() は開始関数が不明であることを示します。
スレッドの状態。
スレッドが現在実行している関数。
表示コンテキストを別のスレッドに切り替えるには、thread コマンドを使用します。この構文は次のとおりです。
thread [-info] [-hide] [-unhide] [-suspend] [-resume] tid
thread
thread tid
次のコマンドは、threads リストを表示するためのものです。構文は次のとおりです。
threads [-all] [-mode [all|filter] [auto|manual]]
既知のスレッドすべてのリストを表示するには、次のように入力します。
threads
通常は表示されないスレッド (ゾンビ) などを表示するには、次のように入力します。
threads -all
プログラムの実行を再開するには、cont コマンドを使用します。現在、スレッドは同期ブレークポイントを使用して、すべてのスレッドが実行を再開するようにしています。