|
2.3 Debug调试程序 |
|
将军,虽然你写代码水平还行,但也难免遇到程序崩溃的时候。
哈哈哈哈,过奖,过奖。崩溃算什么,崩着崩着就习惯了。
你个二百五,崩来崩去会崩成仇的,下面还是先学会Debug吧。当程序不能成功运行,或在运行过程中突然故障,我们通常称之为有BUG。在代码中导致程序故障的原因通常有语法错误和语义错误两种。语法错误是由语句形式错误引起的,如语句结尾少加了分号等,这类错误比较容易被发现,编译器能容易地识别出此类错误,并为程序员指示错误信息。而语义错误通常是语法正确,编译器能通过,但逻辑或者数据流有错误,使程序异常终止,这类错误比较难以被发现,这就需要用到Visual C++ 2008的Debug调试功能了,用它就能帮助你更方便地找出错误。
不会这么神吧?
就是这么神。不信的话,看我给你演示。
1.设置断点
所谓断点,就是在程序中使调试器暂停执行的位置。在程序中可以设置多个断点,这样程序就可以在你认为可能有错误的范围处停止,然后从断点处开始进行单步执行,并同时查看各变量的值,从而揪出错误。在源代码中设置断点的方法有几种,例如,将光标停留在要设置断点的语句行,然后单击菜单栏的“调试”菜单项,单击“切换断点”命令或者按快捷键“F9”即可设置断点。是不是有点复杂,将军别急,还有种更方便的办法,如图2.13所示,你可以看到,语句行左边有一条纵向的灰色栏,上面有3个红色的圆点,这也是断点,你只需要在那条灰色栏上单击就可以在需要的地方设置断点。那个红色的圆点符号也称为图示符,它所在的地方表明该语句是一个断点,用同样的操作可取消断点。
图2.13
2.启动调试
将军要是能快速使用VS2008的相关调试快捷键,那调试起程序来,就能事半功倍。
俺早就掌握了。启动调试是“F5”键,逐语句是“F11”键,逐过程是“F10”键,跳出是“Shift+F11”组合键,对不对?
还真被你记住了。
“启动调试”命令:使程序运行到第一个断点(如果有的话)后暂停,此时这个命令会变为“继续”命令,单击“继续”命令,使程序运行到下一个断点。
“逐语句”命令:当直接单击该命令时,程序从主函数的第一条语句开始执行,并在每条语句执行后停止,该命令在断点后单击可用于执行之后的一条语句,并停止。“逐语句”可进入语句中的函数内部,并在其内部逐语句执行。
“逐过程”命令:该命令只在主函数内运作,不跳转到函数内部。当直接单击该命令时,程序从主函数的第一条语句开始执行,并在每条语句执行后停止,可在断点后单击,用于执行之后的一条语句,并停止。
“跳出”命令:当程序运行在主函数的某一语句时,单击该命令没有效果。当执行“逐语句”后,单击该命令,可在进入其他函数后跳出而回到主函数。
你有没有注意,调试将激活调试工具栏,如图2.14所示。工具栏上各按钮的功能和“调试”菜单里命令的功能相同。
图2.14
3.查看变量
在断点处或语句后,都可以查看当前程序的变量。在调试过程中,VS2008下方还会出现“自动窗口”,如图2.15所示。
图2.15
将军可以看到,该窗格显示了当前语句及相关的前一条语句正在使用的自动变量的值。另外,你还可查看“局部变量”、“线程”、“模块”、“监视1”等多种信息窗格。
●“局部变量”窗格:查看当前函数中局部变量的值。在此例中可以查看i,j和unit的值。
●“线程”窗格:检查并控制高级应用程序中的线程。
●“模块”窗格:列出当前执行代码模块的细节。
●“监视1”窗格:可以将被监视的变量添加到“监视1”窗格中。
将军,一名合格的黑客,不仅会用到以上几个调试窗格,还会用到更多的调试窗格。你知不知道是哪些?
嗯,你说啥?我在掏耳朵。
黑客还需要经常用到内存,调用“堆栈”、“内存”、“寄存器”等调试窗格。将军先别忙着掏耳朵,要牢记这些窗格才对。