Как проверить статическую библиотеку, чтобы увидеть, экспортируются ли отладочные символы?

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

Ответы

Ответ 1

Вы можете использовать опцию nm --debug-syms, чтобы nm также отображал символы отладчика (если они есть) для объекта, упакованного в библиотеку.

Для символов отладчика второй столбец указывает N.

Пример (предполагает, что объект example.o находится в библиотеке)

nm --debug-syms libexample.a

Вывод (выдержка):

example.o:
0000000000000000 b .bss
0000000000000000 n .comment
0000000000000000 d .data
0000000000000000 N .debug_abbrev    
0000000000000000 N .debug_aranges
0000000000000000 N .debug_info
0000000000000000 N .debug_line
0000000000000000 N .debug_loc
0000000000000000 N .debug_pubnames
0000000000000000 N .debug_str
0000000000000000 r .eh_frame
0000000000000000 n .note.GNU-stack
0000000000000000 r .rodata
0000000000000000 t .text
...

Подробнее об этом см. man nm.

Ответ 2

Вы можете использовать команду file, доступную для многих ОС, включая Windows через Cygwin.
Если он говорит, что "не раздевается", это означает, что у него есть информация об отладке.
В качестве стороннего примечания для статических libs используйте ar, чтобы извлечь файлы .o и использовать file для них непосредственно.

Ответ 3

Загрузите Dependencywalker для вашей ОС

Он обнаружит, имеет ли ваша DLL символы отладки. Если вы видите "Недопустимый" в "Символах", это означает, что символы отладки были удалены. Допустимые значения: PDB, CV, DBG и т.д.

Ответ 4

Вы можете использовать strip -S libXX.a, чтобы проверить, уменьшен ли размер вашей статической библиотеки. Размер статической библиотеки не изменится, если в нее не включены отладочные символы.

В Mac OS работает проверка статической библиотеки, созданной Xcode.

команда Linux и Unix