Microsoft将应用程序的调试版本定义与符号调试信息,或与调试库一起建立的程序的一个版本。一个库的版本包括诊断帮助。并执行各种集成检查,以帮助调试一个程序。Microsoft将发行版本定义为程序的一个编译版本,其中不包括在调试模式中建立编译时所包含的调试和诊断特性。例如发行版本不包括ASSERT宏所包含的源代码。
1.缺省的调试版本建立与发行版本建立设置
缺省调试和发行版的编译设置
建立版本 | 缺省编译器设置 |
Win32 Debug | 这一选项一Microsoft格式,插入完整的符号调试信息,并 且不做任何优化。在这一阶段使用优化选项将使调试更困难 |
Win32 Release | 不包括任何符号调试信息。源代码以最快速度优化目标 |
2.为调试版本建立修改工程设置
用户可以在Project Settings对话框(从Project菜单的Settings)的C/C++标签中的Debug Info选项修改工程设置,安全的Debug Biuld选项。
安全的Debug Build选项 | 导致Debug Build |
Program Database for Edit and Contiue | 产生一个附加输出文件称为程序数据库(.pdb).该文件包含程序的类型信息和符号调试信息。 |
Line Number Only | 修改.obj文件或可执行文件.exe的翻译。以使其只包含全局和外部符号以及行号信息(不包含符号调试信息) |
C7 Compatible | 产生一个.obj文件和一个.exe文件,并带有调试器使用的行号和全部的符号调试信息 |
None | 不产生调试信息 |
修改产生调试信息的格式
以下配置藐视了配置Link为Microsoft Format(缺省)、COFF Format或者二者皆有:
- 从Project菜单中单击Settings,显示Project Settings对话框
- 单击Link标签
- 从Category下拉列表中选择Debug选项。
- 选择Microsoft Format(缺省)、COFF Format或Both Formats。
- 单击OK接受选择
产生一个映射文件
在调试一个应用程序时,特别是在当需要卸载出特定的内存时,有时映射文件将是非常有用。映射文件实际上是一个文本文件,其中包含了关于正在连接的程序的如下信息:
- 该文件的模块名称或基名称
- 该程序头文件的时间戳
- 程序组列表,每个组以 segment:offset(段:偏移量)形式的起始地址,以及长度,组名和类的构成。
- 公共符号列表,个地址均以segment:offset形式给出,包括符号的名字、浮动地址及定义符号的.obj文件
- segment:offset形式的模块入口地址
为打开映射文件的Debug选项,执行如下步骤:
- 从Project菜单中单击Settings。显示Project Settings对话框
- 选择Link标签
- 从Category中选择Debug标签
- 选择Generate mapfile复选框
- 为所生成的输出文件在Mapfile Name中选择名字,
- ok,接受选择
重定向调试输入和输出
Microsoft Visual C++允许重定向任何Win32 控制台应用程序的文件输入或者输出位置:
- 选择Project--> Settings选项
- 单击Debug标签
- 从Program Arguments文件框中指定一个或多个I/O重定向命令。
- OK,激活选项
命令 | 动作 |
<filename | stdin从filename输入 |
>filename | stdout输出到filename |
>>filename | 追加stdout到filename |
2>>filename | stderr输出到filename |
2>>filename | 追加stderr到filename |
2>&1 | 发送stderr(2)输出到与stdout(1)相同的位置 |
1>&2 | 发送stdout(1)输出到stderr(2)相同的位置 |
3.什么是.pdb文件
当Debugger打开Use Pragram Database选项时,则在建立程序时将产生一个附加文件,该文件中包含了调试和工程的状态信息,允许Visual Studio执行调试程序版本的增量连接。
一般来说,VisualC++仅产生一个输出.pdb文件,然而,如果运行一个不是有Microsoft Visual C++创建的makefile,则将发现有两个.pdb文件,第一个文件为VCx0.pdb(x为当前VisualC++的版本),其中包含了所有正对独立的.obj文件的调试信息,第二个文件为projectname.pdb,其中包含了所有针对于Projectname.exe文件的调试信息。
CVx0.pdb和projectname.pdb文件包着不同类型的信息,VCx0.pdb文件中所有关于程序类型的信息,但不包含任何符号信息,projectname.pdb文件是在连接阶段产生的,该文件包含了关于工程的.exe的文件调试信息,所有调试信息包含函数原型及其他信息,