第2回 黑客的编程利器

你介绍微软强大的开发环境Visual Studio 2008,它是黑客编程道路上的铺路石,可以使你的编程过程更加灵活、得心应手。

在了解了黑客的相关知识后,张飞意识到“工欲善其事,必先利其器”。真正的黑客应该拥有自己擅长的开发工具。于是他开始四处寻找自己的武器,首先找到的工具是Turbo C。张飞为此兴奋了许久,一连好几天编程熬到深夜,但不知为何,经常遇到Turbo C挂起而导致很多工作没有保存的情况,为此他懊恼不已。但他不甘示弱,在学习的同时,继续上网查找新的工具,偶然发现有达人使用的工具是Microsoft Visual C++ 6.0,张飞立刻买来替换了Turbo C,发现确实好用多了。但随后他又发现,很多时候代码没有错误,却怎么也编译通不过,偶尔还会出现编译卡死的状态,这令张飞很是头痛。所幸没过多久,最新版的Microsoft Visual Studio 2008开始销售,张飞充分了解了Visual Studio 2008的新特性和强大功能,购买了一套进行安装。安装后发现,较6.0来说,VS2008确实改良了很多,以前遇到的问题都不见了,既提高了效率又保证了稳定性。于是,在VS2008开发环境下,张飞正式开始了黑客编程学习的旅程。

先生,最开始俺学习编程的时候一直用Turbo C,那玩意儿邪门难用,外观也很是丑陋,后来俺换成了Visual C++ 6.0,可是又老是编译通不过。俺写的代码那可是个顶个,呱呱叫,怎么可能出错嘛。所以,俺老张花了重金买下Visual Studio 2008,也不知道这玩意能不能比俺的丈八蛇矛更好使?

将军问得好,随着这计算机技术的发展啊,编程早就不再是单纯的敲打代码了,踩在……哦,错了,是站在前人的经验上,使用全新的编程环境,已经让编程过程变得简单明快。这个Visual Studio 2008就有这种强大的功能。它是微软公司推出的、用于Windows平台应用程序开发的集成开发环境,可以让编程人员更快速地创建高质量的应用程序,有了它,以后你编写应用程序就会变得更为高效和轻松。

说得好……不过我没听懂。军师还是快教我如何用吧。

2.1 VisualC++2008简介

2.1.1 回顾Visual C++ 历史

不知将军看出来没,其实VC++ 6.0和VS2008开发环境是一家人。

这倒是看出来了,从这两个名字看,是不是它们的祖先就是VC++ 1.0。

将军果然聪明,自1993年Microsoft公司首次推出Visual C++ 1.0到现在,Visual C++已俨然成为专业程序员进行软件开发的首选开发平台。喏,这就是Visual C++ 2008的界面(如图2.1所示)。它包含的IDE是一个用于创建、编译、连接和测试C++程序的完全独立的环境。在这个开发环境里,将军可以自由地进行编程和调试,它还增加了可视化设计器(使用 .NET Framework 3.5加速开发)。

哈,这个Visual C++ 2008果然比Visual C++ 6.0俊俏很多啊。

……将军,你的口水喷到我脸上了。

哈哈,今天天气真好,哈哈。

图2.1

2.1.2 配置Visual C++ 2008

军师,说了这么多,俺都等不及了,军师赶紧教俺把Visual C++ 2008装在电脑上吧。

好好好,这就为将军进行演示。

1)首先,当然是把Visual Studio 2008的安装盘放入光驱,系统会自动搜索并进入安装界面。将军的系统如果屏蔽了光盘自动播放的功能,那就需要打开光盘,双击setup.exe文件进行安装。出现如图2.2所示的安装程序对话框后,单击其中的“安装Visual Studio 2008”按钮,就会进入安装流程。

2)这里,将军需要等待一小会儿,安装程序将进行文件加载。加载完成后,进入如图2.3所示的安装欢迎页面并继续加载安装组件。所有组件都加载完后,单击“下一步”按钮继续安装,如图2.4所示。

图2.2

图2.3

3)这一步,需要劳动下将军尊贵的手指头,阅读完许可条款后,选中“我已阅读并接受许可条款”单选项,什么?将军你不想接受,那也可以,不接受,你就别安装了,所以,还是接受吧。单击“下一步”按钮,然后从购买的光盘中取得密匙,输入用户名及密钥,单击“下一步”按钮继续安装。

图2.4

4)将军注意了,接下来我们要对安装方式进行选择,闲杂人等让开——闲杂安装程序也得让开,这里我只选择“Visual C++”。你还可以对安装目录进行修改,选择一个专用的磁盘空间。选择好后,单击“安装”按钮开始安装,如图2.5所示。

