У меня есть компилируемые библиотеки на x86 Linux, и я хочу быстро определить, были ли они скомпилированы с помощью отладочных символов.
Как узнать, скомпилирована ли библиотека с помощью -g?
Ответ 1
Если вы работаете в Linux, используйте objdump --debugging. Должна быть запись для каждого объектного файла в библиотеке. Для объектных файлов без отладки символов вы увидите что-то вроде:
objdump --debugging libvoidincr.a
In archive libvoidincr.a:
voidincr.o:     file format elf64-x86-64
Если есть отладочные символы, вывод будет намного более подробным.
Ответ 2
Предлагаемая команда
objdump --debugging libinspected.a
objdump --debugging libinspected.so
дает мне всегда тот же результат, по крайней мере, на Ubuntu/Linaro 4.5.2:
libinspected.a:     file format elf64-x86-64
libinspected.so:     file format elf64-x86-64
независимо от того, была ли архивная/разделяемая библиотека построена с опцией -g или без нее
Что действительно помогло мне определить, был ли -g использован readelf tool:
readelf --debug-dump=decodedline libinspected.so
или
readelf --debug-dump=line libinspected.so
Это приведет к отображению набора строк, состоящих из исходного имени файла, номера строки и адреса, если такая информация об отладке включена в библиотеку, иначе она ничего не напечатает.
Вы можете передать любое значение, которое вы найдете нужным для параметра --debug-dump вместо decodedline.
Ответ 3
 nm -a <lib> выведет все символы из библиотеки, включая отладочные.
Итак, вы можете сравнивать выходы nm <lib> и nm -a <lib> - если они отличаются, ваша библиотека содержит некоторые символы отладки.
Ответ 4
Что помогло:
gdb mylib.so
Он печатает, когда символы отладки не найдены:
Reading symbols from mylib.so...(no debugging symbols found)...done.
Или если найдено:
Reading symbols from mylib.so...done.
Ни один из более ранних ответов не дал мне значимых результатов: libs без символов отладки выдавали много результатов и т.д.
Ответ 5
 В OSX вы можете использовать dsymutil -s и dwarfdump.
 Использование dsymutil -s <lib_file> | more dsymutil -s <lib_file> | more вы увидите пути к исходным файлам в файлах, которые имеют символы отладки, но только имена функций в противном случае.
Ответ 6
Вы можете использовать objdump для этого.
РЕДАКТИРОВАТЬ: С man-страницы:
-W
--dwarf
Displays  the  contents of the DWARF debug sections in the file, if
any are present.
		Ответ 7
Ответы, предлагающие использование objdump --debugging или readelf --debug-dump=..., не работают в том случае, если отладочная информация хранится в файле отдельно от двоичного файла, то есть в двоичном файле содержится раздел отладочной ссылки. Возможно, это можно назвать ошибкой в readelf.
Следующий код должен корректно обрабатывать:
# Test whether debug information is available for a given binary
has_debug_info() {
  readelf -S "$1" | grep -q " \(.debug_info\)\|\(.gnu_debuglink\) "
}
Для получения дополнительной информации см. Разделить файлы отладки в руководстве GDB.