2011-10-08 8 views
8

Linuxプロセスでpthreadのスレッドをトレースするためのツールは見つかりませんでした。私はstrace/ltraceのようなものが欲しいです、リアルタイムでコールを見るためのものがありますか? ありがとうLinuxでpthreadをトレースしていますか?

答えて

14

straceはスレッド用にも機能します。すべてのスレッドをstraceするにはstrace -fを使用してください。

特定のスレッドのみをstraceするには、まずそのtid(スレッドID)を見つける必要があります。 スレッドは実際にはpid(プロセスID)のスレッドIDを持っています

スレッドのPIDを知ったら、strace -p the_pidを使ってそのスレッドをstraceしてください。

プロセス内のすべてのスレッドのPIDは、/proc/<pid>/task/にあります。現在のスレッドIDは、gettid()のCコールで学習できます。

+0

wow大変ありがとう、straceの助けを100回見ましたが、フォローフォークがスレッドを表示するとは思わなかった – Sergey

+1

これは(私にとっては、とにかく)機能しません。具体的には、strace -f -p を使用して、見たいスレッドをアタッチしています。新しいソケット接続を受け入れるたびに、それを処理するためのpthreadが作成されますが、straceはpthread_create呼び出しを新しいスレッドにまったく引き継ぎません。 – Michael

0

実際には、straceはperfと同じくらい良いわけではありません。

perfツールを使用すると、詳細情報を取得できます。例えば

あなたのスレッドの一部がハング、そしてあなたがハングアップコールの機能何を知りたい場合は、PID-ID -p 使用straceのは、限られた情報を返しますが、PERFのトップ、またはPERF -t tidが

よりを戻します
関連する問題