Можете ли вы объяснить, что такое символы и символы отладки в мире С++?

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

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


person COMer    schedule 12.09.2010    source источник


Ответы (2)


Далее следует объяснение очень высокого уровня:

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

'целое я = 2;'

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

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

person Chubsdad    schedule 12.09.2010
comment
символы отладки могут храниться как в каталоге отладки PE, так и в отдельном файле pdb, верно? - person COMer; 12.09.2010

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

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

person Hans Passant    schedule 12.09.2010