dbx コマンドによるデバッグ

マルチスレッドデバッグについて

dbx は、マルチスレッドプログラムを検出すると、libthread_db.sodlopen を試行します。これは、/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()

別のスレッドのコンテキストの表示

表示コンテキストを別のスレッドに切り替えるには、thread コマンドを使用します。この構文は次のとおりです。


thread [-info] [-hide] [-unhide] [-suspend] [-resume] tid

現在のスレッドを表示するには、次のように入力します。


thread

スレッド tid に切り替えるには、次のように入力します。


thread tid

スレッドリストの表示

次のコマンドは、threads リストを表示するためのものです。構文は次のとおりです。


threads [-all] [-mode [all|filter] [auto|manual]]

既知のスレッドすべてのリストを表示するには、次のように入力します。


threads

通常は表示されないスレッド (ゾンビ) などを表示するには、次のように入力します。


threads -all

実行の再開

プログラムの実行を再開するには、cont コマンドを使用します。現在、スレッドは同期ブレークポイントを使用して、すべてのスレッドが実行を再開するようにしています。