【发布时间】:2011-04-11 07:53:18
【问题描述】:
像可执行文件这样的二进制文件是不是由符号组成,调试符号是其中的一种?
如何理解符号?
【问题讨论】:
像可执行文件这样的二进制文件是不是由符号组成,调试符号是其中的一种?
如何理解符号?
【问题讨论】:
一个非常高级的解释如下:
首先,符号不仅仅存在于 C++ 世界中。当使用某些指定设置构建时,它们存在于几种高级语言(如 C、C++ 等)的二进制文件中。让我们来定义
'int i = 2;'
在二进制文件中,“i”只是一个内存位置(例如 0x10203040),它被初始化为 2。没有称为“i”的内存位置。名称“i”通过二进制文件加载的调试符号分配给该内存位置(当使用某些标志构建时),它维护“内存位置”到“源级别名称”的映射。
例如,PE file format 提供了存储调试符号信息的调试目录。这些在调试时非常有用,因为在没有此类调试符号的情况下,仅根据二进制 0 和 1 进行调试将是一项非常非常具有挑战性的任务。因此,当您调试这样一个使用调试标志构建的二进制文件(具有上述'i'的定义)时,调试器通过PE中的调试目录知道内存位置'0x10203040'对应于'i'文件。
【讨论】:
嗯,不。可执行文件包含机器代码。以及全局变量的初始化值。在 Windows 上,调试信息通常存储在一个单独的文件中,即 .pdb。该文件中有关程序中函数或变量的一段调试数据称为符号。
dbghelp API 是described here。
【讨论】: