【发布时间】:2010-12-28 14:07:30
【问题描述】:
我正在尝试使用 GDB 和 KDEvelop 在 Knoppix VM 下调试控制台应用程序。 KDevelop 和 GDB 不会在我的断点处中断。我怀疑这是因为它们没有调试符号。
如果我是正确的,我需要如何更改我的 Makefile 来创建它们。也许问题出在其他地方?
问候, 爱丽儿
【问题讨论】:
标签: c linux debugging makefile debug-symbols
我正在尝试使用 GDB 和 KDEvelop 在 Knoppix VM 下调试控制台应用程序。 KDevelop 和 GDB 不会在我的断点处中断。我怀疑这是因为它们没有调试符号。
如果我是正确的,我需要如何更改我的 Makefile 来创建它们。也许问题出在其他地方?
问候, 爱丽儿
【问题讨论】:
标签: c linux debugging makefile debug-symbols
完整的例子是:
CFLAGS =-g
all: program.o
gcc -o program program.o
这里的CFLAGS同时适用于编译器和链接器。
【讨论】:
-g 仅应用于编译步骤。这是因为编译是通过隐式的 make 规则进行的,该规则从 program.c 创建 program.o(在 makefile 中没有明确提及 program.c。隐式规则使用 CFLAGS。但是,链接步骤的显式规则如图所示执行 - 因此-g 在链接时不应用(AFAIK 无论如何都不必使用 gcc)。
在发送到编译器和链接器的标志中包含-g。其默认变量分别为CFLAGS 和LDFLAGS。
第二步:从flags中排除-s(-s表示strip)
【讨论】:
如果您能够查看源代码并设置断点,那么您可能已经建立了调试符号。但是,通常的顺序是:
gcc -g -o (outputname) (source files...)
gdb outputname
提供更多关于你在做什么以及你看到什么信息的细节,我们可以更具体。
【讨论】: