符号和符号文件

链接应用程序、库、驱动程序或操作系统时,创建.exe和.dll文件的链接器也会创建一些称为 符号文件的其他文件

符号文件包含大量的数据,这些数据在运行二进制文件时实际上并不需要,但在调试过程中很有用。

通常,符号文件可能包含:

  • 全局变量

  • 局部变量

  • 函数名称及其入口点的地址

  • FPO) 记录 (框架指针省略

  • 源行号

其中每个项单独称为 一个符号。 例如,单个符号文件 Myprogram.pdb 可能包含数百个符号,包括全局变量和函数名称和数百个局部变量。 通常,软件公司会发布每个符号文件的两个版本:一个包含 公共符号私有符号的完整符号文件,以及一个仅包含公共符号的简化 (剥离) 文件。 有关详细信息,请参阅 公共符号和专用符号

调试时,必须确保调试器可以访问与要调试的目标关联的符号文件。 实时调试和调试故障转储文件都需要符号。 必须为要调试的代码获取正确的符号,并将这些符号加载到调试器中。

Windows 符号

Windows 将其符号保存在扩展名为 .pdb 的文件中。

编译器和链接器控制符号格式。 Visual C++ 链接器将所有符号放入 .pdb 文件中。

Windows 操作系统内置有两个版本。 免费生成 (或零售版本) 具有相对较小的二进制文件,且检查的生成 (或调试版本) 具有较大的二进制文件,代码本身具有更多的调试符号。 已检查的版本在 Windows 10 版本 1803 之前的较旧版本的 Windows 上可用。 每个生成都有自己的符号文件。 在 Windows 上调试目标时,必须使用与目标上的 Windows 内部版本匹配的符号文件。

下表列出了标准 Windows 符号树中存在的几个目录:

目录 包含 的符号文件

Acm

Microsoft Audio Compression Manager 文件

COM

可执行文件 (.com)

CPL

控制面板程序

DLL

动态链接库文件 (.dll)

DRV

驱动程序文件 (.drv)

EXE

可执行文件 (.exe)

Scr

屏幕保护程序文件

SYS

驱动程序文件 (.sys)