2016-06-16 3 views
0

gdb v7.10でC++コードをデバッグしています。自分のプログラムでどこかに壊れている変数があります。この変数は100の場所で使用されていますが、破損する可能性のある場所は20です。 私は20のブレークポイントを設定しましたが、これらのブレークポイントが20になるたびに古い値と新しい値が出力されます。私は単一のブレークポイントで知っている私は実行されるコマンドのリストを行うことができますが、私は20を持っています。gdbはブレークポイントで古い値と新しい値を出力します

私はそれが私が正しくデバッグできない多くの場所でヒットするので、時計を使用することはできません。

+0

変数の破損が疑われる場合は、おそらくValgrindが適切なデバッグツールです。 – ks1322

答えて

0

gbdには、ブレークポイントがヒットしたときにcommands命令を使用していくつかのコマンドを実行する方法があります。ここでは、変数の値を出力し、自動続けて使用例です:

break 403 
commands 
silent 
printf "x is %d\n",x 
cont 
end 

詳細についてはthisを参照してください

0
あなたにはバックステップGDBの「デバッグ逆」機能を使用することができます

それが変更された前の値が何であったか、時間と見る - 「RR」ツールは、さらなるステップをデバッグ逆取るhttps://www.gnu.org/software/gdb/news/reversible.html

、あなたにも、それを調査することをお勧めします - http://rr-project.org

0

私は20のブレークポイントを設定しました

これは、この問題をデバッグする最善の方法ではないかもしれません。 watchcommandに精通していますか?

変数がに変更された場所が20ヵ所ある場合、変数にウォッチポイントを設定すると、変数の値が変更されたときに停止するときに正確に停止します。

ボーナスとして、ウォッチポイントを停止すると、古い値と新しい値が自動的に印刷されます。

関連する問題