有什麼區別我想知道使用-O0,-O1和-g來啓用lib中的調試符號。 一些建議使用-O0啓用調試符號,一些建議使用-g。-O0,-O1和-g
那麼-g和-O0之間的實際差異是什麼,以及-01和-O0之間的區別是什麼,哪個最好用。
有什麼區別我想知道使用-O0,-O1和-g來啓用lib中的調試符號。 一些建議使用-O0啓用調試符號,一些建議使用-g。-O0,-O1和-g
那麼-g和-O0之間的實際差異是什麼,以及-01和-O0之間的區別是什麼,哪個最好用。
-OX
指定optimisation level編譯器將執行。 -g
用於生成調試符號。
-O0
不啓用調試符號,它只是禁用在所生成的代碼優化所以調試是容易(彙編代碼如下C代碼或多或少直接地)。 -g
告訴編譯器產生用於調試的符號。
有可能產生符號優化的代碼(只是繼續以指定-g
),而是試圖步執行代碼或像您期望的,因爲發出的代碼可能不會與原來的C「跟着」設置斷點可能無法正常工作來源緊密。所以在這種情況下進行調試可能會相當棘手。
-O1
(與-O
相同)執行最小化的一組優化。 -O0
本質上告訴編譯器不要優化。有跡象表明,允許對你怎麼可能希望編譯器進行非常精細的控制選項的轉換:http://gcc.gnu.org/onlinedocs/gcc-4.6.3/gcc/Optimize-Options.html#Optimize-Options
-O0
是優化級別0(無優化,如同忽略-o參數)
-O1
是優化級別1.
-g
在二進制文件中生成並嵌入調試符號。
查看gcc docs和manpages進一步解釋。
對於做實際調試中,調試器通常不能夠使一個已經編譯優化的東西感,雖然調試符號是即使有其他優化的東西,如產生堆棧跟蹤有用。
正如其他人所說的,-O選項集表示編譯器必須完成的優化級別,而-g選項添加了調試符號。
爲了更詳細的瞭解,請refert以下鏈接
http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options http://gcc.gnu.org/onlinedocs/gcc/Debugging-Options.html#Debugging-Options
從GCC手冊
http://gcc.gnu.org/onlinedocs/
3.10 Options That Control Optimization
-O -O1 Optimize. Optimizing compilation takes somewhat more time, and a lot more memory for a large function. With -O, the compiler tries to reduce code size and execution time, without performing any optimizations that take a great deal of compilation time.
-O2 Optimize even more. GCC performs nearly all supported optimizations that do not involve a space-speed tradeoff. As compared to -O, this option increases both compilation time and the performance of the generated code.
-O3 Optimize yet more. -O3 turns on all optimizations specified by -O2 and also turns on the -finline-functions, -funswitch-loops, -fpredictive-commoning, -fgcse-after-reload, -ftree-vectorize and -fipa-cp-clone options.
-O0 Reduce compilation time and make debugging produce the expected results. This is the default.
-g Produce debugging information in the operating system's native format (stabs, COFF, XCOFF, or DWARF 2). GDB can work with this debugging information.
和--help給你相同的答案;) – 2012-03-12 08:36:24
@Binyamin這是使用,如果我想調試符號。 – 2012-03-12 08:37:37
使用'-g'。 – MByD 2012-03-12 08:38:18