Linux上で静的マルチスレッドx86-64 C++アプリケーションをデバッグしています。gdbのステップが期待どおりに動作しない
私は関数にブレークポイントを設定してそれらを停止することができ、私は関数本体に対してステップバイステップで歩くことができます。しかし、私が別の関数に踏み込もうとすると、gdbはそれが始まった時点で止まらず、実行を続けるように見えます。私はプログラムの実行を中断すると、GDBは状態を破らに進み、使用できなくなった:回避策として
(gdb) bt
Target is executing.
(gdb) c
Continuing.
Cannot execute this command while the selected thread is running.
(gdb)
私はstepi
数回の代わりに、予想通りstep
、stepi
作品を使用することができます。 この動作の理由は何ですか? stepi
以外の回避策はありますか? gdb 7.6とgcc 4.7.1を使用しています。
で利用できます。 '-ggdb'と' -O0'を使ってターゲットをコンパイルしましたか? step( 's')とnext(' n')の違いを観察しようとしましたか? – Reinderien
@Reinderien、私のターゲットは '-g'と' -O0'でコンパイルされています。 's'と' n'の違いをどうやって見ることができますか? – ks1322
'-g'から' -ggdb'に変更してみてください。違いを見るには、gdbの 's'(事実上"ステップイン ")と' n'(事実上 "ステップオーバー")を打ちます。 – Reinderien