Можете ли вы объяснить, что такое символы и символы отладки в мире C ++? - PullRequest
4 голосов
/ 12 сентября 2010

Правда ли, что двоичные файлы, такие как исполняемые файлы, состоят из символов, и символ отладки является одним из них?

Как понимать символ?

Ответы [ 2 ]

14 голосов
/ 12 сентября 2010

Ниже приводится объяснение очень высокого уровня:

Во-первых, символы не только в мире C ++. Они существуют в двоичных файлах нескольких языков высокого уровня, таких как C, C ++ и т. Д., Если они собраны с некоторыми заданными настройками. Давайте возьмем определение

'int i = 2;'

В двоичном формате «i» - это просто область памяти (например, 0x10203040), которая инициализируется с помощью 2. Нет области памяти с именем «i». Имя 'i' присваивается этой ячейке памяти благодаря символам отладки, которые загружаются с помощью двоичных файлов (при построении с определенными флагами), которые поддерживают отображение «ячейки памяти» на «имена уровня источника».

Например, в формате PE предусмотрена директория отладки, в которой хранится информация о символах отладки. Они очень полезны при отладке, потому что в отсутствие таких символов отладки отладка только с точки зрения бинарных нулей и единиц будет действительно очень сложной задачей. Поэтому, когда вы отлаживаете такой двоичный файл (который имеет вышеуказанное определение «i»), который был построен с флагами отладки, отладчик знает, что расположение памяти «0x10203040» соответствует «i» благодаря каталогу отладки в PE файл.

2 голосов
/ 12 сентября 2010

Эмм, нет.Исполняемые файлы содержат машинный код.И значения инициализации для глобальных переменных.В Windows отладочная информация обычно хранится в отдельном файле .pdb.Кусок отладочных данных из этого файла о функции или переменной в вашей программе называется символом.

API dbghelp описан здесь

...