【问题标题】:Why gcc -Og doesn't generate source code-line mapping?为什么 gcc -Og 不生成源代码行映射?
【发布时间】:2016-10-19 03:46:11
【问题描述】:

我有一个简单的 .c 文件:

$ cat a.c
int i=0;
int j;
static int l=4;
void k(){}
void main(){
  k();
}

我尝试用“-Og”编译它以启用调试信息。 GCC 人说

-Og 优化调试体验。
-Og 启用不干扰调试的优化。

但是当我使用“gdb a.out”并尝试“list”时,它会说:

(gdb) l
未读取符号表。请使用“文件”命令。

这太奇怪了,出乎我的意料,如果我使用gcc a.c -g,“列表”在 gdb 中就可以了。 这是为什么呢?

【问题讨论】:

    标签: gcc gdb mapping symbol-table


    【解决方案1】:

    -Og 是优化开关。它启用任何不干扰调试的优化,但不涉及调试信息。

    -g 启用调试信息(通常是单独的非代码部分)。

    因此,请使用 -Og -g 或类似方法来启用调试信息和调试优化。

    您使用 -g 的构建仅启用了调试信息,但将优化保留在默认级别(完全禁用)。

    有关调试选项in GCC manual 的更多信息,包括: “如果您不使用其他优化选项,请考虑将 -Og(请参阅优化选项)与 -g 一起使用。根本没有 -O 选项,一些收集对调试有用的信息的编译器传递根本不会运行,因此 - Og 可能会带来更好的调试体验。”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 2020-10-16
      • 2017-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多