web-dev-qa-db-ja.com

プログラムがシグナルSIGTRAPを受信、トレース/ブレークポイントトラップ

私は(組み込みの)ソフトウェアをデバッグしています。関数にブレークポイントを設定しました。何らかの理由で、そのブレークポイントに到達してcontinueになったら、常に関数に戻ります(これは初期化関数で、呼び出しは1回のみです)。ブレークポイントとcontinueを削除すると、GDBは次のように表示します。

Program received signal SIGTRAP, Trace/breakpoint trap.

私はブレークポイントで作業していたので、「ブレークポイントトラップ」に陥ったと仮定しています。ブレークポイントトラップとは何ですか?

18
Randomblue

ブレークポイントトラップは、プロセッサがブレークポイントに到達したことを意味します。これが起こっている理由には2つの可能性があります。 CPUがリセットされ、ブレークポイントに再度ヒットするため、おそらく初期化コードがヒットしています。他の可能性は、ブレークポイントを設定したコードが実際に初期化以外の場所で実行されることです。積極的なコンパイラ最適化では、ブレークポイントがどのコードにマップされ、どの実行パスがそこに到達できるかを正確に判断するのが難しい場合があります。

10
TJD

私が考えることができる他の可能性は:

1.プロセスが実行中複数のスレッド

たとえば-2はxとyを言います。

2。スレッドyはブレークポイントにヒットしますが、スレッドxにgdbを接続しています

このケースは、トレース/ブレークポイントトラップです。

13
b1tchacked

Visual Studio 2015でLinuxプロジェクトを実行し、リモートでデバッグすると、この問題が発生しました。私の解決策はproject_properties->構成プロパティ->デバッグ->デバッグモードで、値を「gdbserver」から「gdb」に変更します

1
S.Seba