使用-g,-ggdb,-g3或-ggdb3时,gcc不会生成调试器信息

时间:2010-05-15 21:31:47

标签: c gcc debugging

我在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下发生问题的文件的行号。然而,这不会发生。

3 个答案:

答案 0 :(得分:1)

工作正常。我在计算机上运行调试器。我不得不添加

#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) 

编辑:对不起,没有看到这是标记为c而不是c ++。但是,不会更改运行调试器的任何内容。相应地改变了它。

Edit2:阅读您的编辑,似乎您的问题不是运行调试器,而是获取代码失败的信息。您可以使用backtrace来实现这一目标。

答案 1 :(得分:0)

你想:

gcc -g test.c -o mytest
gdb mytest

永远不要调用任何“测试” - 它与内置的shell冲突。“test.o”按照惯例是对象文件的名称,而不是可执行文件。

答案 2 :(得分:0)

你的评论说你跑了:

gcc -ggdb ./test.c -o test.o

这可能不是你想要的。

gcc -ggdb -o mytest test.c

更有可能获得成功。如果gdb ralphs那么你的gcc或gdb安装有问题。