1

-gおよび-Oコンパイラフラグでコンパイルされた大きなバイナリがあります。問題は、gdbを使用したデバッグ中に、一部のファイル/行にブレークポイントを設定しても、そのファイル/行でブレークしないか、他の行でブレークすることです。これは、-Oコンパイラフラグ(最適化に使用)が原因である可能性があることを理解しています。残念ながら、注意が必要なスクリプトレベルが多数あるため、コンパイラの-Oフラグを削除することはできません。

必要なファイル/行の場所でコードを確実に中断するにはどうすればよいですか?追加できるコード行がありますが、これは常に最適化されていないか、gdbを使用してデバッグするときに壊れます-私はこのようなものを試しました-

int x; int y;

しかし、それでもGDBブレークポイントは正しく機能しませんでした-どうすれば正しく設定できますか?

4

1 に答える 1

1

インライン化と最適化という 2 つの問題が考えられます。インライン化や最適化を無効にするようにコンパイラに指示する標準的な方法はないため、コンパイラ固有の方法でのみ行うことができます。

GCC でインライン化を無効にするには、メソッドで使用できます__attribute__((noinline))

コンパイラが関数を最適化することを禁止するには (そして、テストされていない場合は、ブレークポイントを設定できる安定したコード行を提供します)、これをコードに追加するだけです。

asm ("");

これらはどちらもこのページに記載されています

于 2013-03-21T14:54:42.943 に答える