Можете ли да обясните какво са символи и символи за отстраняване на грешки в света на c++?

Вярно ли е, че бинарните файлове като изпълнимите са съставени от символи и символът за отстраняване на грешки е един вид от тях?

Как да разберем символа?


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


Отговори (2)


Следва обяснение на много високо ниво:

Първо символите не са само в света на C++. Те съществуват в двоични файлове на няколко езика на високо ниво като C, C++ и т.н., когато са изградени с някои определени настройки. Да вземем определението

'int i = 2;'

В двоичния файл „i“ е просто място в паметта (напр. 0x10203040), което се инициализира с 2. Няма място в паметта, наречено „i“. Името „i“ се присвоява на това място в паметта по силата на символи за отстраняване на грешки, които се зареждат с двоични файлове (когато са изградени с определени флагове), които поддържат карта на „местоположение в паметта“ към „имена на ниво източник“.

Като пример, PE файловият формат има разпоредба за директория за отстраняване на грешки, която съхранява информация за символи за отстраняване на грешки . Те са много полезни при отстраняване на грешки, защото при липса на такива символи за отстраняване на грешки, отстраняването на грешки само по отношение на binray 0s и 1s би било наистина много много предизвикателна задача. Така че, когато дебъгвате такъв двоичен файл (който има горната дефиниция на „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