.PDB 的文件和.DBG 的文件的说明

来源:互联网 发布:unity3d arkit 安卓 编辑:程序博客网 时间:2024/06/04 18:31
.PDB 扩展名代表"程序数据库。 它包含用于引入的调试信息存储在 Visual c + + 版本 1.0 中新的格式。 在将来.PDB 文件也将保留其他项目状态信息。 格式更改为最重要的动机是允许的第一次在 Visual c + + 2.0 版中引入了更改的程序的调试版本的增量链接。

.DBG 扩展名代表"调试。 .DBG 第二个用 32 位 NT 工具集创建的文件是可移植可执行 (PE) 文件格式。 它们包含与 COFF,FPO,并在某些情况下 Codeview 信息中的节。 Visual c + + 集成调试器可以读取此格式.DBG 文件,但是它将忽略 COFF 符号节并寻找 Codeview 信息。

如果希望确定.DBG 文件中包含哪些符号信息您可以在命令提示符处键入以下内容:
Dumpbin sample.dbg/symbol.
笔记 的路径可能需要为 Dumpbin.exe 和 MSdis100.dll 包含目录:
Path=%Path%;C:/Program Files/DevStudio/VC/bin;C:/Msssdk/bin
有关 DUMPBIN 的详细信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
177429  (http://support.microsoft.com/kb/177429/ ) DUMPBIN 输出的示例
回到顶端

更多信息
.PDB 的文件虽然早期的 16 位版本的 Visual c + + 用于.PDB 的文件,将调试信息存储在它们由链接器追加到.exe 或.dll 文件的末尾。...

.PDB 的文件

虽然早期的 16 位版本的 Visual c + + 用于.PDB 的文件,将调试信息存储在它们由链接器追加到.exe 或.dll 文件的末尾。 在 Visual c + + 上面提到的该版本链接器和集成的调试器已修改允许直接在调试过程期间使用.PDB 文件从而消除了实质性的金额的链接器的工作和还绕过的 64k 类型麻烦 CVPACK 限制。

有关 CVPACK 限制的详细信息请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
112335  (http://support.microsoft.com/kb/112335/ ) 错误: CK1020 或遇到时类型信息超过 64k 的 CK4009
榛樿鎯呭喌涓嬶,生成由 Visual 工作台,生成项目时编译器开关/fd 用来重命名到 <project>.PDB.PDB 的文件。 因此,您必须只有一个.PDB 文件对于整个项目。

运行由 Visual 工作台,未生成的生成文件,并在/fd 不与/zi 一起使用时您将得到两个.PDB 文件:
  • VCx0.PDB (其中"x"指在相应 Visual c + +,或者"2"或"4"的主要版本),它存储为单个.obj 文件的所有调试信息。 它驻留在项目生成文件所驻留的目录中。
  • <project>存储生成的.exe 文件的所有调试信息的.PDB。 它驻留在 /WINDEBUG 子目录中。
为什么两个文件? 运行时,编译器,它并不知道其中.obj 文件将被链接,该.exe 文件的名称,这样编译器不能将放入 <project>.PDB 信息。 两个文件存储不同的信息。 每次编译的.obj 文件编译器合并调试信息到 VCX0.PDB。 它不会放入符号信息 (如函数定义。 它仅在中放入有关连接类型的信息。 这样的一个好处是当每个源文件中包含公共的头文件,如 <windows.h> 时从这些标题的所有 typedef 都只都存储一次,而不是在每个.obj 文件中。

当您运行链接器时,它创建 <project>保存项目的.exe 文件的调试信息的.PDB。 所有的调试信息,包括函数原型和其他,所有内容将被放入 <project>.PDB,而不只是在 VCX0.PDB 中找到该类型信息。 .PDB 的文件的两种类型共享相同的扩展名,因为它们是体系结构上类似 ; 它们都允许增量更新。 然而,它们实际存储不同的信息。

新的 Visual c + + 调试器使用直接,创建链接器 <project>.PDB 文件,并.exe 或.dll 文件中嵌入到该.PDB 绝对路径。 如果调试器找不到在该位置.PDB 文件或路径无效 (如果,渚嬪项目被移动到另一台计算机),调试器在当前目录中查找它。
回到顶端

.DBG 的文件

只要从调试输出一个二进制包含 Codeview 格式中进行,Visual c + + 集成调试器还可以使用.DBG 的文件。 这些是用于调试源代码不可用时很有用。 即使没有在源.DBG 文件使您可以在函数上设置断点、 观看变量,和查看调用堆栈中的函数。 它们也是 OLE RPC 调试所必需的。

一点需要能指出: 使用符号从.DBG 文件时, 必须使用完全修饰的名。 渚嬪 Windows sndPlaySound 函数调用上设置断点,将指定 _sndPlaySoundA@8 为位置。

有实际两种.DBG 文件格式。 在 16 位世界中,旧的格式已存在相当一段时间。 渚嬪因为.com 文件的格式是一个简单的二进制映像加载到内存中,调试信息 Codeview 可能不会追加到文件结尾因为文件大小可能超过 64k 的限制为.com 文件。 因此符号信息已转而进入已仅 Codeview 信息存放在它一个单独.DBG 文件。 此外可以通过使用 /strip 选项的.exe 文件上运行 CVPACK 生成.DBG 的文件。

对于 32 位.EXEs、 Visual c + + 版本 2.x 和 4.x 调试器的符号处理程序不读取旧的格式。 而是,它读取随其系统.dll 文件提供用于在 Windows NT.DBG 文件中使用格式。 这些.DBG 文件都是可移植可执行 (PE) 文件格式,并包含与 COFF,FPO,并在某些情况下 Codeview 符号信息的节。 新的 Visual c + + 调试器读取此格式仅.DBG 文件。 此外,它只使用忽略其他符号节的 Codeview 信息。

它是可能剥离从 PE 文件的调试信息并将它存储在.DBG 文件以供调试程序。 为此工作调试器需要知道是否在单独的文件中查找调试信息,或不以及是否该信息已被从去除该文件或不。 一种方法将为该可执行文件以查找调试信息通过搜索调试器。 但是,到调试器从不必搜索该文件保存文件特征字段 (IMAGE_FILE_DEBUG_STRIPPED) 已发明指示被去除该文件。 调试器可以查找 PE 文件头以快速确定是否调试信息文件中存在或不在此字段。

要生成此格式.DBG 文件,您可以使用与 Win32 SDK 一起提供的 REBASE.EXE。 请参阅 Win32 SDK 文档的详细信息。

在 Windows NT 的零售生成期间调试符号去除从系统二进制文件和驱动程序中,并存储在单独的.DBG 文件。 这是因为 Windows NT 内核调试程序可以使用这些.DBG 的文件,甚至对于优化的驱动程序提供调试符号。 但是,记住 Visual c + + 集成调试器没有调试保护的模式内核代码设计。

在 Windows NT 零售 CD-ROM 上 /SUPPORT 目录的调试子目录中找不到 Windows NT 符号文件。 必须将这些文件从光盘复制到您的硬盘驱动器。 对于用户模式调试目标调试器机器上,.DBG 符号必须存在于目标系统的 Windows NT /<winnt>/SYMBOLS 目录 (<winnt>是 Windows NT 的安装位置的目录)。 新的 Visual c + + 安装程序安装的程序组"NT 系统符号安装程序"图标。 您可以使用它自动从 Windows NT 工作站 CD-ROM 磁盘中将.DBG 文件复制到正确的目录结构中,您的硬盘驱动器上。 此方法不适用于 Windows NT Server 4.0 光盘因为.DBG 文件存储在压缩格式。

内核调试,将.DBG 文件放到 _NT_SYMBOL_PATH 环境变量 (渚嬪 C:/DEBUG/SYMBOLS) 指定目录下一个符号树中。 使用最少的符号组成的所有驱动程序 (*.SYS) SYMBOLS/SYS 目录中的符号和符号 NTOSKRNL.EXE 和 HAL.DLL SYMBOLS/EXE 和 SYMBOLS/DLL 目录中分别集可能是内核调试。 内核调试的详细信息请参阅关于内核调试 Windows NT DDK 程序员指南 》 中讨论。

尽管是理论上可以从.PDB 文件转换回到.DBG 文件并不常用的任务。 这次我们知道的任何此类工具。 濡傛我们湁鍚埌这样的工具的我们会更新 Microsoft 知识库中此文章。
原创粉丝点击