Как проверить статическую библиотеку, чтобы увидеть, экспортируются ли отладочные символы?
У меня есть статическая библиотека, которую я создаю в режиме отладки, но когда я вхожу в нее, я все равно получаю разборку. Я хочу знать, как использовать 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