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

标签 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 下出现问题的文件的行号。然而,这并没有发生。

最佳答案

它工作正常。我在我的电脑上运行了调试器。我必须添加

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

相关文章:

c - 在为 char * 执行 malloc 后,我的函数出现段错误

android - 将字符串传递给android代码时出现JNI问题

c - 在project.exe : 0xC0000005: Access violation writing location 0x007110E8 中的0x5409B211 (ucrtbased.dll)处抛出异常

c - 在共享库的构建选项中添加 "-rpath,/usr/lib"会导致段错误

Xcode 3.2 + LLVM = 调试时没有本地符号

c - 多维数组中元素的位置 [ C ]

c - 当使用一个没有参数的前向声明的 C 函数时,到底什么是未定义的?

linux - 如何使用 devtoolset-8-gcc 安装 gcc8

windows - VS2012 调试器错误 - "Connection request was rejected .. Ensure ... debugger is running in ' 无身份验证模式。”

debugging - 开始学习Windbg