Gdbを使用してC++プログラムをデバッグしています。
私はこのコードを持っています:
int x = floor(sqrt(3));
そして、xの値を表示したいと思います。ただし、gdbは、xが「<optimized_out>」であると主張しています。 xの値を表示するにはどうすればよいですか?コンパイラフラグを変更する必要がありますか?
ここで見たように、高い最適化レベルでは、コンパイラーは中間値を削除できます。多くのオプションがあります:
-O0
は確実に動作します(ただし、かなり遅くなります)、-O1
も同様に機能する可能性があります。最適化を無効にできない場合、または無効にしたくない場合は、変数をvolatileとして宣言してみてください。これは通常、コンパイラに最終コードの変数を保存させるのに十分です。
または、最新のGCCバージョンでは、次のように関数のみの最適化を無効にできます。
void my_function() __attribute__((optimize(0)))
{
int x = floor(sqrt(3));
}
独自の「グローバル変数」を作成し、最適化された出力変数をこのグローバル変数に出力します。デバッグが完了したら、作成したこれらのグローバルを必ず削除してください!