2012-03-12 64 views
0

有什麼區別我想知道使用-O0,-O1和-g來啓用lib中的調試符號。 一些建議使用-O0啓用調試符號,一些建議使用-g。-O0,-O1和-g

那麼-g和-O0之間的實際差異是什麼,以及-01和-O0之間的區別是什麼,哪個最好用。

回答

4

-OX指定optimisation level編譯器將執行。 -g用於生成調試符號。

+3

和--help給你相同的答案;) – 2012-03-12 08:36:24

+0

@Binyamin這是使用,如果我想調試符號。 – 2012-03-12 08:37:37

+0

使用'-g'。 – MByD 2012-03-12 08:38:18

1
-O0

不啓用調試符號,它只是禁用在所生成的代碼優化所以調試是容易(彙編代碼如下C代碼或多或少直接地)。 -g告訴編譯器產生用於調試的符號。

有可能產生符號優化的代碼(只是繼續以指定-g),而是試圖步執行代碼或像您期望的,因爲發出的代碼可能不會與原來的C「跟着」設置斷點可能無法正常工作來源緊密。所以在這種情況下進行調試可能會相當棘手。

-O1(與-O相同)執行最小化的一組優化。 -O0本質上告訴編譯器不要優化。有跡象表明,允許對你怎麼可能希望編譯器進行非常精細的控制選項的轉換:http://gcc.gnu.org/onlinedocs/gcc-4.6.3/gcc/Optimize-Options.html#Optimize-Options

6

-O0是優化級別0(無優化,如同忽略-o參數)

-O1是優化級別1.

-g在二進制文件中生成並嵌入調試符號。

查看gcc docs和manpages進一步解釋。

對於做實際調試中,調試器通常不能夠使一個已經編譯優化的東西感,雖然調試符號是即使有其他優化的東西,如產生堆棧跟蹤有用。

2

從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.