我有一个简单的.c文件:
$ cat a.c
int i=0;
int j;
static int l=4;
void k(){}
void main(){
k();
}
我尝试使用“-Og”编译它以启用调试信息。海湾合作委员会男子说
-Og优化调试体验 -Og启用不会干扰调试的优化。
但是当我使用“gdb a.out”并尝试“list”时,它会说:
(gdb)l
没有符号表读。请使用“file”命令。
这是非常奇怪的,如果我使用gcc a.c -g
,“list”在gdb中很好。
那是为什么?
答案 0 :(得分:3)
-Og是优化开关。它支持任何不干扰调试的优化,但对调试信息一无所知。
-g启用调试信息(通常是一个单独的非代码部分)。
因此,使用-Og -g或类似方法来启用调试信息和调试优化。
使用-g构建只启用了调试信息,但是在默认级别(完全禁用)时保留了优化。
有关调试选项in GCC manual的更多信息,包括: “如果你没有使用其他一些优化选项,考虑使用-gg(参见优化选项)和-g。根本没有-O选项,一些编译器传递收集对调试有用的信息根本不运行,所以 - Og可能会带来更好的调试体验。“