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

COM*_*Mer 7 c++ windows symbols

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

如何理解符号?

Chu*_*dad 16

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

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

'int i = 2;'

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

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


Han*_*ant 4

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

此处描述了dbghelp API 。