Я хотел бы проследить некоторый код в GIMP и поэтому нужен GIMP с включенными символами отладки. Я не помню, включил ли я их во время компиляции. Как проверить, что без перекомпиляции программы?
Как проверить, была ли программа скомпилирована с помощью отладочных символов?
Ответ 1
Вы можете использовать file
и objdump
в Linux. В частности, вы можете посмотреть, говорит ли файл "разделенный" или "не разделенный", и выводит ли objdump --syms
что-нибудь полезное (для меня он говорит "нет символов" для регулярной сборки).
Ответ 2
При запуске команды objdump --syms
я вижу гораздо больше, чем "никаких символов" на выходе (по крайней мере, для объектов ядра).
Чтобы проверить, есть ли отладочная информация внутри объекта ядра, вы можете добавить следующее в конце команды objdump
: | grep 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
Пример того же самого модуля ядра, который я скомпилировал с:
[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
Как вы можете видеть, первый вывод ничего не возвращает, в то время как второй вывод возвращает строки с debug
в нем.
Примечание. В моем случае команда file
вернула мне "не раздеваемую" в и отладочном и не-отладочном случае. Однако разница в размере объекта ядра была замечательной:
- ок. 16k без отладочной информации
- ок. 137k с отладочной информацией
Очевидно, что последняя версия содержала отладочную информацию внутри.
Мой вопрос: является ли команда file
надежной в таких случаях?
Из того, что я испытал, я полагаюсь на команду objdump --syms ... | grep debug
.