GCC在使用-g、-ggdb、-g3或-ggdb 3时不生成调试器信息

x6492ojm  于 2022-11-12  发布在  其他
关注(0)|答案(3)|浏览(186)

我在Ubuntu 9.10(Karmic Koala)上使用GCC 4.4.1和GDB 7.0-ubuntu。但是,当使用以下任何开关时,GCC都不会生成调试器信息:-g、-g3、-ggdb或-ggdb 3中的一个或多个。
所以当我用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下看到一个文件的行号,指出问题发生的位置。然而,这并没有发生。

9njqaruj

9njqaruj1#

它工作得很好。我在我的电脑上运行了调试器。我不得不添加

#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来实现这一点。

zwghvu4y

zwghvu4y2#

您需要:

gcc -g test.c -o mytest
gdb mytest

永远不要把任何东西叫做“test”--它会与内置的shell冲突。按照惯例,“test.o”是一个目标文件的名称,而不是一个可执行文件的名称。

envsm3lx

envsm3lx3#

你的评论说你跑了:

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

这可能不是你想要的。

gcc -ggdb -o mytest test.c

是更有可能成功的。如果gdb ralphs在上面,那么你的gcc或gdb的安装有问题。

相关问题