图2.5

将军,将军,你说你想把你的每一分钱都安装上去,坚决不浪费。对,你的想法很好很强大,我对你的敬仰犹如滔滔江水,绵绵不绝……

客气,客气。虽然我很白,但我不是小白。这么贵的软件,不安白不安。

……

5)在安装界面中,左侧是正在或将要安装的组件,右侧是Visual Studio 2008的一些介绍,如图2.6所示。将军看几分钟吧,几分钟就安完了。

图2.6

一小时以后……

军师,这什么时候才能装好啊,俺都等了这么长时间了。

将军莫急,就等几分钟。

切,你莫再骗俺了,一小时前你就说等几分钟,结果咱等了一个小时。

不会吧,你再看看,或许你表坏了。

6)终于完成了,安装成功的界面如图2.7所示,单击“完成”按钮。

图2.7

7)Visual Studio 2008安装完成后,第一次启动需要对其进行一些配置,将军别怕,不需要你弹动你那珍贵的手指头。如图2.8所示,Visual Studio 2008会自动进行配置,随后就能进入开发平台主界面。

图2.8

2.2 在VisualC++2008中写出第一个程序

2.2.1 建立程序的“工程”

呼,呼。这就是俺的“钱”么,快教俺,俺想赶紧开始写代码了。

将军莫急,心急当不了好黑客啊。下面我就一步步交给将军。这里将军一定要仔细听,要不然,到时候将军建错了工程,造成代码又无缘无故编译不通过,可不要怪罪于我呀。

什么叫“又”?别说没用的,我在听。

一个完整的Windows应用程序通常由五种类型的文件组成:源程序文件、头文件、资源描述文件、项目文件、模块定义文件。其中,源程序文件为程序员开发应用程序的核心,而在源程序文件中,则由主函数构成应用程序的主体。我就来为将军演示一番,我要在Visual C++ 2008中写出一个简单的控制台程序,你要看仔细了,后面我还会通过这个程序来介绍如何进行调试。

1)一个程序就是一个工程,这里我首先要创建一个控制台工程。启动Visual C++ 2008,单击菜单栏“文件”→“新建”→“项目”命令,会弹出如图2.9所示的“新建项目”对话框,跟着我进行操作,最后单击“确定”按钮即可。

图2.9

2)接着就要对我们想要编写的应用程序进行设置。上一步操作后,会弹出“Win32应用程序向导”对话框,单击“下一步”按钮,在出现的如图2.10所示的对话框中,选择应用程序类型为“控制台应用程序”,然后单击“完成”按钮。

图2.10

2.2.2 编写代码

新的工程就算是建好了。

哈哈,这就好了?果然够智能。是不是我脑袋里想一想,它就会自动输出“诸葛亮是猪”。

你果然够“猪”,新建的工程是一个空白项目,要它发挥作用还需要添加代码,也就是添加源程序文件。

我失望了,你欺骗我。

1)废话少说,看仔细我如何添加源程序文件。单击菜单栏中的“项目”→“添加新项”命令,会弹出如图2.11所示的“添加新项”对话框,“模板”自然是选择“C++文件(.cpp)”,根据需要命名,如“AppMain”,然后单击“添加”按钮。

2)将军你瞧,单击“添加”按钮就自动进入代码编辑页“AppMain.cpp”,在页中添加如下所示的代码。

图2.11

        #include<iostream>
        using namespace std;
        /////////////////////////////////////////////////////
        //定义一个函数便于演示
        /////////////////////////////////////////////////////
        char GetChar(int n)
        {
            char*Title;
            Title="哥是犀利的黑客";
            return Title[n];
        }
        /////////////////////////////////////////////////////
        //主函数
        /////////////////////////////////////////////////////
        int main( )
        {
            char unit[100];
            for(int i=0; i<20;)
            {
              for(int j=i; j<i+2; j++)
              {
                  unit[j]=GetChar(j);
                  cout<<unit[j];
              }
              cout<<"";
              i+=2;
            }
            cout<<endl;
        return 0;
    }

哎呀,连军师也夸俺犀利,想当年俺刚开始跟哥哥们打天下的时候,只犀利的一嗓子就吓跑了曹操千军万马。

……其实,我不是在说你。

2.2.3 运行第一个程序

搞了这么久,还是来看看效果吧。

我该点哪个?

单击菜单栏中的“调试”菜单项,单击“启动调试”命令就可以了。将军也可以按快捷键“F5”编译运行程序。这样做的话,编译器会先检查语法,然后进行编译。如果编译能够通过,就会显示运行结果,如图2.12所示。

用惯了6.0版本,俺一听到调试就冒冷汗。

