gdb を使用してマルチスレッド アプリケーションにアタッチし、その後、cont
実行を継続するように入力しました。
- gdb 状態でいつでも実行を停止し、
cont
すべてのスレッドの動作を確認する方法はありますか? - すべてのスレッドの状態を確認し、それぞれの実行行番号を取得する方法は? (コマンド)
これが私がしていることです(ここから取得)
stackdumper.gdb
すべてのスレッドのスタック トレースをダンプする小さな gdb スクリプトを作成します。
thread apply all backtrace
次に、繰り返し gdb をアタッチしてダンパーを実行します。
for i in $(seq 1 10) ; do
gdb -batch -x stackdumper.gdb ./a.out 123456 > stack.$i
sleep 10
done
where./a.out
は興味のあるバイナリで、123456 は PID です。
サンプリングのニーズに合わせてスリープを調整します。
thread apply all bt
または
info threads
t <threadid from above trace >
に続く
where
またbt
停止したすべてのスレッドのバックトレースを取得するには、次のように入力します。
thread apply all bt
コマンド (出力は、MacOSX クラッシュ レポート ボックスに表示されるものとまったく同じです)。
通常、スレッドは gdb で同時に停止されます。
参照: http://www.delorie.com/gnu/docs/gdb/gdb_40.html
そして、これがデフォルトの「オールストップ」モードについてです:http://sourceware.org/gdb/onlinedocs/gdb/All_002dStop-Mode.html
これは、cont gdb状態でいつでも実行を停止し、すべてのスレッドが何をするかを確認する方法ですか?
スレッドなしで実行するスレッドを確認する方法について尋ねる場合はgdb
、実行するだけです
pstask <pid-of-your application>
「pstask」はLinuxのコマンドではないと思うので、「pstack」ですか。そうである場合は、さらに情報を提供してください