按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
关于工具设定
我们当然有机会设定编译器、联结器和RC 编译器的选项。图4…5 是两个设定画面。
241
…………………………………………………………Page 304……………………………………………………………
第篇 欲善工事先利其器
图4…5a 选择Visual C++ 的 【Project/Setting。。。】, 出现对话框。选择
【C/C++】附页, 于是可以设定编译器选项。
图4…5b 选择Visual C++ 的 【Project/Setting。。。】,出现对话框。选择 【Link】
附页, 于是可以设定联结器选项。
242
…………………………………………………………Page 305……………………………………………………………
第4章 Visual C++ 整合開發環境
图4…5c 选择Visual C++ 的 【Tools/Options。。。】, 出现对话框。选择
【Format】附页, 于是可以设定程序代码编辑器的字型与大小…。
Source Browser
好的Browser (浏览器)是令人难以置信的一个有用工具,它把你快速带到任何你所指
定的符号(symbol,包括类别、函数、变量、型别或宏)的出现地点。基本上Browser
揭露两件事情:位置(places )和关系(relationship )。它可以显示某个符号「被定义」
以及「被使用到」的任何位置。下面就显示名为CScrib* 的所有类别:
243
…………………………………………………………Page 306……………………………………………………………
第篇 欲善工事先利其器
选按Visual C++ 之【Tools/Source Browse。。。】菜单,出现以下对话框。在【Identifier】字段
键入“ CScrib*” ,并在【Select Query】清单中选择【Definitions and References】:
于是激活Browser,列出所有名为CScrib* 之类别。选择其中的CScribbleApp,右框之中就会填
入所有它出现的位置(包括定义处以及被参考之处)。双击其中之一,你立刻置身其中,文字编辑
器会跳出来,加载此档,准备为你服务。
Browser 也揭露类别之间的关系以及类别与函数之间的关系。MFC 类别彼此叠床架屋,
只以一般的文字编辑器(或如grep 之类的文字搜寻器)探索这些关系,就好象划一艘
小船横渡太平洋到美利坚一样地缓慢而遥远。Browser 使我们在跋涉类别丛林时节省许
多光阴。以下显示应用程序中所有衍生自CObject 的类别。
244
…………………………………………………………Page 307……………………………………………………………
第4章 Visual C++ 整合開發環境
观察应用程序中所有衍生自CObject 的类别。请选按Visual C++ 之【Tools/Source Browse。。。】
菜单,出现对话框。在【Identifier】字段键入”CObject” ,请注意我选择的【Select Query】清
单项目是【Derived Classes and Members】。
于是获得CObject 的所有衍生类别。请注意【Functions】栏是Virtual,【Data】栏是All。
此时Browser 出现三个窗框,左边那个不论外观或行为都像文件总管里头的目录树,右边两个窗
框显示你所选定之类别的详细信息。
245
…………………………………………………………Page 308……………………………………………………………
第篇 欲善工事先利其器
Browser 提供这些【Functions】项目供观察:
Browser 提供这些【Data】项目供观察:
Browser 系从一个特殊的数据库文件(。BSC )取得信息,此文件由Visual C++ 整合环境自
动产生,非常巨大。如果暂时你不想要这个数据库,可以把图4…5a 中的【Generate browse
Info 】选项清除掉。而当你需要它时,选择【Tools/Source Browse。。。 】,整合环境就会问
你是否要建立。BSC 档。
提供给Browser 的资料(。BSC )很类似除错资料,两者都包含程序的符号信息。不同的
是,除错资料附含在EXE 文件中,Browser 所需资料则独立于。BSC 档,不会增加EXE
文件大小(但会增加程序建造过程所需的时间)。
现在我打算观察InitInstance 函数。我在Browse 对话框中键入InitInstance 并选择【Definitions
and References】,于是出现如下画面。双击其中的CWinApp::InitInstance,右框显示此函数原
始定义于e:msdevmfcincludeafxwin。h #4039 行;再双击之,编辑器于是加载此档。以此方式
观察MFC 源代码十分方便。
246
…………………………………………………………Page 309……………………………………………………………
第4章 Visual C++ 整合性軟體開發環境
Online Help
我不是一个喜欢电子书的人,但是拿VC++ 这个Help 系统做快速查阅工作实在是不
错。图4…6 是其使用画面与解说。
图4…6a VC++的Online Help 提供各种技术资料。按下 【Help/Content】,
就出现图左的数据清单,这也就是从Visual C++ 4。0 开始新增的所
谓InfoView 窗口。Online Help 内容非常丰富。
247
…………………………………………………………Page 310……………………………………………………………
第篇 欲善工事先利其器
让我们试试检索功能。选择【Help/Search】,出现对话框,键入CreateThread,出现数篇与此关
键字有关的文章。选择某一篇文章,文章内容将出现在另一个窗口中。
图4…6b 检索功能
248
…………………………………………………………Page 311……………………………………………………………
第4章 Visual C++ 整合性軟體開發環境
图4…6c 检索功能 【Search】对话框的另一个附页。允许你做更多搜寻设定。
除错工具
每一位C 程序员在DOS 环境下都有使用「夹杀法」的除错经验:把可能错误的范围不
断缩小,再缩小,最后以printf 印出你心中的嫌疑犯,真象大白。
Windows 程序员就没有方便的printf 可用,唯MessageBox 差可比拟。我曾经在
Windows 内存管理系统篇( 旗标/1993 )第0章介绍过一种以MessageBox 和
NotePad。exe 合作仿真printf 的方法,使用上堪称便利。
MessageBox 会影响你的程序进行,自制printf 又多费手脚。现在有了第三方案。你可
以在程序的任何地方放置TRACE 宏,例如:
TRACE(〃Hello World〃);
249
…………………………………………………………Page 312……………………………………………………………
第篇 欲善工事先利其器
参数字符串将被输出到除错窗口去,不会影响你的程序进行。注意,TRACE 宏只对程序
的除错版才有效,而且程序必须在Visual C++ 的除错器中执行。
为了让TRACE 生效,你还必须先在另一个程序中做另一个动作。请选按【Tools / MFC
Tracer 】,得到这样的画面:
我们必须将【Enable Tracing】项目设立起来,然后除错窗口才能显示TRACE 字符串。
旧版的Visual C++ 中(v2。0 和v1。5 ),TRACE 宏将字符串输出到一个名为DBWin 的
程序中。虽然应用程序必须以“Win32 debug” 编译完成,但却不需要进入除错器就可以
获得TRACE 输出。从Visual C++ 4。0 开始到Visual C++ 5。0 ,不再附有DBWin 程序,
你无论如何需要大家伙(除错器)。如果你很怀念过去的好时光,请参考Microsoft Systems
Journal 上的三篇文章:1995/10 的C++ Q/A ,1996/01 的C++ Q/A ,以及1997/04 的C/C++
Q/A 。这三篇文章都由Paul Dilascia 执笔,教读者如何自己动手做一个可接收TRACE 巨
集输出的DBWIN 程序。
我将在本书附录D中对Paul Dilascia 的创意提供一些说明。
TRACE 很好用,美中不足的是它和MessageBox 一样,只能输出字符串。这里有一个变通
办法,把字符串和数值都送到afxDump 变量去:
afxDump