图2.12

2.3 Debug调试程序

将军,虽然你写代码水平还行,但也难免遇到程序崩溃的时候。

哈哈哈哈,过奖,过奖。崩溃算什么,崩着崩着就习惯了。

你个二百五,崩来崩去会崩成仇的,下面还是先学会Debug吧。当程序不能成功运行,或在运行过程中突然故障,我们通常称之为有BUG。在代码中导致程序故障的原因通常有语法错误和语义错误两种。语法错误是由语句形式错误引起的,如语句结尾少加了分号等,这类错误比较容易被发现,编译器能容易地识别出此类错误,并为程序员指示错误信息。而语义错误通常是语法正确,编译器能通过,但逻辑或者数据流有错误,使程序异常终止,这类错误比较难以被发现,这就需要用到Visual C++ 2008的Debug调试功能了,用它就能帮助你更方便地找出错误。

不会这么神吧?

就是这么神。不信的话,看我给你演示。

1.设置断点

所谓断点,就是在程序中使调试器暂停执行的位置。在程序中可以设置多个断点,这样程序就可以在你认为可能有错误的范围处停止,然后从断点处开始进行单步执行,并同时查看各变量的值,从而揪出错误。在源代码中设置断点的方法有几种,例如,将光标停留在要设置断点的语句行,然后单击菜单栏的“调试”菜单项,单击“切换断点”命令或者按快捷键“F9”即可设置断点。是不是有点复杂,将军别急,还有种更方便的办法,如图2.13所示,你可以看到,语句行左边有一条纵向的灰色栏,上面有3个红色的圆点,这也是断点,你只需要在那条灰色栏上单击就可以在需要的地方设置断点。那个红色的圆点符号也称为图示符,它所在的地方表明该语句是一个断点,用同样的操作可取消断点。

2.启动调试

将军要是能快速使用VS2008的相关调试快捷键,那调试起程序来,就能事半功倍。

俺早就掌握了。启动调试是“F5”键,逐语句是“F11”键,逐过程是“F10”键,跳出是“Shift+F11”组合键,对不对?

还真被你记住了。

图2.13

“启动调试”命令:使程序运行到第一个断点(如果有的话)后暂停,此时这个命令会变为“继续”命令,单击“继续”命令,使程序运行到下一个断点。

“逐语句”命令:当直接单击该命令时,程序从主函数的第一条语句开始执行,并在每条语句执行后停止,该命令在断点后单击可用于执行之后的一条语句,并停止。“逐语句”可进入语句中的函数内部,并在其内部逐语句执行。

“逐过程”命令:该命令只在主函数内运作,不跳转到函数内部。当直接单击该命令时,程序从主函数的第一条语句开始执行,并在每条语句执行后停止,可在断点后单击,用于执行之后的一条语句,并停止。

“跳出”命令:当程序运行在主函数的某一语句时,单击该命令没有效果。当执行“逐语句”后,单击该命令,可在进入其他函数后跳出而回到主函数。

你有没有注意,调试将激活调试工具栏,如图2.14所示。工具栏上各按钮的功能和“调试”菜单里命令的功能相同。

图2.14

3.查看变量

在断点处或语句后,都可以查看当前程序的变量。在调试过程中,VS2008下方还会出现“自动窗口”,如图2.15所示。

将军可以看到,该窗格显示了当前语句及相关的前一条语句正在使用的自动变量的值。另外,你还可查看“局部变量”、“线程”、“模块”、“监视1”等多种信息窗格。

图2.15

● “局部变量”窗格:查看当前函数中局部变量的值。在此例中可以查看i, j和unit的值。

●“线程”窗格:检查并控制高级应用程序中的线程。

●“模块”窗格:列出当前执行代码模块的细节。

●“监视1”窗格:可以将被监视的变量添加到“监视1”窗格中。

将军,一名合格的黑客,不仅会用到以上几个调试窗格,还会用到更多的调试窗格。你知不知道是哪些?

嗯,你说啥?我在掏耳朵。

黑客还需要经常用到内存,调用“堆栈”、“内存”、“寄存器”等调试窗格。将军先别忙着掏耳朵,要牢记这些窗格才对。

2.4 茅庐对话

将军,今天我带着您学习了如何安装、配置和使用VS2008,并简单学习了程序调试,相信将军已经熟练掌握了吧。

那当然,以俺的智商,哼。想当年,俺那犀利的一嗓子……

将军,你有智商么?

莫忙,你让我想想。

……将军如果熟练掌握了VS2008,编程水平肯定迅速提高,到时候曹操也就是一碟菜啊。

军师说的是,俺再去复习下如何新建一个工程,如何编写一个简单的源程序。