2012-05-22 123 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 ??()"