符号和符号文件

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

符号文件保存运行二进制文件时实际不需要的各种数据,但在调试过程中可能非常有用。

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

  • 全局变量

  • 局部变量

  • 函数名称和入口点的地址

  • 帧指针省略(FPO)记录

  • 源行号

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

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

Windows 符号

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

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

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

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

目录 包含符号文件

ACM

Microsoft音频压缩管理器文件

COM

可执行文件(.com)

CPL

控制面板程序

DLL

动态链接库文件(.dll)

DRV

驱动程序文件 (.drv)

EXE

可执行文件(.exe)

SCR

屏幕保存程序文件

SYS

驱动程序文件 (.sys)