VC之符号文件
VC之符号文件
一、什么是符号文件?
符号文件(Symbol Files)包含调试信息,专门用来作调试用,用 Visual C++ 和 WinDbg 调试程序时都要用到这个文件。
在 Windows 系统中,符号文件以 .pdb 为扩展名,比如:每个 Windows 操作系统下有*.dll 文件,编译器在编译该 DLL 的时候会产生一个 *.pdb 文件,一旦你拥有了这个 PDB 文件,那么便可以用它来调试并跟踪到 *.dll 内部。该文件和二进制文件的编译版本密切相关,比如修改了 DLL 的输出函数,再编译该 DLL,那么原先的 PDB 文件就过时了,不能再用老的 PDB 文件来做调试工作,而必须使用最新的 PDB 文件版本。
一般情况下,符号文件包括以下的数据信息:
1 全局变量;
2 局部变量;
3 函数名和它们的入口地址;
4 FPO 数据(Frame Pointer Omission):Frame Pointer 是一种用来在调用堆栈(Call stack)中找到下一个将要被调用的函数的数据结构源代码的行序号(Source-line numbers);
二、在 Visual C++ 使用符号文件的方法
在 Visual C++ 6.0 中的使用方法:
5 打开 Visual C++ 6.0 的 Workspace 文件(*.dsw);
6 进入 Tools 菜单,选择 Options 菜单项 (Tools->Options);
7 单击 Directoties 标签;
8 在 “Show directories for”下拉列表中选择 “Executable files”;
9 将符号文件的路径添加到 “Directories” 路径列表中;
10 单击 OK 完成;
三、如何产生 Release 版本二进制文件对应的 PDB 文件?
在 Visual C++ 6.0 中的方法:
11 打开 Visual C++ 6.0 的 Workspace 文件(*.dsw);
12 进入 Project 菜单,选择 Settings 菜单项 (Project->Settings),打开项目设置对话框;
13 在 “Settings for”列表中选择项目的 Release 配置;
14 单击“C/C++”标签;
15 在“Category”下拉列表框中选择“General”选项;
16 在“Debug info”下拉列表框中选择调试信息格式(见下图),在此不必禁用任何优化选项;
17 单击“Link”标签;
18 在“Category”下拉列表框中选择“Debug”选项;
19 选中“Debug info”复选框,然后选择需要的链接调试类型(见下图);
20 不要选择“Separate types”复选框;
21 在“Project options”编辑框的最后添加如下指令:/opt:ref,icf;
22 重新生成(Rebuild)项目;
四、系统符号文件的更新方法
系统符号文件指 Windows 操作系统依赖的那几个重要的 DLL/SYS 和可执行文件对应的符号文件,常见的比如:gdi32.dll、Kernel32.dll、Kerberos.dll、psapi.dll、user32.dll等,使用 WinDbg 调试时,系统符号文件(PDB)很重要,这些文件都与本地的 OS 密切相关,比如,Windows 2000 打了SP补丁的话,那么必须更新系统符号文件才能进行相关调试,原来的符号文件与打补丁后的系统就会不匹配,可以通过过网络来更新!
或者在你用 WinDbg 打开一个被调试程序后,输入 symchk 回车,WinDbg 就会自动的连到微软的网站根据你的机器的情况更新的 PDB 文件,并将它保存,这样你就可以确保你的符号文件版本和你机器上的文件版本一致。
posted on 2012-05-09 11:57 ActiveChange 阅读(2470) 评论(0) 收藏 举报