2

ループ内でSIGFPEが発生しています。ブレークポイントを設定したり、stop、nopassなどでSIGFPEを処理したりすると、この行の後のフレーム変数が失われます。ブレークポイントの場合、最初に、を実行してそこに到達する必要がありますn N。ここNで、は大きな数値です。これにより、SIGFPEが発行されるような変数値が発生するまで、ループがブレークポイント上で実行されます。処理またはブレークポイントによる実行後、フレーム変数を失うため、プログラムを逆検索してさらにデバッグすることはできません(コンテキスト外の変数)。

ループ内のSIGFPEを高速に処理するにはどうすればよいですか?

ありがとう!

新しい情報:論理的な監視ポイントでプログラムを停止することは可能ですか?私は責任のあるフレームに入って、問題の変数が350の値に達することを発見しました(それはゼロよりずっと小さいはずです)。なぜしないのですか

watch x0 > 100

この時点で実行を停止しますか?

4

1 に答える 1

3

watch間違った使い方をします。

http://www.ofb.net/gnu/gdb/gdb_30.html#SEC30

watch expr

式のウォッチポイントを設定します。exprがプログラムによって書き込まれ、その値が変更されると、GDBは壊れます。

したがって、を見ることができませんが、を見ることx0>100ができますx0、またはarray[59](時計の引数はメモリ内のアドレスです)

タスクには、条件付きブレークを使用できます。http://www.ofb.net/gnu/gdb/gdb_29.html#SEC29

break ... if cond

条件condでブレークポイントを設定します。ブレークポイントに到達するたびに式condを評価し、値がゼロ以外の場合、つまりcondがtrueと評価された場合にのみ停止します。`...'は、ブレークする場所を指定する上記の可能な引数の1つ(または引数なし)を表します。ブレークポイント条件の詳細については、「ブレーク条件」のセクションを参照してください。

それで

break main.c:345 if x0>100
于 2011-07-05T14:33:01.903 に答える