5

ソースのない一般的なバイナリがあり、シリアルで実行されているか、複数のスレッドが生成されているかを判断したいとします。

Linuxコマンドラインからこれを行う方法はありますか?

4

3 に答える 3

4

そのために使えますps。からman ps:

-L     Show threads, possibly with LWP and NLWP columns.

したがって、次のことができます。

$ ps -L <pid>

次のようなものが表示されます。

 PID   LWP TTY      STAT   TIME COMMAND
4112  4112 ?        Sl    65:35 /usr/lib/firefox/firefox
4112  4116 ?        Sl     0:04 /usr/lib/firefox/firefox

出力の各行は 1 つのスレッドに対応します。もちろん、これは特定の瞬間にのみ機能します。スレッドのスポーンを追跡するには、Jonathon Reinhart の提案に従って strace を使用します。

に代わるものstraceは、もちろんですgdb。gdb でスレッドを管理する方法の詳細については、この質問を参照してください。gdb マニュアルのスレッド セクションを読むこともできます。簡単な紹介:

$ gdb /usr/lib/firefox/firefox <pid>
[... initialization output ...]
> info threads    # lists threads
> thread <nr>     # switch to thread <nr>

あなたのコメント:

プログラムの実行に数秒しかかからない場合、命令レベルのブレークポイントを設定する場所をどのように見つければよいでしょうか?

この回答pthread_createは、 gdbを使用してスレッドの作成を中断する方法を示しているため、ここで役立つ場合があります。そのため、スレッドが作成されるたびに実行が停止し、調査する可能性があります。

于 2013-05-17T00:41:02.767 に答える