1. ホーム
  2. c

[解決済み] プログラムが信号SIGTRAPを受信した、トレース/ブレークポイントトラップ

2022-02-01 22:54:49

質問事項

ある(組み込み)ソフトウェアをデバッグしています。ある関数にブレークポイントを設定したのですが、なぜかそのブレークポイントに到達すると continue いつもこの関数(一度だけ呼ばれるべき初期化関数)に戻ってきます。ブレークポイントを解除すると continue と、GDBが教えてくれます。

Program received signal SIGTRAP, Trace/breakpoint trap.

ブレークポイントを使用していたので、"ブレークポイントトラップ"に陥ったと推測されます。ブレークポイントトラップとは何ですか?

解決方法は?

ブレークポイントトラップは、プロセッサがブレークポイントに到達したことを意味します。 この現象が発生する理由には2つの可能性があります。 最も可能性が高いのは、CPUがリセットして再びブレークポイントにヒットしたため、初期化コードがヒットしていることです。 もう1つの可能性は、ブレークポイントを設定したコードが、実際には初期化以外の場所で実行されていることです。 コンパイラの最適化により、ブレークポイントがどのコードに対応し、どの実行パスがそこに到達できるかを正確に判断することが難しい場合があります。