程序数据库PDB调试文件
2017-03-31 23:43
337 查看
程序数据库 (PDB) 文件保存着调试和项目状态信息,使用这些信息可以对程序的调试配置进行增量链接。当以
/ZI 或 /Zi(用于 C/C++)生成时,将创建一个 PDB 文件。
在 Visual C++ 中,/Fd 选项用于命名由编译器创建的 PDB 文件。当使用向导在 Visual Studio 中创建项目时,/Fd
选项被设置为创建一个名为project.PDB 的 PDB。
如果使用生成文件创建 C/C++ 应用程序,并指定 /ZI 或/Zi 而不指定
/Fd 时,则最终将生成两个 PDB 文件:
VC80.PDB (更笼统地说就是 VCx0.PDB,其中x 表示 Visual C++ 的版本。)该文件存储各个 OBJ 文件的所有调试信息并与项目生成文件驻留在同一个目录中。
project.PDB 该文件存储 .exe 文件的所有调试信息。
对于 C/C++,它驻留在 \debug 子目录中。
每当创建 OBJ 文件时,C/C++ 编译器都将调试信息合并到 VCx0.PDB 中。插入的信息包括类型信息,但不包括函数定义等符号信息。
因此,即使每个源文件都包含公共头文件(如 <windows.h>),这些头文件中的 typedef 也只存储一次,而不是在每个 OBJ 文件中都存在。
链接器将创建 project.PDB,它包含项目的 EXE 文件的调试信息。project.PDB 文件包含完整的调试信息(包括函数原型),而不仅仅是在 VCx0.PDB 中找到的类型信息。这两个 PDB 文件都允许增量更新。
链接器还在其创建的 .exe 或 .dll 文件中嵌入 .pdb 文件的路径。
Visual Studio 调试器使用 EXE 或 DLL 文件中的 PDB 路径查找 project.PDB 文件。如果调试器在该位置无法找到 PDB 文件或者如果路径无效(例如,如果项目被移动到了另一台计算机上),调试器将搜索包含 EXE 的路径,即在“选项”对话框(“调试”文件夹,“符号”节点)中指定的符号路径。如果调试器无法找到
.PDB 文件,则显示“查找符号”对话框,这将允许您搜索符号或向搜索路径添加其他位置。
当没有某些代码的源(如库或 Windows API)时,DBG 文件允许调试。
DBG 文件还允许执行 OLE RPC 调试。
DBG 文件已经由 PDB 文件替代,PDB 文件现在更常用于调试。
可使用 REBASE.EXE 实用工具从 PE 格式的可执行文件中去除调试信息并将其存储在 DBG 文件中。
PE 文件头中的文件特性字段 IMAGE_FILE_DEBUG_STRIPPED 通知调试器 Codeview 信息已被抽出到单独的 DBG 文件中。
可下载和安装系统 DBG 文件,该文件包含用于调试对 Windows API 的调用的符号。
当使用 DBG 文件中的符号进行调试时,必须使用完全修饰名。
例如,若要在 Windows sndPlaySound 函数调用上设置断点,必须指定
_sndPlaySoundA@8。
Visual Studio 调试器并不旨在调试受保护模式的核心代码,即使对于 DBG 符号也如此。
对于用户模式的调试,Visual Studio 需要下列文件:
在 Windows 2000 计算机上,\winNT\SYMBOLS\DLL 目录中的 DBG 和 PDB 文件。
在 Windows XP 计算机上,\Windows\SYMBOLS\DLL 目录中的 PDB 文件。
有关 DBG 文件的更多信息,请参见以下知识库文章:Q121366,INFO: PDB and DBG Files - What They Are and How They Work(Q121366,信息:PDB 和 DBG 文件 — 这些文件是什么以及其工作方式)。
可以在 MSDN Library 中查找知识库文章。
可从若干位置获取这些符号:
Visual Studio CD-ROM 包含选择的 Windows 版本的符号文件。
OS Support Tools CD-ROM 包含 Windows 2000 和 Windows XP 的符号文件。
可从 http://www.microsoft.com/whdc/DevTools/Debugging/symbolpkg.mspx 为您的 Windows 版本下载最新符号。
可以从 Microsoft 公共符号服务器自动下载符号。
有关更多信息,请参见如何:使用符号服务器。
第三方供应商可能会提供这些符号。
/ZI 或 /Zi(用于 C/C++)生成时,将创建一个 PDB 文件。
在 Visual C++ 中,/Fd 选项用于命名由编译器创建的 PDB 文件。当使用向导在 Visual Studio 中创建项目时,/Fd
选项被设置为创建一个名为project.PDB 的 PDB。
如果使用生成文件创建 C/C++ 应用程序,并指定 /ZI 或/Zi 而不指定
/Fd 时,则最终将生成两个 PDB 文件:
VC80.PDB (更笼统地说就是 VCx0.PDB,其中x 表示 Visual C++ 的版本。)该文件存储各个 OBJ 文件的所有调试信息并与项目生成文件驻留在同一个目录中。
project.PDB 该文件存储 .exe 文件的所有调试信息。
对于 C/C++,它驻留在 \debug 子目录中。
每当创建 OBJ 文件时,C/C++ 编译器都将调试信息合并到 VCx0.PDB 中。插入的信息包括类型信息,但不包括函数定义等符号信息。
因此,即使每个源文件都包含公共头文件(如 <windows.h>),这些头文件中的 typedef 也只存储一次,而不是在每个 OBJ 文件中都存在。
链接器将创建 project.PDB,它包含项目的 EXE 文件的调试信息。project.PDB 文件包含完整的调试信息(包括函数原型),而不仅仅是在 VCx0.PDB 中找到的类型信息。这两个 PDB 文件都允许增量更新。
链接器还在其创建的 .exe 或 .dll 文件中嵌入 .pdb 文件的路径。
Visual Studio 调试器使用 EXE 或 DLL 文件中的 PDB 路径查找 project.PDB 文件。如果调试器在该位置无法找到 PDB 文件或者如果路径无效(例如,如果项目被移动到了另一台计算机上),调试器将搜索包含 EXE 的路径,即在“选项”对话框(“调试”文件夹,“符号”节点)中指定的符号路径。如果调试器无法找到
.PDB 文件,则显示“查找符号”对话框,这将允许您搜索符号或向搜索路径添加其他位置。
重要事项 |
---|
调试器只会为二进制文件加载与该二进制文件生成之时所创建的 PDB 完全相符的 PDB(就是说,该 PDB 必须是原 PDB 或其副本)。因为编译器在创建二进制文件时会考虑多种因素,所以,即使代码自身没有变化,二进制文件的实际布局也可能会有变化。 |
DBG 文件
DBG 文件是可迁移可执行 (PE) 格式文件,该文件包含 Visual Studio 调试器的 Codeview 格式的调试信息(也可能是其他格式,视 DBG 的创建方式而定)。当没有某些代码的源(如库或 Windows API)时,DBG 文件允许调试。
DBG 文件还允许执行 OLE RPC 调试。
DBG 文件已经由 PDB 文件替代,PDB 文件现在更常用于调试。
可使用 REBASE.EXE 实用工具从 PE 格式的可执行文件中去除调试信息并将其存储在 DBG 文件中。
PE 文件头中的文件特性字段 IMAGE_FILE_DEBUG_STRIPPED 通知调试器 Codeview 信息已被抽出到单独的 DBG 文件中。
可下载和安装系统 DBG 文件,该文件包含用于调试对 Windows API 的调用的符号。
当使用 DBG 文件中的符号进行调试时,必须使用完全修饰名。
例如,若要在 Windows sndPlaySound 函数调用上设置断点,必须指定
_sndPlaySoundA@8。
Visual Studio 调试器并不旨在调试受保护模式的核心代码,即使对于 DBG 符号也如此。
对于用户模式的调试,Visual Studio 需要下列文件:
在 Windows 2000 计算机上,\winNT\SYMBOLS\DLL 目录中的 DBG 和 PDB 文件。
在 Windows XP 计算机上,\Windows\SYMBOLS\DLL 目录中的 PDB 文件。
有关 DBG 文件的更多信息,请参见以下知识库文章:Q121366,INFO: PDB and DBG Files - What They Are and How They Work(Q121366,信息:PDB 和 DBG 文件 — 这些文件是什么以及其工作方式)。
可以在 MSDN Library 中查找知识库文章。
安装用于调试系统调用故障的符号
若要调试在调用系统 DLL 或第三方库时出现的故障,通常需要使用系统 .dbg 或 .pdb 文件,这些文件包含表示 Windows DLL、EXE 以及设备驱动程序的符号。可从若干位置获取这些符号:
Visual Studio CD-ROM 包含选择的 Windows 版本的符号文件。
OS Support Tools CD-ROM 包含 Windows 2000 和 Windows XP 的符号文件。
可从 http://www.microsoft.com/whdc/DevTools/Debugging/symbolpkg.mspx 为您的 Windows 版本下载最新符号。
可以从 Microsoft 公共符号服务器自动下载符号。
有关更多信息,请参见如何:使用符号服务器。
第三方供应商可能会提供这些符号。
相关文章推荐
- 使用PDB文件和符号来调试你的程序
- 编译clanlib出现vs2008的一个bug: 无法打开程序数据库文件:“..\*.pdb”
- error C1041: 无法打开程序数据库“xxx\vc140.pdb”;如果要将多个 CL.EXE 写入同一个 .PDB 文件,请使用
- 调试opencv程序,怎么在vs运行下直接调到opencv的源码,终极,cmake后还要有pdb文件链接
- 【问题】无法查找或打开 PDB 文件【win32程序调试】
- 程序调试中的PDB文件
- 包含别人的dll,然后我们用类库再次封装成dll的时候的注意事项;源文件与模块生成时的文件不同;创建调试信息文件 ··PDB时发生意外的错误,进程无法访问文件,因为另一个程序正在使用此文件
- 使用ADO GetChunk/AppendChunk 数据库存取二进制文件(如程序,图象等)
- 为自己用,写的一简单文件同步程序(vs2003调试通过)
- 在程序中压缩sql server2000的数据库备份文件的代码
- 使用程序备份服务器端数据库文件和其他文件(二)
- mobile开发中用模拟器调试时不需重新部署数据库文件的方法
- 复制数据库时,必须要先停止Sql Server服务,才能复制.否则提示:无法复制,文件正在被另一个人或程序使用.
- Windows程序调试--创建映射文件
- MySQL如何存储图片?---一个向数据库存取image文件的jsp程序
- 安装程序类(VB.net,新建数据库,修改webconfig文件)
- 调试技巧:解决pdb文件不能写入问题
- 安装程序制作之网站系统安装过程中给系统中应用到的数据库文件设置访问权限
- 使用scite和pdb来调试python程序
- 使用程序备份服务器端数据库文件和其他文件(一)