【问题标题】:Can you explain what's symbols and debug symbols in c++ world?你能解释一下 C++ 世界中的符号和调试符号是什么吗?
【发布时间】:2011-04-11 07:53:18
【问题描述】:

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

如何理解符号?

【问题讨论】:

    标签: c++ windows symbols


    【解决方案1】:

    一个非常高级的解释如下:

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

    'int i = 2;'

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

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

    【讨论】:

    • 调试符号既可以存储在PE的调试目录中,也可以存储在单独的pdb文件中,对吗?
    【解决方案2】:

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

    dbghelp API 是described here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      • 1970-01-01
      • 2015-01-06
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      相关资源
      最近更新 更多