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