2

gdb を使用してマルチスレッド アプリケーションにアタッチし、その後、cont実行を継続するように入力しました。

  • gdb 状態でいつでも実行を停止し、contすべてのスレッドの動作を確認する方法はありますか?
  • すべてのスレッドの状態を確認し、それぞれの実行行番号を取得する方法は? (コマンド)
4

5 に答える 5

2

これが私がしていることです(ここから取得)

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 です。

サンプリングのニーズに合わせてスリープを調整します。

于 2012-06-09T07:46:41.093 に答える
2

thread apply all bt

または

info threads

t <threadid from above trace > に続く

whereまたbt

于 2012-06-09T08:25:40.173 に答える
1

停止したすべてのスレッドのバックトレースを取得するには、次のように入力します。

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

于 2012-06-09T07:41:34.547 に答える
0

これは、cont gdb状態でいつでも実行を停止し、すべてのスレッドが何をするかを確認する方法ですか?

スレッドなしで実行するスレッドを確認する方法について尋ねる場合はgdb、実行するだけです
pstask <pid-of-your application>

于 2012-06-09T07:43:39.020 に答える
0

「pstask」はLinuxのコマンドではないと思うので、「pstack」ですか。そうである場合は、さらに情報を提供してください

于 2012-06-09T08:34:52.277 に答える