【问题标题】:gcc does not generate debugger info when using -g, -ggdb, -g3, or -ggdb3gcc 在使用 -g、-ggdb、-g3 或 -ggdb3 时不生成调试器信息
【发布时间】: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 的可执行文件,如果那样的话。

标签: c gcc debugging


【解决方案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 来实现。

【讨论】:

    【解决方案2】:

    你想要:

    gcc -g test.c -o mytest
    gdb mytest
    

    永远不要称任何东西为“test”——它与内置的 shell 冲突。按照惯例,“test.o”将是目标文件的名称,而不是可执行文件的名称。

    【讨论】:

    • 好点。但这并不能解决问题。发生这种情况还有其他原因吗?
    • @CJJ 你还没有说为什么你认为可执行文件没有调试信息 - 你得到什么消息让你认为是这种情况?
    【解决方案3】:

    你的评论说你跑了:

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

    这可能不是你想要的。

    gcc -ggdb -o mytest test.c
    

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

    【讨论】:

      猜你喜欢
      • 2017-08-25
      • 1970-01-01
      • 2010-10-14
      • 2019-09-24
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多