创建编辑继续(Edit and Continue)的程序数据库。这个选项会打开/GF编译选项,/GF编译选项会消除重复字符串,并将字符串放到只读内存。编辑继续功能需要获取存储在PDB文件里的特殊信息来使得代码的修改对调试器有效。如果被修改文件对应的信息不在PDB文件里,编辑继续功能就不能进行,而且在调试过程中对代码的任何修改都会出现下面的提示信息“One or more files are out of date or do not exist.”。
在General类别中,Warning level用于指定编译器显示警告的级别,如果选中了Warnings as errors,那么显示的每一个警告都将会引起一个错误,这样在编译完毕后就无法启动连接器来进行连接。Optimizations用于设置代码优化方式,优化的目的主要有提高运行速度和减小程序体积两种,但有时候这两种目的是相互矛盾的。另外,在极少数情况下,不进行优化,程序能正常运行,打开了优化措施之后,程序却会出现一些莫名其妙的问题。其实这多半是程序中有潜在的错误,关闭优化措施往往只是暂时解决问题。Debug info用于指定编译器产生的调试信息的类型,为了使用Visual C++的即编即调功能,必须在这里选择生成“Program Database for Edit and Continue”类型的调试信息。Preprocessor definitions是一些预先定义的宏名。
C++ Language类别中的选项涉及到了C++语言的一些高级特性,包括有成员指针的表示方式、异常处理、运行时类型信息,一般情况下都不用改变它们。Code Generation类别中的选项涉及如何生成目标代码,一般情况下保持缺省值即可。在Customize类别中,从上到下六个选项的含义分别为:是否禁止使用Microsoft对C++的扩展;是否允许函数级别的连接;是否消除重复的字符串;是否允许进行最小化的重建;是否允许递增编译方式;是否允许编译器在开始运行时向Output窗口中输出自己的版本信息。
在Listing Files类别中,我们可以指定编译器生成浏览信息和列表文件(Listing file),前者可由浏览信息维护工具BSCMAKE生成浏览信息文件,后者则包含了C/C++源文件经过编译后对应的汇编指令。Optimizations类别允许我们对优化措施进行更细微的控制,选择了Customize后,便可以选择进行哪几项优化,在Inline function expansion中我们可以指定对内联函数的扩展方式。Precompiled Headers类别中是关于预编译头文件的一些选项,一般情况下都不用更改。Preprocessor类别中是关于预处理的一些选择。
4、Link 选项卡
Link选项卡控制着Visual C++的连接器。在General类别中,可以指定输出的文件名,以及一些在连接过程中需要使用的额外的库文件或目标文件,下边五个选项的含义分别为:生成调试信息;忽略所有缺省的库文件;允许递增连接方式(这种方式可以加快连接的速度);生成MAP文件;允许进行性能分析。在Customize中选中Use program database允许使用程序数据库。在Debug类别中,我们可以指定调试信息的类别是Microsoft的格式,还是COFF格式,或者两种都有,选中Separate types后连接器会把调试信息分开放在PDB文件中,这样连接起来会更快一些,但调试时速度却会慢一些。Input类别中是一些与输入库文件有关的选项,我们可以在这里指定使用或不使用某些库文件或目标文件。Output类别中则是一些与最终输出的可执行文件有关的选项,一般情况下都不用改变。
程序数据库文件(.pdb)包含了Visual C++调试器所需的调试信息和程序信息。调试信息包含了变量的名字和类型、函数原型、源代码行号、类和结构的布局、FPO调试信息(重建堆栈帧)以及进行增量链接所需的信息。对于设置了Program Database for Edit and Continue选项的程序,PDB还要包含执行编辑继续功能所需的信息。