Файлы символов - это просто список всех определенных глобальных переменных и функций, а также их смещения с начала модуля. Он также имеет список всех структур и описывает их поля.
Таким образом, когда GDB / WinDbg загружается, он может посмотреть на EIP (текущую инструкцию) и сопоставить адрес с чем-то вроде (SomeFunc + 0x25). Конечно, большинство символов также имеют закодированную информацию о строках, поэтому можно пойти дальше и сказать: «SomeFunc + 0x25 ближе всего к строке 57 foo.cpp».