の中でGCCがコードを削除しないようにするにはどうすればよいですか?(0)ブロック?gccで "if(0)"の除去を無効にする
if (0)
do_some_debug_printing_and_checking();
その後
、ブレークポイントがヒットしたとき、私はdo_some_debug_printing_and_checkingでクリックしてください()ライン:
私は、Visual Studioを使用して、私のデバッグ技術の一つは、私のプログラムでは、このようなコードを置くことです「次の文を設定」を選択して強制的に実行します。
バックエンドとしてgcc/gdbを使用すると、GCCは(0)文の場合、GCCが単にコードを内から削除するため、「set next statement」は機能しなくなります。
もちろん、-O0フラグを使用して最適化を無効にしています。また、-fno-dce -fno-tree-dceフラグをデッドコード除去を明示的に無効にするように試みましたが、効果はありません。 次の文を使用してジャンプすることはできません。
gccにの削除を無効にする方法はありますか?(0)の内容は?
編集:
- それはまだそれが勝ったコードの余分な行
- だ:「追加の変数」の回避策について
おかげで、しかし、私はそれについて好きではない2つのことがあります私がリリース版をビルドするときに自動的に最適化されていて、それらのデバッグが消えてしまわないようにしてください。確かに私は#ifdef-sを使うことができますが、それはもっと余分な行です。
本当にGCCにデッドコードを保存させるオプションはありませんか?
私は、これはあなたが求めていたものではありません知っているが、してみてくださいifにはグローバル変数をfalseに設定してください。そうすれば、コンパイラはif文を最適化しません。 –
その機能を実行したいときにgdbで単に 'do_some_debug_printing_and_checking()'を呼び出さないのはなぜですか? – Mat