海合會(GCC)4.6.0 GNU GDB(GDB)的Fedora(7.2.90.20110525-38.fc15)調試符號的外觀如何?
我最近當我試圖用gdb調試我的問題一個問題。當我裝我的二進制gdb的抱怨「沒有調試符號被發現」
所以,當我做了以下內容:
nm ass1
我得到了下面的輸出(只樣本)
00000000006026e0 t __init_array_end
00000000006026d0 t __init_array_start
00000000004020e0 T __libc_csu_fini
0000000000402050 T __libc_csu_init
U [email protected]@GLIBC_2.2.5
00000000006029ec A _edata
0000000000602b28 A _end
000000000040212c T _fini
0000000000401420 T _init
0000000000401610 T _start
U [email protected]@GLIBC_2.2.5
000000000040163c t call_gmon_start
0000000000602b10 b completed.5886
00000000006029e8 W data_start
0000000000602b18 b dtor_idx.5888
00000000004016d0 t frame_dummy
00000000004016f4 T main
的問題是我忘了添加-g。所以我決定用-g編譯並再次運行nm。我有一個simliar輸出,這包含了調試符號爲我所用-g和gdb沒有抱怨這個時候:從二進制是個頭大
U [email protected]@GLIBC_2.2.5
00000000006029ec A _edata
0000000000602b28 A _end
000000000040212c T _fini
0000000000401420 T _init
0000000000401610 T _start
U [email protected]@GLIBC_2.2.5
000000000040163c t call_gmon_start
0000000000602b10 b completed.5886
00000000006029e8 W data_start
0000000000602b18 b dtor_idx.5888
00000000004016d0 t frame_dummy
00000000004016f4 T main
w pthread_cancel
分開。我可以注意到使用nm的任何不同。我想知道我應該尋找什麼?調試符號是什麼樣的?
非常感謝您的任何建議,
我已經做到了與使用-a這兩種情況都使用和不使用-g進行編譯。但是,我得到了很多符號,但哪些是調試符號?謝謝。 – ant2009
列名註釋。你根本沒有任何符號; Linux通常使用DWARF 2調試信息,它存儲在不同的ELF段中,而不是符號表(後者是從有限的'a.out'格式中保留)。 – geekosaur