VC6.0调试程序过程
- 格式:doc
- 大小:1.84 MB
- 文档页数:35
调试程序可以帮助了解程序是怎样运行的。
1、如何快速地规范代码缩进格式选中所需要规范的代码,按shift+F82、如何在Release状态下进行调试Project->Setting…->Project Settings对话框,选择Release状态。
“C/C++”标签页中的Category选General,Optimizations选Disable(Debug),Debug info选Program Database。
在“Link”标签页中选中Generate debug info复选框。
注:只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY都不起作用,函数调用方式已经是真正的调用,而不查表,但是这种状态下QuickWatch、调用队列跟踪功能仍然有效,和Debug版一样。
3、Release和Debug有什么不同。
Release版称为发行版,Debug版称为调试版。
Debug中可以单步执行、跟踪等功能,但生成的可执行文件比较大,代码运行速度较慢。
Release版运行速度较快,可执行文件较小,但在其编译条件下无法执行调试功能。
Release的exe文件链接的是标准的MFC DLL(Use MFC in a shared or static dll),比如MFC42.DLL。
这些DLL在安装Windows的时候,已经配置,所以这些程序能够在没有安装Visual C++ 6.0的机器上运行。
而Debug版本的exe链接了调试版本的MFC DLL文件,如MFC42D.DLL。
在没有安装Visual C++6.0的机器上不能运行,因为缺MFC42D.DLL等,除非选择use static dll when link。
4、ASSERT和VERIFY有什么区别ASSERT里面的内容在Release版本中不编译,VERIFY里面的内容仍然编译,但不再判断真假。
所以后者更安全一点。
使用VC6.0编写和调试源程序一、编写和执行程序1)新建一个工作空间。
2)新建一个工程, win32控制台程序3)新建一个C++源文件4)写入源程序。
5)编译,生成可执行程序6)观察下方提示,找出错误所在行,检查程序。
7)修改程序直到编译通过。
8)执行程序, 观察执行结果,如果错误,需要对程序进行调试。
1)显示调试工具栏2) 设置断点(断点:调试时,程序执行至此处暂停。
)在源程序中选择要增加断点的行,按F9或工具栏的手型符号添加断点。
3)按工具栏上的调试按钮或快捷键F5,开始调试程序输入数据后,程序在断点上暂停。
可以点击调试工具栏的“WA TCH”显示自动变量追踪窗口从左下方的窗口观察自动变量的值。
可以点击调试工具栏的“variables”显示自定义变量追踪窗口在右下方窗口增加需要追踪的变量(直接输入变量名称)可以点击调试工具栏的“WA TCH”显示自动变量追踪窗口点调试工具栏上的单步调试键或快捷键F11,进行单步调试。
VC6.0Debug调试总结1. 如何显示Debug工具栏窗口?①:在任意工具栏的位置,单击鼠标右键,勾选Debug项②:Tools---->Customize--→Toolbars--→Debug--→close引申:工具栏和工具条的区别?一个工具栏可以放置多个工具条。
2.关于断点调试F9:设置或去除断点。
如果当前行未设置断点,按F9可在当前行设置断点,如果当前行已设置断点,按F9则为去除断点设置。
Alt+F9:调出断点设置窗口在这个窗口里可以设置断点,去除所有已经设置的断点或者单个断点,也可以转到已设置的断点处,通过按钮Edit Code,可以设置需要被计算的表达式,可以设置,监视(Watch)数组或结构体元素的个数,可以在窗口过程函数中设置断点,可以为任何一个想要监视(Watch)的消息(Message)设置一个断点。
3.关于开始调试①:Build--→Start Debug--→Go②:F5注:F5有两层含义。
更多共享就在:/avbbtv/home,个人整理,没有版权,欢迎共享---avbbtv如何在Visual C++ 6.0 环境下进行简单的C语言程序调试桂林电子科技大学波仔*****************文章简介本文主要介绍如何在VC6.0 环境下进行简单的C 语言程序调试。
作为阅读本文的基础,读者应该熟悉如何在VC6.0 环境下建立Win32 Console Application(Win32控制台程序) 类型的工程。
请结合文章给出的案例,按照文档中的描述一步一步做。
如果只是阅读,则收效甚微。
在做完文章给出的案例后,你应该尝试着将文章中介绍的知识和技巧应用到你实际开发的程序中。
如果阅读完一遍后,对调试基本概念还是不了解,建议你再多看几遍。
在介绍如何进行C 语言程序调试( debugging)前,首先介绍程序调试的概念。
调试(debug)一词在计算机领域最早被提及,源于美国人Admiral Grace Hopper(葛丽丝·霍普、COBOL 语言发明者、电脑科学家) 。
二十世纪四十年代(1940s) Grace Hopper在哈佛大学为名为马克2 号(Mark II) 的计算机( 由IBM 公司制造) 编写程序时,有一次在排除计算机故障时,发现一只飞蛾被夹在触点原件之间,导致计算机无法运行。
于是她诙谐的把计算机故障称之为“臭虫(bug)”,把排除程序故障称之为debug 。
从此之后,在计算机领域,程序调试或查找程序故障称为debug 。
进行程序开发时,很多情况是程序通过编译、链接( 亦即不存在语法错误) ,但是在运行时往往得不到正确的结果( 需要多组输出数据进行测试)。
这时往往意味着程序存在逻辑错误( 与语法错误对应,通常是指程序所体现出的逻辑不符合开发者要求,或者是开发者本身对程序所要解决的某一问题的理解存在逻辑偏差) ,而查找逻辑错误的过程可称之为程序调试。
程序案例下面以一个程序案例为例,介绍如何在VC6.0 下进行程序调试。
Visual C++ 6.0程序调试在编写较长的程序时,能够一次成功而不含有任何错误决非易事,对于程序中的错误,系统提供了易用且有效的调试手段。
调试是一个程序员最基本的技能,不会调试的程序员就意味着即使学会了一门语言,却不能编制出任何好的软件。
1、调试程序环境介绍①进入调试程序环境选择主菜单“编译(Build)”中的“开始调试(Start Debug)”命令,选择下一级提供的调试命令,或者在菜单区空白处单击鼠标右键,在弹出的菜单中选中“调试(Debug)”项。
激活调试工具条,选择需要的调试命令,系统将会进入调试程序界面。
同时提供多种窗口监视程序运行,通过单击“调试(Debug)”工具条上的按钮,可以打开/关闭这些窗口,参考图8。
②Watch(观察)窗口单击调试(Debug)工具条上的Watch按钮,就出现一个Watch窗口,系统支持查看程序运行到当前指令语句时变量、表达式和内存的值。
所有这些观察都必须是在断点中断的情况下进行。
观看变量的值最简单,当断点到达时,把光标移动到这个变量上,停留一会就可以看到变量的值。
还可以采用系统提供一种被称为Watch的机制来观看变量和表达式的值。
在断点中断状态下,在变量上单击右键,选择Quick Watch,就弹出一个对话框,显示这个变量的值。
在该窗口中输入变量或者表达式,就可以观察变量或者表达式的值。
注意:这个表达式不能有副作用,例如“++”和“- -”运算符绝对禁止用于这个表达式中,因为这个运算符将修改变量的值,导致程序的逻辑被破坏。
③Variables(变量)窗口单击调试(Debug)工具条上的“Variables“按钮弹出Variables窗口,显示所有当前执行上下文中可见的变量的值。
特别是当前指令语句涉及的变量,以红色显示。
④Memory(内存)由于指针指向的数组,Watch窗口只能显示第一个元素的值。
为了显示数组的后续内容,或者要显示一片内存的内容,可以使用memory功能。
VC++6.0中如何编译运行调试C语言程序1.启动VC++6.0 (如下图)2.单个源文件的编译运行例如下面的源代码#include<stdio.h>void main(){ int i,sum=0;for(i=1;i<=10;i++){sum=sum+i;}printf("sum=%d\n",sum);}打开VC++6.0,如图1所示(图1)选择“文件”→“新建”,打开如图2所示(图2)选择“文件”项,如图3所示(图3)选择“C++ Source File”项,并在“文件名”项目下输入“sum.c”如图4所示(图4)单击“确定”,打开如图5所示(图5)输入如上源代码,如图6所示(图6)选择按编译按钮调试程序,看看有没有错误,有的话改正,没有的话就可以再按连接按钮检查连接(多文件工程时常用,检查文件间是否正常连接)。
(图7)在下端的输出窗口会有错误和警告的提示,如果没有错误选择“执行”(或按Ctrl+F5组合键)即可出现运行结果,如图8所示(图8)3.多个源文件的编译运行以上是运行单个源文件的情况,但是在程序设计时,往往是由几个人各自独立编写不同的程序,显然这些程序是不能写在一起进行编译的,这时就需要建立项目工作区来完成几个独立程序的编译,具体方法如下。
首先建立两个文本文件,分别命名为“file1.c”和“file.c”,分别在两个文件中输入如下两个源代码,然后保存。
源代码1:#include<stdio.h>void main(){void sum();sum();}源代码2:#include<stdio.h>void sum(){int i,sum=0;for(i=1;i<=10;i++){sum=sum+i;}printf("sum=%d\n",sum);}打开VC++6.0,选择“文件”→“新建”打开如图9所示(图9)选择“工作区”项,并在“工作空间名称”项目下输入“sum”如图10所示(图10)单击“确定”,打开如图11所示(图11)在左侧的“工作区窗口”显示了新建立的工作区选择“文件”→“新建”打开如图9所示,在“工程”项目下选择“W in32 Console Application”项,并在“工程名称”项目下输入工程名称,如“sum”,选择“添加到当前工作空间”项,如图12所示(图12)单击“确定”,打开如图13(图13)选择“一个空工程”项,单击“完成”,打开如图14所示(图14)单击“确定”,打开如图15所示(图15)在左侧的“工作区窗口”显示了新建立的工程选择“工程”→“添加到工程”→“文件”,打开如图16所示选择刚刚创建的两个文件,单击“确定”,打开如图17所示选择“组建”→“组建”(或按F7键),打开如图18所示(图18)在下端的输出窗口会有错误和警告的提示,如果没有错误选择“组建”→“执行”(或按Ctrl+F5)即可出现运行结果,如图19所示(图19)4.如何快速地规范代码缩进格式选中所需要规范的代码,按Alt+F8。
一、调试基础调试快捷键F5:开始调试Shift+F5: 停止调试F10:调试到下一句,这里是单步跟踪F11:调试到下一句,跟进函数内部Shift+F11: 从当前函数中跳出Ctrl+F10: 调试到光标所在位置F9:设置(取消)断点Alt+F9: 高级断点设置跟踪调试1、尽量使用快捷键时行调试2、观察调试信息3、高级中断设置异常调试重试->取消->调试函数堆栈,用variables或者call stack 窗口Release调试1、经常测试你的Debug和Release版本2、不要移除调试代码,如用ASSERT, TRACE等。
3、初始化变量,特别是全局变量,malloc的内存,new的内存4、当你移除某个资源时,确保你移除了所有跟这个资源相关的申明(主要是在resouce.h文中)5、使用3或者4级的警告级编译你的代码,并确保没有警告,project->setting->c/c++->warninglevel(中文版是项目->属性->C/C++->常规->警告等级)6、_debug改成NDEBUG进行调试,project->setting->C/C++->Preprocessordefinitions(中文版是项目->属性->C/C++->预处理器->预处理定义)(这里是debug和Release编译的重要不同之一)7、在Release中调试源代码,project->setting->C/C++->debug info选择programDataBase (中文版是项目->属性->C/C++->常规->调试信息格式->用于“编辑并继续”的程序数据库),project ->setting->link选上Generate debug info(中文版是项目->属性->链接器->调试->生成调试信息)8、走读代码,特别关注堆栈和指针二、TRACE宏当选择了Debug目标,并且afxTraceEnabled变量被置为TRUE时,TRACE宏也就随之被激活了。
vc++6.0 调试详细教程Step intoStep overStep outRun to cursorWatchVariablesRegistersMemoryStop DebugCall stackDisassemblyRestart Debugger2、调试的一般过程调试,就是在程序的运行过程的某一阶段观测程序的状态。
在一般情况下程序是连续运行的,所以我们必须使程序在某一地点停下来。
我们所做的第一项工作就是设立断点;其次再运行程序;当程序在设立断点处停下来时,利用各种工具观察程序的状态。
程序在断点停下来后,有时我们需要按我们的要求控制程序的运行,以进一步观测程序的流向。
下面我们依次来介绍断点的设置,如何控制程序的运行以及各种观察工具的利用。
3、设置断点在VC中,可以设置多种类型的断点,根据断点起作用的方式把这些断点分为三类:1、与位置有关的断点;2、与逻辑条件有关的断点3、与WINDOWS消息有关的断点。
主要介绍前面两种断点。
4、设置位置断点最简单的是设置一般位置断点:¡ 把光标移到你要设断点的位置,当然这一行必须包含一条有效语句的;¡ 然后按工具条上的add/remove breakpoint 按钮或按快捷键F9。
将会在屏幕上看到在这一行的左边出现一个红色的圆点表示这里设立了一个断点5、设置位置断点-图示6、设置逻辑断点有的时候可能不需要程序每次运行到这儿都停下来,而是在满足一定条件的情况下才停下来,这时就需要设置一种与位置有关的逻辑断点。
从EDIT 菜单中选中Breakpoints命令,这时Breakpoints对话框将会出现在屏幕上。
选中Breakpoint对话框中的Location标签,使Location页面弹出。
如下页图所示。
7、8、设置逻辑断点单击上页Condition按钮,弹出Breakpoint Condition对话框,在expression_r编辑框中写出你的逻辑表达式,最后按OK返回。
面向对象程序设计C++
(第三版)
VC++6.0编辑环境的建立与调试
新疆大学信息科学与工程学院计算机系
卡米力.木依丁
一、新建编辑环境的具体过程step 1: 打开VC++6.0 ,新建工程
Step 2: 指定工程的位置及工程名
Step3: 按提示选择Finish
Step4: 然后按提示选择OK。
Step5:新建cpp文件。
Step6: 选择C++Source File,指定文件所保存的位置及文件名,OK
Step7: 已经建立好了工程,可以编辑源文件和保存文件了。
二、打开并运行已经建立好的源文件的具体过程Step1: 打开已经编辑好的源文件,选择File->Open
Step2: 指定并选择要打开的源文件然后按打开
Step3: 打开已经编辑好的源文件
Step4: 编译连接源文件(编译连接过程用Buil或组建命令同时完成)
Step5: 编译连接过程中出现是否建立工程空间的提示,选择是。
Step6: 提示是否保存?选择是。
Step7: 选择是以后,就开始编译和链接并提供有无编译错误。
Step8: 编译通过后就运行程序Buid->!
Step9:程序运行后就屏幕上可以看到运行结果
三、执行完第一个程序后再继续执行第二个程序的具体过程Step0:为此先关闭第一个工程,然后再打开文件。
因此先关闭工程
Step1:这时提示是否关闭,回答是,这时关闭工程并进入编辑状态。
Step2:在编辑环境状态下选择打开命令:File->Open
Step3:指定并选择要打开的源文件(指定要打开哪个文件夹的哪个文件)
Step3:程序运行后就屏幕上可以看到运行结果
这时,已经打开了要指定的文件,后面的编译连接和执行等过程同上。
第一部分:调试只有main()函数的程序
1、进入VC++6.0环境:指定位置。
如:(D:盘,工程名为kk)
2、指定文件存储的位置(如:D盘的文件架Kamil),文件名为ka1.c (已经建立
好的文件)(第一个程序为只有main()函数的程序)
3、由于我的文件已经存在,所以现在不建立文件(当然可以新建立文件),现在我们选择“否”;
假设打开ka1.c文件。
文件打开之后就可以看到文件。
请注意:要选择“否”。
4、下面要关闭窗口,因为在此之前工程和文件已经建立过。
(注意关闭窗口)
5、要打开已有的文件:
6、选择要打开的文件,如:ka1.c
7、指定的文件ka1.c已经被打开
8、编译(构建)源文件ka1.c
9、选择“是”
10、选择“是”
11、编译,连接没有错误,通过编译。
12、运行
13、显示结果
第二部分调试主函数包含被调函数的源程序:1、要打开第二个程序需要关闭当前的工作区
2、确认关闭,选择“是”
3、要重新打开已经建立好的第二个源程序ka2.c
4、指定要打开的文件的位置和文件名
5、显示了要打开的文件ka2.c
6、构建源文件
7、建立工作区,选择“是”
8、选择“是”
9、编译、连接
10、运行
11、显示运行结果
第三部分:运行多个文件
第三个程序:主程序ka3a.c中只声明了被调函数big(),而big()的定义在ka3b.c 中。
因此,同样关闭当前的工作区
1、关闭工作区
2、确认关闭
3、要重新打开已经建立好的第三个源程序ka3a.c
4、指定要打开的文件的位置和文件名
5、显示了要打开的文件ka3a.c
6、编译、连接
7、建立工作区,选择“是”
8、选择“是”
9、编译、连接通过:
10、向当前的工程添加另一个文件ka3b.c
11、指定要添加的文件ka3b.c
11、已经添加了文件ka3b.c,我们从main后面的下拉列表中选则要打开的big() 函数。
(这样可以选择指定main()或big()函数)
12、下拉列表中选则big() 函数
13、显示了已经添加到main()函数的big()函数,文件名为ka3b.c
13、编译已经添加到main()函数的big()函数ka3b.c
14、编译通过了big()函数ka3b.c,窗口切换到main()窗口
14、窗口已经切换到main()主窗口
14、构建已经连接到主函数的整体程序ka3a.c。