2010-07-19 14 views

Odpowiedz

50

Możesz używać file i objdump w systemie Linux. W szczególności możesz sprawdzić, czy plik mówi "rozebrany" lub "nieodebrany", i czy objdump --syms wyprowadza coś użytecznego (dla mnie mówi "brak symboli" dla regularnej kompilacji).

+4

Pozbycie się oznacza brak symboli, prawda? –

+17

odpowiednikiem OS X jest 'otool -Iv'. –

+5

na co zwrócić uwagę przy wyjściu z otool -Iv? –

29

Po uruchomieniu komendy objdump --syms, widzę dużo więcej niż „bez symboli” w wyjściu (przynajmniej dla jądro obiektów).

Aby sprawdzić, czy w obiekcie jądra znajdują się informacje o debugowaniu, na końcu polecenia objdump można dodać:.

Jeśli ten ciąg znaków zostanie znaleziony, wiesz, że obiekt jądra zawiera informacje debugowania. Jeśli nie, to jest to "czysty" obiekt jądra.

Przykład modułu jądra Mam skompilowany bez informacji debugowania:

[email protected]:~/mystuff/kernels/linux-3.12.6$ objdump --syms ./modules/lib/modules/3.12.6/kernel/drivers/i2c/busses/i2c-at91.ko | grep debug 

Przykład tego samego modułu jądra Mam skompilowany informacji debug:

[email protected]:~/mystuff/kernels/linux-3.12.6$ objdump --syms ./modules/lib/modules/3.12.6/kernel/drivers/i2c/busses/i2c-at91.ko | grep debug 
00000000 l d .debug_frame 00000000 .debug_frame 
00000000 l d .debug_info 00000000 .debug_info 
00000000 l d .debug_abbrev 00000000 .debug_abbrev 
00000000 l d .debug_loc  00000000 .debug_loc 
00000000 l d .debug_aranges 00000000 .debug_aranges 
00000000 l d .debug_ranges 00000000 .debug_ranges 
00000000 l d .debug_line 00000000 .debug_line 
00000000 l d .debug_str  00000000 .debug_str 
00000010 l  .debug_frame 00000000 $d 

As widać, że pierwsze wyjście nie zwraca nic, podczas gdy drugie wyjście zwraca linie z debug w tym.

Uwaga: w moim przypadku, komenda file powrócił ja „pozbawione” w zarówno debugowania i sprawa non-debug. Jednak różnica w wielkości obiektu jądra była niezwykła:

  • ok. 16k bez informacji o debugowaniu
  • ok. 137k z informacjami o debugowaniu

Najwyraźniej ta ostatnia wersja zawierała informacje o debugowaniu.

Moje pytanie: czy w takich przypadkach komenda file jest niezawodna? Z tego, co doświadczyłem, polegam na poleceniu objdump --syms ... | grep debug.

+0

Też miałem ten sam problem z 'file'. Dla mnie, 'objdump --syms' bez bitu' grep' daje wiele rezultatów nawet w kompilacji bez debugowania, ale 'grep' pomaga wywoływać specyficzne symbole debugowania, więc to działa dla mnie. – patrickvacek

+1

+ jeden do usuwania niejasności w wyniku "pliku" – ADJ