Chciałbym prześledzić niektóre kod w GIMP i dlatego potrzebuję GIMP z włączonymi symbolami debugowania. Nie pamiętam, czy je włączyłem podczas kompilacji. Jak to sprawdzić bez rekompilacji programu?Jak sprawdzić, czy program został skompilowany z symbolami debugowania?
Odpowiedz
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).
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
.
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
+ jeden do usuwania niejasności w wyniku "pliku" – ADJ
Pozbycie się oznacza brak symboli, prawda? –
odpowiednikiem OS X jest 'otool -Iv'. –
na co zwrócić uwagę przy wyjściu z otool -Iv? –