有時候人們寫的不好的代碼 - 也許這會導致不確定的行爲,例如代碼。現在讓我們假設未定義的行爲似乎在低優化或不優化的情況下「正確地」工作,但是它在-O3
處導致災難性的崩潰。你將要在-O3
調試這個問題,對吧?因此,除了增加一個-g
標誌並前往城鎮外,您別無選擇,即使調試體驗可能會因優化而受到一定程度的損害。
有一般一個大問題,構建系統的混爲一談「調試/發佈」軸與「優化/未優化」軸。說真的,他們應該是正交的 - 它往往需要有「調試」伐木建,例如,但仍然有它啓用了優化,運行速度快。同樣,如果您的優化版本中沒有可用的調試符號,追蹤優化器相關的錯誤可能非常困難。
+--------------------------------+
| Optimizations |
+-----------------+--------------+
| On | Off |
+---------+------+-----------------+--------------+
| | On | Debug optimized | Best debug |
| Debug | | code | experience |
| Symbols +------+-----------------+--------------+
| | Off | Release build | Probably not |
| | | for customers | useful |
+---------+------+-----------------+--------------+
..或者如果您試圖調試優化後的代碼(這可能與未優化的代碼有不同的錯誤)。究竟是什麼問題? –
問題是,爲什麼我期待在環境編譯調試版本與'-O3 -g3'。我試圖弄清楚,只有'-g3',你不能學習什麼信息。我隱約知道你也提供了答案,但我正在尋找例子或進一步澄清。 – patrickvacek