たとえば、未定義の動作を引き起こすコードなど、悪いコードを書く人もいます。ここで、未定義の動作が、最適化が少ないかまったくない場合には「正しく」動作しているように見えますが、 で悲惨なクラッシュを引き起こすとしましょう-O3
。でこの問題をデバッグしたいと思う-O3
でしょう。そのため、フラグを追加し-g
て町に行くしかありませんが、最適化によってデバッグエクスペリエンスが多少損なわれる可能性があります.
一般に、「デバッグ/リリース」軸と「最適化/非最適化」軸を混同するビルド システムには大きな問題があります。本当に、それらは直交している必要があります。たとえば、ロギングを使用して「デバッグ」ビルドを行うことが望ましいことがよくありますが、最適化を有効にして高速に実行することもできます。同様に、最適化されたビルドで使用可能なデバッグ シンボルがなければ、オプティマイザー関連のバグを追跡することは非常に困難になる可能性があります。
+--------------------------------+
| Optimizations |
+-----------------+--------------+
| On | Off |
+----------+------+-----------------+--------------+
| | On | Debug optimized | Best debug |
| Debug | | code | experience |
| Logging/ +------+-----------------+--------------+
| Symbols | Off | Release build | Probably not |
| | | for customers | useful |
+----------+------+-----------------+--------------+