私は(組み込みの)ソフトウェアをデバッグしています。関数にブレークポイントを設定しました。何らかの理由で、そのブレークポイントに到達してcontinue
になったら、常に関数に戻ります(これは初期化関数で、呼び出しは1回のみです)。ブレークポイントとcontinue
を削除すると、GDBは次のように表示します。
Program received signal SIGTRAP, Trace/breakpoint trap.
私はブレークポイントで作業していたので、「ブレークポイントトラップ」に陥ったと仮定しています。ブレークポイントトラップとは何ですか?
ブレークポイントトラップは、プロセッサがブレークポイントに到達したことを意味します。これが起こっている理由には2つの可能性があります。 CPUがリセットされ、ブレークポイントに再度ヒットするため、おそらく初期化コードがヒットしています。他の可能性は、ブレークポイントを設定したコードが実際に初期化以外の場所で実行されることです。積極的なコンパイラ最適化では、ブレークポイントがどのコードにマップされ、どの実行パスがそこに到達できるかを正確に判断するのが難しい場合があります。
私が考えることができる他の可能性は:
1.プロセスが実行中複数のスレッド。
たとえば-2はxとyを言います。
2。スレッドyはブレークポイントにヒットしますが、スレッドxにgdbを接続しています
このケースは、トレース/ブレークポイントトラップです。
Visual Studio 2015でLinuxプロジェクトを実行し、リモートでデバッグすると、この問題が発生しました。私の解決策はproject_properties->構成プロパティ->デバッグ->デバッグモードで、値を「gdbserver」から「gdb」に変更します