你能解释什么是符号和debugging在C ++世界的符号?

是否像可执行文件这样的二进制文件是由符号组成的,debugging符号是其中的一种?

如何理解符号?

一个非常高的层次解释如下:

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

'int i = 2;'

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

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

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

这里描述了 dbghelp API。