5

を使用してマルチスレッドアプリケーションをデバッグしていますddd

同時に、毎秒、新しいスレッドが作成されていることをDDDコンソールで確認できます。

 [NewThread 0x455fc940 (LWP 27373)]

そしてその直後に破壊されました。

 [Thread 0x455fc940  (LWP 27373) exited]

数分後、私はこのテキストを出しました

 [NewThread 0x455fc940 (LWP 27363)]
 [Thread 0x455fc940  (LWP 27363) exited]
 [NewThread 0x455fc940 (LWP 27367)]
 [Thread 0x455fc940  (LWP 27367) exited]
 [NewThread 0x455fc940 (LWP 27373)]
 [Thread 0x455fc940  (LWP 27373) exited]
 ...and so on..

このLWPが増加します。

脅威の出入りが速すぎて、[ステータス]->[スレッド]をクリックしたウィンドウを使用して表示できません。そのスレッドに関する情報を取得する方法について少し教えていただけますか?

このLWPが常に増加している理由を知っていますか?そのスレッドにランチされる関数を取得する方法はもっと重要ですか?

すべてのAFGに感謝します

4

2 に答える 2

9

LWPは頭字語で、LightWeightProcessの略です。これは、実際には、新しく生成された各スレッドのスレッドIDです。

これらのスポーンスレッドと死にかけているスレッドをどうするかについて:ブレークポイントをに設定してみることができcloneます。これは、特定の関数で新しいスレッドを開始するシステムコールです(?私は正しいですか?)。

注:cloneスレッドが開始される場所がわかっているが、実際にはスレッドがない場合は、clone...の引数として指定された関数にブレークポイントを設定できます。

つまり、gdbまたはdddからstartコマンドを使用してプログラムを開始します。このコマンドは、プログラムのエントリポイント(つまりmain)に一時的なブレークポイントを設定します。ブレークポイントをに設定するよりもclone、続行して何が起こるかを確認します;)。

更新:ブレークポイントを設定するとclone、少なくとも私のテストではうまくいきます。これはLinux固有であり、実際にpthread_create使用されるものであることを付け加えておきます。

于 2011-01-14T15:43:49.860 に答える
4

pthread_createにブレークポイントを設定します。

(gdb) break pthread_create
Breakpoint 1 at 0x20c49ba5cabf44

これを実行すると、スレッドを作成する次の呼び出しが発生したときに実行が停止し、入力whereして呼び出し元が誰であるかを確認できます。

于 2011-01-14T15:53:08.013 に答える