首页 / 软件开发 / C++ / 符号文件——Windows应用程序调试必备
符号文件——Windows应用程序调试必备2011-04-07Generad USam一、何谓符号文件?符号文件(Symbol Files)是一个数据信息文件,它包含 了应用程序二进制文件(比如:EXE、DLL等)调试信息,专门用来作调试之用,最终生成 的可执行文件在运行时并不需要这个符号文件,但你的程序中所有的变量信息都记录在这 个文件中。所以调试应用程序时,这个文件是非常重要的。用 Visual C++ 和 WinDbg 调 试程序时都要用到这个文件。在 Windows 系统中,符号文件以 .pdb 为扩展名, 比如:每个 Windows 操作系统下有一个 GDI32.dll 文件,编译器在编译该 DLL 的时候 会产生一个 GDI32.pdb 文件,一旦你拥有了这个 PDB 文件,那么便可以用它来调试并跟 踪到 GDI32.dll 内部。该文件和二进制文件的编译版本密切相关,比如修改了 DLL 的输 出函数,再编译该 DLL,那么原先的 PDB 文件就过时了,不能再用老的 PDB 文件来做调 试工作,而必须使用最新的 PDB 文件版本。Visual C++ 编译代码后会在 Debug 或者 Release 目录下生成一个 PDB 文件。一般情况下,符号文件包括以下的数据信息:全局变量(Global variables);局部变量(Local variables);函数名和它们的入口地址(Function names and the addresses of their entry points);FPO 数据(Frame Pointer Omission):Frame Pointer 是一种用来在 调用堆栈(Call stack)中找到下一个将要被调用的函数的数据结构源代码的行序号 (Source-line numbers);二、如何得到和安装符号文件?先确定你的操 作系统(OS)版本;到微软网站下载相应的符号文件;安装符号文件,对 于符号文件的安装位置没有特贝要求,可以安装在任何目录中;设置环境变量, 使得调试工具(比如:Visual C++、WinDbg、Ntsd、DrWatson 等)能找到符号文件;安装符号文件的注意事项:如果是手动安装符号文件,有一点很重要,那 就是宿主机(Hostt Computer)上的符号文件必须与目标机器(Target Computer)上的 Windows 版本相匹配。这里所谓的宿主机指的是运行调试会话的机器,在典型的 双系统调试会话环境中,宿主机可以是连接到目标机器的任何机器。目标机器指的是发生 软件组件、系统服务、应用程序或操作系统运行失败的机器。也即是需要被调试的机器, 它是调试会话关注的焦点。目标机器可以近在咫尺,也可以位于完全不同的地方。有时我 们也将目标机器称之为——被调试者(debuggee),那么与之对应,宿主机则 可以称为调试者(debugger)。三、在 Visual C++ 使用符号文件的方法在 Visual C++ 6.0 中的使用方法:打开 Visual C++ 6.0 的 Workspace 文件( *.dsw);进入 Tools 菜单,选择 Options 菜单项 (Tools->Options);单击 Directoties 标签;在 “Show directories for”下拉 列表中选择 “Executable files”;将符号文件的路径添加到 “Directories” 路径列表中;单击 OK 完成;在 Visual C++ .NET 2003 中的使用方法:打开 Visual C++ .NET 的项目文件(*.vcproj) ;在解决方案管理器中选中要使用符号文件的项目;单击右键进入项目属 性对话框;选择“配置属性”中的“调试”;在与 “调试”对应的“操作”选项中有一个“符号路径”, 在此添加符号文件的路径即可;单击 “确定” 完成;