При отладке или связывании, что означает слово «символ»? - PullRequest
5 голосов
/ 23 ноября 2010

Я делаю некоторую работу с gdb и нашел ссылки в документации на "символы".Это другое слово для внешних (экспортируемых) видимых переменных?

Спасибо,

Скотт

Ответы [ 4 ]

4 голосов
/ 23 ноября 2010

Символ - это символический идентификатор, включающий имена функций и переменных.

Компилятор / компоновщик создает таблицу символов во время сборки, и она используется отладчиком для предоставления символических имен на уровне источника этим объектам, в отличие от простых адресов (отсюда и название «символический отладчик», который выможет наткнуться).

3 голосов
/ 23 ноября 2010

Символы - это человеческие имена переменных, функций, классов ... без символов вы увидите, что все просто данные по адресу.
пример:
с символами:

call printf

без символа

call dword ptr 0x804480 
3 голосов
/ 23 ноября 2010

Это записи в кодовой таблице символов , сгенерированные при ее компиляции. Переменные, функции и т. Д.

0 голосов
/ 04 декабря 2010

И символы отладки (вероятно, так названы из-за способа, которым «STABS», например, хранит их в таблице символов), относятся также к данным выше и помимо того, что нужно компоновщику, таким как отображение номера строки / адреса, информация о типе локальные переменные и давайте не будем забывать «статические» символы (которые явно не нужны компоновщику, но которые, очевидно, имеют большое значение для отладки).

Конечно, PE изображения не нуждаются (или обычно имеют) «таблицы символов» как таковые - просто таблицы импорта / экспорта. Таким образом, в контексте Windows «символы» и «символы отладки», как правило, используются взаимозаменяемо для обозначения любых символов, оставшихся после связывания; с набором инструментов MS они (почти?) всегда идут в файлы "pdb". (См. .)

...