你能解释一下c ++世界中的符号和调试符号吗?

时间:2010-09-12 12:52:34

标签: c++ windows symbols

像可执行文件这样的二进制文件是否由符号组成,并且调试符号是它们中的一种?

如何理解符号?

2 个答案:

答案 0 :(得分:13)

以下是一个非常高级别的解释:

首先,符号不仅仅在C ++世界中。当使用某些指定的设置构建时,它们存在于几种高级语言(如C,C ++等)的二进制文件中。我们来看定义

'int i = 2;'

在二进制文件中,'i'只是一个用2初始化的内存位置(例如0x10203040)。没有名为'i'的内存位置。通过使用二进制文件加载的调试符号(当使用某些标志构建时)将名称“i”分配给该内存位置,该符号将“内存位置”的映射维护为“源级别名称”。

例如,PE file format提供了调试目录,该目录存储有关调试符号的信息。这些在调试时非常有用,因为在没有这样的调试符号的情况下,仅根据binray 0和1进行调试将是一个非常非常挑剔的任务。因此,当您调试使用调试标志构建的这样的二进制文件(具有上述'i'的定义)时,调试器通过PE中的调试目录知道内存位置'0x10203040'对应于'i'文件。

答案 1 :(得分:2)

呃,不,不。可执行文件包含机器代码。和全局变量的初始化值。在Windows上,调试信息通常存储在单独的文件(.pdb)中。来自该文件的关于程序中的函数或变量的调试数据称为符号。

dbghelp API为described here