2012-05-22 125 views
2

我是gdb的新手。当我调试我的程序时,我只能得到如下的回溯。关于符号的gdb问题

Program received signal SIGSEGV, Segmentation fault. 
0x000000003075a238 in ??() 
(gdb) backtrace 
#0 0x000000003075a238 in ??() 
#1 0x00007fff72825da8 in ??() 
#2 0x0000000000000008 in ??() 
#3 0x000000003063c340 in ??() 
#4 0x0000000000000000 in ??() 
(gdb) 

我想有一些符号信息缺失。我得到这个消息

Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging symbols found). 

所以我尝试(GDB)符号文件/usr/lib/debug/lib/x86_64-linux-gnu/ld-2.13.so在GDB的启动并没有帮助。

如何知道哪些符号信息丢失?整个项目的代码用gcc -g编译。

+0

你可能不会从标准C库,除非你正在调试_it_需要的符号 - 机会是显著高于任何'SIGSEGV'问题在_your_代码。你确信你的代码在编译后没有被剥离吗? ...另一方面,#4有一个空指针。也许整个堆栈都是垃圾。 – sarnold

+2

'gcc -g'应该可以工作。确保任何链接也保留符号。 –

回答

0

静态编译应用程序时可能发生此问题(在gcc中静态)。在这种情况下,构建机器的库可能与执行机器的库不同,gdb找不到构建机器库的符号。

我有这个问题,唯一对我有效的解决方案是在它正在执行的同一台机器上构建应用程序。

参见:GDB cannot show the stack and shows "#1 0x0000000000000000 in ??()"