【发布时间】:2010-05-15 21:31:47
【问题描述】:
我在 Ubuntu 9.10 上使用 GCC 4.4.1 和 GDB 7.0-ubuntu。但是,当使用以下任何开关时,GCC 不会生成调试器信息:-g、-g3、-ggdb 或 -ggdb3。因此,当我使用 GDB 运行程序时,就好像没有生成调试器信息一样。我在一个新的空文件夹中创建了非常简单的测试源文件。
这是一个例子:
#include <stdlib.h>
#include <stdio.h>
int main (int argc, char **argv)
{
char msg[4];
// allocate 4 bytes on the stack
strcpy (msg, "hello world");
// overflow
printf ("%s\n", msg);
return 0;
}
更新:这是我的命令行序列:
gcc -g ./mytest.c -o mytest
gdb ./mytest
更新:我之前打开了 MALLOC_CHECK_=1 以测试代码中的堆栈溢出问题。这有效,所以我得到了堆栈跟踪。但是无论我是否包含调试信息,堆栈跟踪都没有什么不同。我希望在调试器信息中看到的是在 GDB 下出现问题的文件的行号。然而这不会发生。
【问题讨论】:
-
您是否将 -gANYTHING 传递给链接命令行?
-
发布你用来编译程序的命令行,以及你得到的让你认为你的exe没有调试信息的消息
-
好问题。由于它只链接到标准库,我只使用了:gcc -ggdb ./test.c -o test.o。要包含调试器信息,我是否需要分两步编译和链接?
-
哎呀。你刚刚创建了一个名为 test.o 的可执行文件,如果那样的话。