链接应用程序、库、驱动程序或作系统时,创建 .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) |