我在 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 下出现问题的文件的行号。然而,这并没有发生。
最佳答案
它工作正常。我在我的电脑上运行了调试器。我必须添加
#include <string.h>
不过要编译它。我将文件命名为 debugger.c
。以下是步骤:
gcc -g debugger.c
gdb a.out
这将启动调试器
GNU gdb 6.3.50-20050815
...
...
(gdb) run
Starting program: /Developer/stackoverflow/extern/a.out
Reading symbols for shared libraries +. done
Program received signal SIGABRT, Aborted.
0x00007fff88040886 in __kill ()
(gdb) backtrace
#0 0x00007fff88040886 in __kill ()
#1 0x00007fff880e0e4f in __abort ()
#2 0x00007fff880d5693 in __chk_fail ()
#3 0x00007fff8802f851 in __strcpy_chk ()
#4 0x0000000100000f04 in main (argc=1, argv=0x7fff5fbff958) at debugger.c:9
(gdb)
但您的问题似乎不是运行调试器,而是获取代码失败的信息。您可以使用 backtrace
来实现这一点。
关于c - 使用 -g、-ggdb、-g3 或 -ggdb3 时,GCC 不会生成调试器信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2841843/