2011-06-18 17 views
7

gcc (GCC) 4.6.0 GNU gdb (GDB) Fedora (7.2.90.20110525-38.fc15)Jak wyglądają symbole debugowania?

Niedawno miałem problem, gdy starałem się debugowania mój problem za pomocą gdb. Kiedy załadowane moja binarny gdb skarżył „Brak symbole debugowania stwierdzono”

Więc kiedy robiłam następujące:

nm ass1 

Mam następujące wyjściowe (tylko próbka)

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 

problem polegał na tym, że zapomniałem dodać -g. Postanowiłem więc skompilować z -g i ponownie uruchomić nm. Mam wyjście simliar ten zawiera symbole debugowania jak kiedyś -g i gdb nie skarżą ten czas:

    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 

Oprócz binarna jest większy. Zauważyłem jakikolwiek inny za pomocą nm. Zastanawiam się, czego powinienem szukać? Jak wyglądają symbole debugowania?

Wielkie dzięki za wszelkie sugestie,

Odpowiedz

7

nm Ukrywa symbole debugowania domyślnie. Użyj opcji -a, aby je wyświetlić.

Nowoczesne systemy często nie używają symboli debugowania per se. Format debugowania stabs został opracowany do użytku z plikami wykonywalnymi formatu a.out, które mogą reprezentować jedynie ograniczoną ilość wewnętrznej struktury; doprowadziło to do ukrycia wielu rzeczy w tabeli symboli, takich jak symbole debugowania i initializers/constructors. Pliki formatu COFF (obecnie w większości przestarzałe) i ELF pozwalają na użycie dowolnych sekcji, a większość nowoczesnych dystrybucji Linuksa konfiguruje gcc do korzystania z informacji debugujących DWARF 2. Powinieneś być w stanie użyć GNU objdump, aby zbadać te informacje.

(I nie wydaje się, aby mieć dostęp do urządzenia, którego binutils wygeneruje stabs lub format GNU stabs+, więc będę odroczyć do Google o szczegółach.)

+0

Zrobiłem to z -a z oba przypadki kompilują się zi bez -g. Jednak dostaję dużo symboli, ale które z nich są debugujące? Dzięki. – ant2009

+0

Lemeruj adnotację. Możesz nie mieć żadnych symboli; Linux często używa informacji debugowania DWARF 2, które są przechowywane w różnych segmentach ELF zamiast w tablicy symboli (ta ostatnia jest wstrzymywaniem z ograniczonego formatu 'a.out'). – geekosaur

Powiązane problemy