有两个常见的符号文件系统。 本文档将称为当前系统和旧系统。
当前符号文件系统
在当前系统中,始终有两个文件:可执行文件和 .pdb 文件。 .pdb 文件包含所有符号。 可执行文件包含指向 .pdb 文件的指针。
如果 .pdb 符号文件包含私有符号,则 BinPlace 可以删除此信息并生成精简符号文件。 有关详细信息 ,请参阅公共符号和专用符号 。
旧符号文件系统
在旧系统中,可执行文件和符号文件可以采用两种不同的方式排列:
可执行文件和 .pdb 文件。 在此排列中,大多数符号信息都位于 .pdb 文件中。 符号信息的其余部分包含在可执行文件中。 可执行文件还包含指向 .pdb 文件的指针。
可执行文件、.pdb 文件和 .dbg 文件。 .pdb 文件与两个文件排列中的相同:它保存大部分符号。 符号信息的其余部分位于 .dbg 文件中。 可执行文件中没有符号信息。 可执行文件包含指向 .dbg 文件的指针,.dbg 文件包含指向 .pdb 文件的指针。
在旧符号文件系统中,双文件排列和三文件排列都包含相同的可执行代码和相同的符号。 程序可以运行,并且可以按照任一排列进行调试。 但是,三文件排列加快执行速度,因为可执行文件较小。
如果二进制文件是在双文件排列中使用旧符号文件系统生成的,则 BinPlace 可以将它转换为三文件排列。 换句话说,BinPlace 可以将可执行文件“拆分为无符号可执行文件”和一个新的 .dbg 文件,其中包含可执行文件中的符号。
BinPlace 还可以从旧符号文件系统中的文件去除私有符号信息,但前提是它正在拆分文件(换句话说,只有在它将文件从两文件制式更改为三文件制式时)。 BinPlace 无法将专用符号从旧符号文件系统中的文件中剥离出来,并将它们保留在双文件排列中。 如果文件已处于三文件排列中,BinPlace 将不会执行任何剥离:事实上,如果可执行文件在 BinPlace 命令行上命名,它甚至不会移动符号文件。 有关详细信息 ,请参阅公共符号和专用符号 。