我正在尝试用 C 编写一个回显服务器(老实说,我只是从http://gnosis.cx/publish/programming/sockets.html复制代码)。无论如何,编译程序没问题,但是运行时会出现段错误。gdb 给出以下错误消息:
程序收到信号 SIGSEGV,分段错误。0xb7e46d5c 在?? () 来自 /lib/i386-linux-gnu/libc.so.6
我的问题是:“??”是什么?意思是?据我了解,这就是失败的函数的名称。
我正在尝试用 C 编写一个回显服务器(老实说,我只是从http://gnosis.cx/publish/programming/sockets.html复制代码)。无论如何,编译程序没问题,但是运行时会出现段错误。gdb 给出以下错误消息:
程序收到信号 SIGSEGV,分段错误。0xb7e46d5c 在?? () 来自 /lib/i386-linux-gnu/libc.so.6
我的问题是:“??”是什么?意思是?据我了解,这就是失败的函数的名称。
glibc 中没有可用的调试信息(因为它通常在没有调试信息的情况下编译)。所以你唯一能看到的是函数的地址——但不是它的名字,因为它是未知的。
但是,您可以使用调试信息(gcc 选项:)编译您的程序-ggdb
。然后,您可以使用 gdb 或 valgrind 之类的调试器来查看代码中的哪一行导致了段错误。
尝试运行'bt'命令它会给出堆栈跟踪。段错误很可能出现在您的代码中,该代码在 libc.so.6 处得到通知。由于 libc.so.6 是经过优化的二进制文件,因此它没有调试符号,因此您会得到 ?s。