我只为自己使用我的程序。 我应该总是用-g3(Debug max)编译它,因为有时我需要调试它吗?
如果使用-g0(Debug none),与-g3(Debug max)相比,我的程序执行速度更快?
答案 0 :(得分:3)
关于-gLEVEL
(来自gcc manual):
请求调试信息并使用级别指定信息量。 默认级别为2 。
级别0 根本不会产生调试信息。因此,-g0否定-g。
1级产生最少的信息,足以在您不打算调试的程序部分中进行回溯。这包括函数和外部变量的描述,以及行号表,但没有关于局部变量的信息。
3级包含额外信息,例如程序中存在的所有宏定义。使用-g3时,某些调试器支持宏扩展。
因此,-g0
和-g3
之间的区别在于,在级别0中,您不会获得调试符号,级别3会得到很多符号。
无论如何,调试符号位于与代码/数据部分完全不同的部分。您可以查看objdump
(您可以阅读How do debug symbols affect performance of a Linux executable compiled by GCC?)。
严格地说-g0
你不应该得到更快的程序但是很多调试符号程序加载时间可能会更长。
值得注意的是,对于GCC,调试符号(-g
)和优化级别(例如-O2
)的存在是正交的,您可以使用-g -O2
丢失编译器优化(您只是获得不太有用的调试信息,因为优化的代码与原始源代码不太相似)。
我还考虑-Og
优化级别(GCC 4.8引入):
引入了新的常规优化级别
-Og
。它 解决了快速编译和高级调试的需要 在提供合理级别的运行时性能的同时获得经验 总体发展经验应优于默认 优化级别-O0
。