Подтвердить что ты не робот

Как проверить, была ли программа скомпилирована с помощью отладочных символов?

Я хотел бы проследить некоторый код в GIMP и поэтому нужен GIMP с включенными символами отладки. Я не помню, включил ли я их во время компиляции. Как проверить, что без перекомпиляции программы?

4b9b3361

Ответ 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.