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

文章翻译 文章翻译
文章编号: 121366 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

.PDB 扩展名代表"程序数据库。它包含用于将推出的调试信息存储在 Visual c + + 1.0 版中新的格式。在将来.PDB 文件也将包含其他项目状态信息。在 $ 格式中,更改最重要的动机之一是允许在 Visual c + + 2.0 版中引入的更改的程序的调试版本进行增量链接。

.DBG 扩展名代表"调试。使用 32 位 NT 工具集创建.DBG 文件是可移植可执行 (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 知识库中相应的文章:
177429DUMPBIN 输出的示例

更多信息

.PDB 文件

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

有关 CVPACK 限制的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
112335错误: CK1020 或 CK4009 遇到时类型信息超过 64k
默认状态下,生成项目由 Visual 工作台,生成时编译器开关/fd 用于将.PDB 文件重命名为 <project>.PDB。 因此,您可以为整个项目只能有一个.PDB 文件。

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

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

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

.DBG 文件

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

一点需要将指出: 使用符号从.DBG 文件时, 必须使用完全修饰的名。例如对于要在 Windows sndPlaySound 函数的调用上设置断点,您会指定 _sndPlaySoundA@8 作为位置。

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

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

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

若要以这种格式生成.DBG 文件,您可以使用 REBASE.EXE,Win32 sdk 提供的。请参阅 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 知识库中相应这篇文章。

属性

文章编号: 121366 - 最后修改: 2005年8月5日 - 修订: 3.1
这篇文章中的信息适用于:
  • Microsoft Visual C++ 2.0 Professional Edition
  • Microsoft Visual C++ 2.1
  • Microsoft Visual C++ 4.0 标准版
  • Microsoft Visual C++ 6.0 Service Pack 5
  • Microsoft Visual C++ 5.0 标准版
  • Microsoft Visual C++ 6.1
关键字:?
kbmt kbbug kbdebug kbide kbinfo KB121366 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 121366
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
不再更新的 KB 内容免责声明
本文介绍那些 Microsoft 不再提供支持的产品。因此本文按“原样”提供,并且不再更新。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com