Что такое символ в контексте разработки библиотеки программного обеспечения и фреймворка - PullRequest
0 голосов
/ 28 апреля 2018

Я прочитал много документов, таких как «поиск правильных символов во время выполнения» и т. Д. Я немного исследовал, но так и не нашел удовлетворительного ответа на то, что именно означает «символ». Я предполагаю, что символы - это не что иное, как классы, методы, глобальные переменные, определенные в исходном коде. Но почему они называются символами, когда мы говорим с точки зрения библиотек и структур?

1 Ответ

0 голосов
/ 28 апреля 2018

На самом простом уровне символы представляют собой метаданные в скомпилированном коде (двоичные файлы), которые содержат информацию о функциях и глобальных данных (глобальные переменные и данные только для чтения) в файле. Обычно символ содержит имя, адрес и размер. Линкер (статический компоновщик во время компиляции или динамический во время выполнения при использовании DLL) будет использовать эту информацию для поиска каждой функции и объекта данных по их имени для выполнения связывания.

В языках низкого уровня, таких как C, обычные форматы файлов для машинного кода (такие как ELF) не содержат намного больше информации о функциях, кроме их имен и адресов. Другая информация (количество параметров, типы, даже соглашение о вызовах) о функции хранится в отдельных заголовочных файлах, которые должны использоваться вместе с правильными версиями библиотеки, иначе могут произойти очень плохие вещи. Такие вещи, как классы C ++, на самом деле даже не существуют в скомпилированном коде - они разбиты на функции и таблицы.

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

В мире Microsoft отладочная информация обычно поставляется в отдельном файле "PDB", который иногда называют "символами отладки", даже если они содержат больше информации, чем традиционные символы. Эти файлы также будут содержать символы для внутренних функций и переменных, которых нет в основной таблице символов, потому что другие вещи не должны знать о них. Причина заключается в том, чтобы сохранить основной файл кода небольшим и предоставлять отладочную информацию только при необходимости (большинство людей не хотят запускать отладчик).

...