在调试或链接时,“符号”一词是指什么?

时间:2010-11-23 02:54:14

标签: c debugging symbols

我正在使用gdb做一些工作,并在文档中找到了“符号”的引用。这是外部(导出)可见变量的另一个词吗?

谢谢,

斯科特

4 个答案:

答案 0 :(得分:4)

'符号'是包含函数和变量名称的符号标识符。

编译器/链接器在构建期间创建符号表,调试器使用它来为这些实体提供源级符号名称,而不是普通地址(因此您可能会遇到名称“符号调试器”) )。

答案 1 :(得分:3)

它们是代码symbol table中的条目,在编译时生成。变量,函数等

答案 2 :(得分:3)

符号是变量,函数,类的人名......没有符号,你会看到一切都只是地址上的数据。
例如:
带符号:

call printf

没有符号

call dword ptr 0x804480 

答案 3 :(得分:0)

调试符号(可能由于“STABS”的方式而命名,例如,将它们存储在符号表中)也指上面的数据&超出了链接器所需的内容,例如行号/地址映射,类型信息,局部变量,并且不要忘记“静态”符号(链接器显然不需要这些符号,但这对于调试来说显然非常重要)。

当然,PE图像无论如何都不需要(或通常拥有)“符号表” - 只需导入/导出表。因此,在Windows的上下文中,“符号”和“调试符号”倾向于互换使用,以指代链接后遗留下来的任何符号;使用MS的工具链这些(几乎?)总是进入“pdb”文件。 (见。)