【问题标题】:How to generate Debug symbols with Makefile for C? [Linux]如何使用 Makefile for C 生成调试符号? [Linux]
【发布时间】:2010-12-28 14:07:30
【问题描述】:

我正在尝试使用 GDB 和 KDEvelop 在 Knoppix VM 下调试控制台应用程序。 KDevelop 和 GDB 不会在我的断点处中断。我怀疑这是因为它们没有调试符号。

如果我是正确的,我需要如何更改我的 Makefile 来创建它们。也许问题出在其他地方?

问候, 爱丽儿

【问题讨论】:

    标签: c linux debugging makefile debug-symbols


    【解决方案1】:

    完整的例子是:

    CFLAGS =-g
    
    all: program.o
        gcc -o program program.o
    

    这里的CFLAGS同时适用于编译器和链接器。

    【讨论】:

    • 这不是真的。在您的示例中,-g 仅应用于编译步骤。这是因为编译是通过隐式的 make 规则进行的,该规则从 program.c 创建 program.o(在 makefile 中没有明确提及 program.c。隐式规则使用 CFLAGS。但是,链接步骤的显式规则如图所示执行 - 因此-g 在链接时应用(AFAIK 无论如何都不必使用 gcc)。
    【解决方案2】:

    在发送到编译器和链接器的标志中包含-g。其默认变量分别为CFLAGSLDFLAGS

    第二步:从flags中排除-s-s表示strip

    【讨论】:

    • “-g”选项只需要通过 CFLAGS 宏给编译器。不必在 LDFLAGS 宏中包含它。
    • 货物崇拜知识,我猜。在某些时候,我使用了一个必须被告知 不要 丢弃调试符号的链接器...
    【解决方案3】:

    如果您能够查看源代码并设置断点,那么您可能已经建立了调试符号。但是,通常的顺序是:

    gcc -g -o (outputname) (source files...)
    gdb outputname
    

    提供更多关于你在做什么以及你看到什么信息的细节,我们可以更具体。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-20
      • 2014-11-14
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 2014-11-20
      • 2021-08-25
      • 2017-06-28
      相关资源
      最近更新 更多