ソースのない一般的なバイナリがあり、シリアルで実行されているか、複数のスレッドが生成されているかを判断したいとします。
Linuxコマンドラインからこれを行う方法はありますか?
ソースのない一般的なバイナリがあり、シリアルで実行されているか、複数のスレッドが生成されているかを判断したいとします。
Linuxコマンドラインからこれを行う方法はありますか?
そのために使えます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を使用してスレッドの作成を中断する方法を示しているため、ここで役立つ場合があります。そのため、スレッドが作成されるたびに実行が停止し、調査する可能性があります。