VC 怎样调试程序
如何在VC++下调试C程序
1.启动Visual C++ 6.0后,单击“文件”下的“新建…”2.在“新建”窗口,单击“文件”选项卡,选中“C++ Source File”,在窗口右边的“位置”下输入存储文件夹,或单击右边的“…”按钮选择存储文件夹,然后在上方的“文件名”中输入扩展名为“.c”的程序文件名。
3.在打开的程序窗口中输入源程序,如下所示。
4.单击“文件”下的“保存全部”先保存所有文件。
(该步骤可选)5.单击窗口右上部的“Build”按钮,对文件进行编译、连接和创建可执行文件。
在文件进行编译、连接和创建可执行文件过程中出现的所有窗口,单击“是(Y)”即可。
上述步骤完成后,如果窗口右下部出现的错误数是“0 error(s)”,表示编译成功,否则表示程序有错误,需要“双击”错误处改正程序中的错误。
6.单击窗口右上部的“BuildExecute(Ctrl+F5)”按钮,执行程序,查看结果。
7.程序结果有错误,需要调试程序。
程序结果正确后,单击“文件”下的“保存全部”保存所有该程序有关的所有文件。
8.单击“文件”下的“关闭工作空间”,关闭和该程序有关的所有文件,完成此程序编制、执行、调试等所有工作。
9.如果以后需要继续调试该程序,启动Visual C++ 6.0后,单击“文件”下的“打开工作空间”,找到要打开的工作区文件(文件名和源程序文件名相同,扩展名为“.dsw”),单击“打开”按钮。
如下所示。
如果Visual C++ 6.0此时尚未启动,也可以在“我的电脑”或“资源管理器”中找到相应工作区文件“first.dsw”,双击即可启动Visual C++ 6.0并同时打开该程序工作区等所有文件。
如果双击“first.c”则可启动Visual C++ 6.0并同时打开该源程序文件,但其它文件未打开,也可继续使用。
等级考试就是这样执行的。
VC程序调试.
VC程序调试VC程序调试调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。
不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。
一、VC程序调试方法 VC的调试功能:首先,再次强调要用Go命令运行一个将要调试的程序;如果要中止调试状态下的运行程序可以点击Stop Debugging命令,还可以通过Break选项以可恢复方式中断调试程序的运行流程(用Restart选项可以重新开始运行程序);Step Into选项表示每次只执行一行语句(单步执行),但如果当前代码是调用一个函数,那么Step Into表示进入该函数,全部函数语句执行完后返回,而Step Over则是跳出这个函数;Step To Cursor 选项表示程序将执行到光标所在的可执行语句行上;在调试多线程程序时,可以在线程函数或主应用程序线程中设置断点,还可以用Break选项结束线程后用Threads选项查看运行线程列表,也可以选择悬挂和恢复每个线程;在设置断点后,在VC "查看"菜单的"调试窗口"中可以查看变量、内存、调用堆栈、寄存器以及反汇编语句。
在程序中设置断点的方法是,点击要设置的代码行并点击设置代码的工具栏按钮,会出现在代码行最左边的一个小黑点即是断点标志,这时再选Go 程序会在执行到端点处停下来,如果要继续执行可以再选Go。
通过选择VC"工具"菜单下的"源浏览器"可以生成一个.BSC文件,使用浏览器可以从中发现多种信息:程序中任何一个变量、函数、类或宏在何处定义及引用;可以列出所有声明的函数类、变量、宏;可以发现调用一个指定函数的所有函数;可以找到一个指定类的派生来源或者它派生出哪些类。
在使用微软程序开发库MSDN时,我们会发现其中的VC示例经常采用看似多余的ASSERT语句,其作用就是使程序具有"维护"性。
使用VC6.0调试程序
结构体类型的定义
struct 结构体类型名 { 类型标识符 成员名1;
类型标识符 成员名2; ……
类型标识符 成员名n; };
如: struct student { char name[10];
long id; char gender; int age; }
注意: struct student 应作为一个类型整体, name[10]、id、gender、age都是其成员。 struct及花括号后的“;”不能省。
a
因此,在C语言中,将地 址形象化地称为指针
2012 35
b
….
2010 p
2012 q
定义一个指针变量
指针变量的定义一般形式为:
基类型 *指针变量名;
例如: int i, j, *pi, *pj; float x, y, *p1, *p2;
指针变量的赋值:使得指针变量指向变量 指针变量名=&变量名;
设有一个函数process,在调用它时,每次实现不同的功 能。输入a和b两个数,第一次调用时找出a与b中的大者,第
二次找出小者,第三次求和。
#include<stdio.h> void main() {int max(int,int); int min(int,int); int add(int,int); int process(int, int, int (*fun)()); int a,b; printf("enter a and b:"); scanf("%d%d",&a,&b); printf("\nmax="); process(a,b,max); printf("\nmin="); process(a,b,min); printf("\nsum="); process(a,b,add); }
VC调试方法
VC调试方法Visual C/C++ 是众多C/C++编译器中,调试功能较为强大的编译器之一。
调试程序是每个初学者必须经历的过程,只有不断发现自己的错误,才能减少编程错误,提高编程能力。
当然我们不建议一遇到错误就调试,我希望大家先用眼睛看,把常见的错误都改正后,最后不行再调试,这样编程能力才会进步。
要做到十分钟上百行无错代码的能力,不下苦功是练不成的。
常用的调试快捷键有:F10 单步运行,不进入函数。
F11 单步运行,进入函数。
如果是自定义函数,则进入自定义函数。
如果是系统函数,如scanf,printf,return 等等,则进入汇编,当然这不是我们期望的。
单步运行的同时,左下方会自动显示当前被改变值的变量,右下方则可以输入自定义变量。
一般F10,F11结合使用。
F9 设置断点。
光标所在行设置断点。
F5 运行到断点处暂停。
为了更快运行到我们关心的地方,避免F10一步一步的运行浪费时间。
F9,F5一般结合使用,到我们关注的地方后,我们可以继续F10。
设断点的另外一大好处,是在递归程序中设置断点,可以很快运行到下一层中。
写程序要养成良好代码风格,没有人会喜欢看别人错误的代码,尤其是那些没有分行缩进,一律左对齐的代码。
养成分行缩进的风格在检查括号匹配的时候,也非常方便。
运行时错误:一运行就弹出窗口,或在某些输入数据的情况下,弹出“内存出错警告”的窗口。
多数是由于指针访问非法空间造成的,比如未动态开辟就访问,释放后再次访问或释放等等。
数组下标越界,开辟极大空间等也有可能导致此类错误。
解决方法,可以通过单步运行F10或运行到断点处F5,确定出错行,然后仔细检查代码,加以修正。
附带一个视频文件,希望对大家的学习有所帮助。
一、调试基础调试快捷键F5:开始调试Shift+F5: 停止调试F10:调试到下一句,这里是单步跟踪F11:调试到下一句,跟进函数内部Shift+F11: 从当前函数中跳出Ctrl+F10: 调试到光标所在位置F9:设置(取消)断点Alt+F9: 高级断点设置跟踪调试1、尽量使用快捷键时行调试2、观察调试信息3、高级中断设置异常调试重试->取消->调试函数堆栈,用variables或者call stack 窗口VC6.0Debug调试总结1. 如何显示Debug工具栏窗口?①:在任意工具栏的位置,单击鼠标右键,勾选Debug项②:Tools---->Customize--àToolbars--àDebug--àclose引申:工具栏和工具条的区别?一个工具栏可以放置多个工具条。
vc 程序调试方法.ppt
调试可以借助“调试工具条”来进行,“调试工具 条”中的主要命令如图1所示
图1
单步执行(Step Over)
C语言的调试手段主要有:单步执行、设置断 点和运行到光标处,这三种调试手段在实践中 常常结合使用。
1. 单步执行(Step Over) 单击“单步执行(Step Over)”按钮一次,程序 执行一步,如图2所示。在程序调试过程,黄 色右箭头表示当前要执行的代码行,程序执行 的每一步都可以观察变量的值,检查程序的执 行情况。当程序执行完毕,黄色右箭头指向主 函数的“}”位置时,应单击“调试工具条”上 的“停止调试(Stop Debugging)”按钮。
C语言程序的调试方法
在编程过程中,出错是难以避免的,出错并不可 怕,关键是如何尽快找到和排除程序中的错误。
程序错误总体上有两类:语法错误和逻辑错误。 对于语法错误,编译时会产生错误信息,可以根据错 误提示信息加以修改。如果程序编译、连接都没有错 误,但运行结果与预期结果不一致,则需要通过调试 来找出程序中存在的逻辑错误,并加以排除。
设置断点后,单击工具栏上的“进入调试(Go)”按钮,程序运 行到断点处会暂停,此时程序员可以决定接下来是单步执行, 还是继续单击“Go”命令运行到下一个断点。
图3
调试工具条中主要按钮的含义如表1-1所示,其中,Step Into和Step Out的使用与函数相关 .
表1-1 调试工具条中主要按钮的含义
按钮名称 Step Over
单步执行完当停止调试
Run to Cursor 执行到光标处,需要先将光标移动到程序的指定位置
Go
运行程序至断点,需要先设置好断点
Step Into 单步执行,如果当前语句中有函数调用,则单步进入被调用函数
关于VC60中的程序调试技巧
关于VC60中的程序调试技巧调试程序可以帮助的了解程序是怎样运行的。
1、如何快速地规范代码缩进格式选中所需要规范的代码,按hift+F82、如何在Releae状态下进行调试3、Releae和Debug有什么不同。
Releae版称为发行版,Debug版称为调试版。
Debug中可以单步执行、跟踪等功能,但生成的可执行文件比较大,代码运行速度较慢。
Releae版运行速度较快,可执行文件较小,但在其编译条件小无法执行调试功能。
Releae的e某e文件链接的是标准的MFCDLL(UeMFCinaharedortaticdll),比如MFC42.DLL。
这些DLL在安装Window的时候,已经配置,所以这些程序能够在没有安装ViualC++6.0的机器上运行。
而Debug版本的e某e链接了调试版本的MFCDLL文件,如MFC42D.DLL。
在没有安装ViualC++6.0的机器上不能运行,因为缺MFC42D.DLL等,除非选择uetaticdllwhenlink。
4、ASSERT和VERIFY有什么区别ASSERT里面的内容在Releae版本中不编译,VERIFY里面的内容仍然编译,但不再判断真假。
所以后者更安全一点。
例如ASSERT(file.Open(trFileName)),一旦到了Releae版本中,这一行就忽略了,file根本就不Open()了,而且没有任何出错的信息。
如果用VERIFY()就不会有这个问题。
5、Workpace和Project之间是什么样的关系每个Workpace可以包括几个project,但只有一个处于Active状态,各个project之间可以有依赖关系,在project的Setting…中可以设定,比如那个Active状态的project可以依赖于其他的提供其函数调用的静态库。
6、如何在非MFC程序中使用ClaWizard在工程目录下新建一个空的.RC文件,然后加入到工程中就可以了。
VC++6.0中如何编译运行及调试C语言程序
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。
VC如何单步调试程序如何使用VC调试程序
VC 如何单步调试程序如何使用VC调试程序VC++如何单步调试程序?如何使用VC++调试程序VC调试快捷键Debug版本与Release版2011-03-24 09:19一.步骤&快捷键:F9在你需要停下的地方设置断点F5进入调试F10单步运行F11进入函数二.1.如何在Release状态下进行调试Project-Setting=ProjectSetting对话框,选择Release状态。
C/C++标签中的Category选General,Optimizations选Disable(Debug),Debut info 选Program Database。
在Link标签中选中Generate debug info复选框。
注:只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY 都不起作用,函数调用方式已经是真正的调用,而不查表,但是这种状态下QuickWatch、调用队列跟踪功能仍然有效,和Debug版一样。
2.Release和Debug有什么不同Release版称为发行版,Debug版称为调试版。
Debug中可以单步执行、跟踪等功能,但生成的可执行文件比较大,代码运行速度较慢。
Release版运行速度较快,可执行文件较小,但在其编译条件下无法执行调试功能。
Release的exe文件链接的是标准的MFC DLL(Use MFC in ashared or static dll)。
这些DLL在安装Windows的时候,已经配置,所以这些程序能够在没有安装Visual C++6.0的机器上运行。
而Debug版本的exe链接了调试版本的MFC DLL文件,在没有安装Visual C++6.0的机器上不能运行,因为缺相应的DLL,除非选择use static dll when link。
3.ASSERT和VERIFY有什么区别ASSERT里面的内容在Release版本中不编译,VERIFY里面的内容仍然翻译,但不再判断真假。
VC6.0调试程序过程
面向对象程序设计C++(第三版)VC++6.0编辑环境的建立与调试新疆大学信息科学与工程学院计算机系卡米力.木依丁一、新建编辑环境的具体过程step 1: 打开VC++6.0 ,新建工程Step 2: 指定工程的位置及工程名Step3: 按提示选择FinishStep4: 然后按提示选择OK。
Step5:新建cpp文件。
Step6: 选择C++Source File,指定文件所保存的位置及文件名,OKStep7: 已经建立好了工程,可以编辑源文件和保存文件了。
二、打开并运行已经建立好的源文件的具体过程Step1: 打开已经编辑好的源文件,选择File->OpenStep2: 指定并选择要打开的源文件然后按打开Step3: 打开已经编辑好的源文件Step4: 编译连接源文件(编译连接过程用Buil或组建命令同时完成)Step5: 编译连接过程中出现是否建立工程空间的提示,选择是。
Step6: 提示是否保存?选择是。
Step7: 选择是以后,就开始编译和链接并提供有无编译错误。
Step8: 编译通过后就运行程序Buid->!Step9:程序运行后就屏幕上可以看到运行结果三、执行完第一个程序后再继续执行第二个程序的具体过程Step0:为此先关闭第一个工程,然后再打开文件。
因此先关闭工程Step1:这时提示是否关闭,回答是,这时关闭工程并进入编辑状态。
Step2:在编辑环境状态下选择打开命令:File->OpenStep3:指定并选择要打开的源文件(指定要打开哪个文件夹的哪个文件)Step3:程序运行后就屏幕上可以看到运行结果这时,已经打开了要指定的文件,后面的编译连接和执行等过程同上。
第一部分:调试只有main()函数的程序1、进入VC++6.0环境:指定位置。
如:(D:盘,工程名为kk)2、指定文件存储的位置(如:D盘的文件架Kamil),文件名为ka1.c (已经建立好的文件)(第一个程序为只有main()函数的程序)3、由于我的文件已经存在,所以现在不建立文件(当然可以新建立文件),现在我们选择“否”;假设打开ka1.c文件。
VC 调试方法总结
条件断点:可以为断点设置一个条件,这样的断点称为条件断点。
对于新加的断点,可以单击Conditions按钮,为断点设置一个表达式。
当这个表达式发生改变时,程序就被中断。
底下设置包括“观察数组或者结构的元素个数”,似乎可以设置一个指针所指向的内存区的大小,但是我设置一个比较的值但是改动范围之外的内存区似乎也导致断点起效。
最后一个设置可以让程序先执行多少次然后才到达断点。
数据断点:数据断点只能在Breakpoints对话框中设置。
选择“Data”页,就显示了设置数据断点的对话框。
在编辑框中输入一个表达式,当这个表达式的值发生变化时,数据断点就到达。
一般情况下,这个表达式应该由运算符和全局变量构成,例如:在编辑框中输入g_bFlag这个全局变量的名字,那么当程序中有g_bFlag= !g_bFlag时,程序就将停在这个语句处。
消息断点:VC也支持对Windows消息进行截获。
他有两种方式进行截获:窗口消息处理函数和特定消息中断。
在Breakpoints对话框中选择Messages页,就可以设置消息断点。
如果在上面那个对话框中写入消息处理函数的名字,那么每次消息被这个函数处理,断点就到达(我觉得如果采用普通断点在这个函数中截获,效果应该一样)。
如果在底下的下拉列表框选择一个消息,则每次这种消息到达,程序就中断。
Watch工具:VC提供watch工具用于查看变量、表达式和内存值。
单击Debug工具条上的Watch 按钮,就出现一个Watch视图(Watch1,Watch2,Watch3,Watch4),在该视图中输入变量或者表达式,就可以观察变量或者表达式的值。
注意:这个表达式不能有副作用,例如++运算符绝对禁止用于这个表达式中,因为这个运算符将修改变量的值,导致软件的逻辑被破坏。
Memory工具:在Debug工具条上点memory按钮,就弹出一个对话框,在其中输入地址,就可以显示该地址指向的内存的内容。
vc调试多线程程序的方法
vc调试多线程程序的方法1、对一条特定的线程进行调试Visual C++调试器支持多线的情况,如果你在许多线程都调用的函数中设置一个断点,每当一个线程遭遇到此断点,调试器就会在线程之间循环切换有个方法可以避开这个问题,就是挂起所有线程,除了你感兴趣的那条(要调试的那条),在调试器中打开[Debug]菜单并选择[Thread]你就可以获得一个线程对话框,在这里你可以挂起所有的线程,把你要调试的线程留下来,单独调试他2、运转记录就是让程序的关键部分显示出其发生的活动的一种方法!就是在程序的关键部位(某一时刻你想知道他的状态)加上一些输出语句,比如printf TRACE 等等,可以将信息输出到屏幕,也可以重定向到文件中,不要用一些控件比如ListBox,因为ListBox也是一个窗口,在他的内部有自己的消息循环,向ListBox中输出调试信息的时候,会引起不必要的线程切换(从当前线程切换到ListBox的消息循环)非常耗时!这对多线程这种对时间很敏感的程序来说有可能会影响运行的结果!在GUI程序中也是可以拥有console窗口的,由于console窗口由系统的设备驱动程序负责,即使你的程序当掉或在调试器中停止console窗口仍有反应!3、内存记号(Memory Trails)上面的两种方法执行的时间都稍长,有可能影响到程序运行的结果,Memory Trail属于一种比较低阶的技术!是用Memory Trail的方法:你必须产生一个足够大的全局缓冲区,以及指向该缓冲区的全局指针,例如:char gMemTrail[16384];char *pMemTrail = gMemTrail;当你想输出某些东西到屏幕上或文件中时,你就写个记号到MemTrail中例如:*pMemTrail++ = 'f';你的程序的每一个追踪点都应该写一个不同的记号,不论什么时候你想要,或是程序当掉之后,你可以利用调试器看看 memory trail中的内容!3、硬件调试寄存器只适用于Intel机器!这个俺就不多说了,基本上很少用!。
VC调试方法大全
VC调试方法大全VC调试方法大全一、调试基础调试快捷键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、当你移除某个资源时,确保你移除了所有跟这个资源相关的申明(主要是在文中)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程序调试技术 转
VC程序调试技术转VC程序调试技术[转]2010-04-24 16:49在开发程序的过程中,经常需要查找程序中的错误,这就需要利用调试工具来帮助你进行程序的调试,当然目前有许多调试工具,而集成在VC中的调试工具以其强大的功能,一定使你爱不释手。
下面我们先来介绍VC中的调试工具的使用。
1 VC调试工具1.1调试环境的建立在VC中每当建立一个工程(Project)时,VC都会自动建立两个版本:Release版本,和Debug版本,正如其字面意思所说的,Release版本是当程序完成后,准备发行时用来编译的版本,而Debug版本是用在开发过程中进行调试时所用的版本。
DEBUG版本当中,包含着MICROSOFT格式的调试信息,不进行任何代码优化,而在RELEASE版本对可执行程序的二进制代码进行了优化,但是其中不包含任何的调试信息。
在新建立的工程中,你所看到是DEBUG版本,若要选择RELEASE版本,可以选择菜单PROJECT中的SETTING命令,这时屏幕上面弹出PROJECT SETTEING对话框,在SETTING FOR下拉列表中选择RELEASE,按OK退出。
在调试程序的时候必须使用DEBUG版本,我们可以在Project Setting对话框的C/C++页中设置调试选项。
各个选项的含意如下:Program Database表示产生一个存储程序信息的数据文件(.PDB),它包含了类型信息和符号化的调试信息;Line Numbers Only表示程序经过编译和链接产生的.OBJ 或.EXE文件仅仅包含全局和外部符号以及行号信息;C7 Compatible表示产生一个.OBJ或.EXE文件行号信息以及符号化的调试信息;None表示不产生任何调试信息。
1.2调试的一般过程调试,说到底就是在程序的运行过程的某一阶段观测程序的状态,而在一般情况下程序是连续运行的,所以我们必须使程序在某一地点停下来。
所以我们所做的第一项工作就是设立断点。
Visual-C++-编写、调试与运行C程序流程
步骤01:打开Visual C++ 6、0界面(如下图)如果就是已经打开得界面,想重新开始一个新得工程,则可按下述方式进行: 1)单击关闭工作空间菜单项(如下图)File->Close Workspace(或“文件”->“关闭工作空间”)2)在弹出得“确认”窗口中单击“Yes”(或“就是”)。
表明要关闭工作空间时也同明关闭所有已打开得文件。
(如下图)步骤02:新建一个工程1) File->New(或“文件”->“新建”)2)切换到Projects 页面。
工程(或项目)类型选择:Win32 Console Application;工程(或项目)名称:自已任意确定,但一定要有(例:TestProject);工程(或项目)在硬盘上得存储位置:如图例D盘根目录下面得TestProject目录(此目录得名称可不用手工设定,VC6会根据工程名称来自动设定)。
最后单击OK项目名称项目在硬盘上得存储位项目类型3)选择“一个空工程”(如就是英文则:an empty project)。
单击Finish,完成工程得建立4)工程建立完成后,会出来一个工程得建立报告,单击OK最顶层就是“工作空间”节点。
一个工作空5)出现以下窗口界面“工程”节点,下面有“源文件”、“头文注意:“Source Files”“Header Files”“Resource Files”三个目录只就是逻辑上得存在,在硬盘上并没有这三个目录。
同样得,这个“工作空间->工程->文件”得三级树型结构也只就是为了管理整个C程序编写、调试与运行得过程而存在得逻辑结构,硬盘上也没有。
步骤03:往工程里添加后缀名为“、c”得文件,并往文件里写入C程序1)File->New(也可能就是中文得菜单项名)2)在弹出得对话框中选择Files页面。
在文件类型列表中,①鼠标左键单击选中“C++ Source File”类型得文件;②勾上“Add to project”并选择刚刚建好得那个工程得名称(此例为TestProject工程);③File下面得文本框中,键入文件得名称,可以任意命名,但后缀名必须就是“、c”,别忘记了!!!!!!!④Location下面就是选择将新建得文件放到哪个目录下面,可以让VC6、0自动设定,不必操劳。
C如何调试代码
C如何调试代码文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]我们在做程序开发时,难免会遇到错误异常。
如何快速地找到出错的地方、分析错误的原因以及找到解决问题的方案,是许多初级程序员困扰的问题,这也正是经验的宝贵之处。
下面我将简单介绍在Visual Studio中调试以及一些高级的调试和常见的错误。
PS:如无特别说明Visual Studio均指Dev10即Visual Studio 2010。
入门篇假设你是有着.Net平台的程序员,并且使用Visual Studio做为开发工具。
断点:最简单的一种,设置一个断点,程序执行到那一句就自动中断进入调试状态。
设置断点,在你觉得有问题的代码行,左侧单击,会出现红色的红点即断点。
启动调式:按F5,或者菜单栏---调式---开始调试,或者工具栏的图标快速监视:快速查看变量或者表达式的值,也可以自定义表达式进行计算单步执行有三种,一种是每次执行一行(F10);一种是每次执行一行,但遇到函数调用就会跳到被调用的函数里(F11);一种是直接执行当前函数里剩下的指令,返回上一级函数(Shift+F11)。
还有一种后悔药,设为下一句(Set Next Statement),即下一句会被执行的语句(右击设置或者快捷键:Ctrl+Shift+F10),但要注意在调试与数据有关的时候,设置下一句有可能会报异常。
如在调试向DataTable中添加行的时候,已经存在的行不能重复被添加到DataTable中监视调试器可能会自动列出一些相关变量的值,但是你可能还关心其它变量的值,可以添加对这些变量的监视。
还可以监视一个表达式的值,比如a+b。
但是,这个表达式最好不要修改变量的值,比如监视a++都会导致监视时修改了a的值,影响了程序的运行结果。
调试技巧篇使用快捷键会大大提升我们的调试效率,常用的调试快捷键:F5启动调试F10执行下一行代码,但不执行任何函数调用。
使用VC6.0对C语言程序进行调试的基本手段
使用VC6.0对C语言程序进行调试的基本手段(1)设置固定断点或临时断点所谓断点,是指定程序中的某一行,让程序运行至该行后暂停运行,使得程序员可以观察分析程序的运行过程中的情况。
这些情况一般包括:①在变量窗口(Varibles)中观察程序中变量的当前值。
程序员观察这些值的目的是与预期值对比,若与预期值不一致,则此断点前运行的程序肯定在某个地方有问题,以此可缩小故障范围。
例如以下程序是计算cos(x)并显示,运行时发现无论x输入为多少,结果都是0.046414。
#include <stdio.h>#include <math.h>void main(){int x;printf("Please input x:");scanf("% d", &x);printf("cos(x)=%f\n", cos(x));}在该程序中,若你没有看到问题——程序较长、较复杂时很难看出问题所在,则应该使用调试手段定位故障位置。
②在监控窗口(Watch)中观察指定变量或表达式的值。
当变量较多时,使用Varibles 窗口可能不太方便,使用Watch窗口则可以有目的、有计划地观察关键变量的变化。
③在输出窗口中观察程序当前的输出与预期是否一致。
同样地,若不一致,则此断点前运行的程序肯定在某个地方有问题。
④在内存窗口(Memory)中观察内存中数据的变化。
在该窗口中能直接查询和修改任意地址的数据。
对初学者来说,通过它能更深刻地理解各种变量、数组和结构等是如何占用内存的,以及数组越界的过程。
⑤在调用堆栈窗口(Call Stack)中观察函数调用的嵌套情况。
此窗口在函数调用关系比较复杂或递归调用的情况下,对分析故障很有帮助。
(2)单步执行程序让程序被一步一步(行)地执行,观察分析执行过程是否符合预要求。
例如,以下程序预期的功能是从键盘上读入两个数(x和y),判断x和y是否相等,相等则在屏幕上显示x=y,不相等则显示x<>y。
在VC下如何调试程序
在VC下如何调试程序调试的目的是为了找到程序出错的原因以便消除错误。
常见的错误类型有语法错误、程序内部逻辑错误、连接错误(比如找不到连接所需的库文件或函数的目标代码、函数版本冲突等)。
根据系统提示查找错误:编译和组建程序过程中,如果出现错误或警告,则可以在输出窗口双击错误/警告信息,编辑窗口的光标会自动跳到VC6认为出错的那一行。
程序员应从这一行开始,逐行往上检查错误。
根据系统提示查找错误,可以发现大部分语法错误和连接错误。
使用调试工具查找错误:使用调试工具可以逐条语句地跟踪程序的执行过程,随时查看程序的某个变量,适于检查程序的逻辑错误。
调试程序要掌握两个技巧,一是跟踪、二是观察。
菜单Build | Start Debug(开始调试)中有4个命令可以使用,即:Go(调试执行)、Step Over(跳过函数执行)、Step Into(跟踪到函数内执行)、Run To Cursor(执行到光标处)。
在View菜单Debug Windows(调试窗口)中有6个选项可供选择,即Watch (观察窗) 、Variables (变量表) 、Call Stack (调用栈) 、Memory (内存) 、Registers (寄存器) 、Disassembly (高级语言分解成汇编语言)。
基本调试方法:方法1:断点跟踪(a) 设置断点:光标移到要跟踪的程序行,按F9 键( insert/remove breakpoint) 。
该行左侧的小圆点表示断点。
注:可以设多个断点。
(b) 跟踪:Build | Start Debug | Go命令(或F5键)。
程序执行到断点处停止执行。
(c) 观察:选择“View | Debug Windows | Watch / Variables”,打开监视或变量窗口观察变量值,查找出错原因。
在调试期间还可以修改源代码后继续执行。
(d) 停止调试:Build | Stop Debugging命令。
VC调试方法
VC调试方法Visual C/C++ 是众多C/C++编译器中,调试功能较为强大的编译器之一。
调试程序是每个初学者必须经历的过程,只有不断发现自己的错误,才能减少编程错误,提高编程能力。
当然我们不建议一遇到错误就调试,我希望大家先用眼睛看,把常见的错误都改正后,最后不行再调试,这样编程能力才会进步。
要做到十分钟上百行无错代码的能力,不下苦功是练不成的。
常用的调试快捷键有:F10 单步运行,不进入函数。
F11 单步运行,进入函数。
如果是自定义函数,则进入自定义函数。
如果是系统函数,如scanf,printf,return 等等,则进入汇编,当然这不是我们期望的。
单步运行的同时,左下方会自动显示当前被改变值的变量,右下方则可以输入自定义变量。
一般F10,F11结合使用。
F9 设置断点。
光标所在行设置断点。
F5 运行到断点处暂停。
为了更快运行到我们关心的地方,避免F10一步一步的运行浪费时间。
F9,F5一般结合使用,到我们关注的地方后,我们可以继续F10。
设断点的另外一大好处,是在递归程序中设置断点,可以很快运行到下一层中。
写程序要养成良好代码风格,没有人会喜欢看别人错误的代码,尤其是那些没有分行缩进,一律左对齐的代码。
养成分行缩进的风格在检查括号匹配的时候,也非常方便。
运行时错误:一运行就弹出窗口,或在某些输入数据的情况下,弹出“内存出错警告”的窗口。
多数是由于指针访问非法空间造成的,比如未动态开辟就访问,释放后再次访问或释放等等。
数组下标越界,开辟极大空间等也有可能导致此类错误。
解决方法,可以通过单步运行F10或运行到断点处F5,确定出错行,然后仔细检查代码,加以修正。
附带一个视频文件,希望对大家的学习有所帮助。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
变量跟踪
按F10, a,b,c三个变量被赋值,s和 area变量还没有被赋值
变量跟踪
按F10, s变量被赋值,area变量还没 有被赋值
变量跟踪
按F10, area变量被赋值值
变量跟踪
按F10, 输出area的值
VC++程序调试演示
• • • • • • • • 程序调试概述 Debugger工具栏简介 启动Debugger 变量跟踪 设置断点 快速执行到一个断点 结束Debugger 快速查看变量类型
程序调试概述
• 概述
– 检测和纠正错误是软件开发的重要组成部分,称这为 确认与验正。确认指的是检查算法和程序是否达到 了问题的技术要求,验证是指检查算法和程序是否 正确和完整。
• 好的调试策略
– 定位错误的一种好的方法是使程序打印引导性结果 ,以及指出什么时候该程序的某一部分开始执行和 结束执行的消息。
Debugger工具栏简介
打开Memory窗口,显示该应用程序的当前内存内容
Debugger工具栏简介
显示所有未返回的被调用的子程序名
Debugger工具栏简介
打开一个包含汇编语言代码的窗口,其中的汇编语言代码来 自编译后程序的反汇编
VC++程序调试演示
• • • • • • • • 程序调试概述 Debugger工具栏简介 启动Debugger 变量跟踪 设置断点 快速执行到一个断点 结束Debugger 快速查看变量类型
启动Debugger
在VC++中打 开源程序
启动Debugger
进入调试 模式
VC++程序调试演示
• • • • • • • • 程序调试概述 Debugger工具栏简介 启动Debugger 变量跟踪 设置断点 快速执行到一个断点 结束Debugger 快速查看变量类型
变量跟踪
按F10,Auto窗口出现a,b,c三个变量, 注意这三个变量还没有被赋值
程序调试概述
• 预防性维护
– 一条有经验的方法是桌面检查法。桌面检查一个程 序类似于核对一封信或手稿,其思想是在内心对程 序进行跟踪,确保程序逻辑正确。程序员必须考虑 各种可能的输入,并记录程序执行期间所产生的所 有结果。
VC++程序调试演示
• • • • • • • • 程序调试概述 Debugger工具栏简介 启动Debugger 变量跟踪 设置断点 快速执行到一个断点 结束Debugger 快速查看变量类型
设置断点
将光标放到需要设置断点的行
设置断点
点击按钮
断点设置好
VC++程序调试演示
• • • • • • • • 程序调试概述 Debugger工具栏简介 启动Debugger 变量跟踪 设置断点 快速执行到一个断点 结束Debugger 快速查看变量类型
快速执行到一个断点
点击按钮
快速执行到断点设置行
Debugger工具栏简介
(ALT+NUM)显示程序代码中的下一条语句
Debugger工具栏简介
(F11)正在跟踪的语句是一个子程序调用(函数或方法)时, 该选项单步进入所调用的子程序
Debugger工具栏简介
(F10)正在跟踪的语句是一个子程序调用(函数或方法)时,该 选项跳过所调用的子程序,停留在子程序调用下面的语句
快速查看变量类型
将光标停留在变量上, 可以查看变量类型
VC++程序调试演示
VC++程序调试演示
• • • • • • • • 程序调试概述 Debugger工具栏简介 启动Debugger 变量跟踪 设置断点 快速执行到一个断点 结束Debugger 快速查看变量类型
VC++程序调试演示
• • • • • • • • 程序调试概述 Debugger工具栏简介 启动Debugger 变量跟踪 设置断点 快速执行到一个断点 结束Debugger 快速查看变量类型
程序调试概述
• 四种程序错误类型
– – – – 语法或编译时错误 连接错误 运行错误 逻辑或意图错误
• 查看错误消息
– 为查看产生特定诊断消息的代码语句,只要双击 Output窗口中相关的诊断消息即可; – 为获得一条错误消息的帮助,首先在Output窗口中 使用鼠标指针单击错误消息码,然后按F1键,相 应帮助文件打开。
VC++程序调试演示
• • • • • • • • 程序调试概述 Debugger工具栏简介 启动Debugger 变量跟踪 设置断点 快速执行到一个断点 结束Debugger 快速查看变量类型
结束Debugger
点击按钮,结束 Debugger
VC++程序调试演示
• • • • • • • • 程序高度概述 Debugger工具栏简介 启动Debugger 变量跟踪 设置断点 快速执行到一个断点 结束Debugger 快速查看变量类型
Debugger工具栏简介
Restart:(CTRL+SHIFT+F5)指示VC++,用户要从 开始处调试程序,而不是从当前所跟踪的位置开始调试
Debugger工具栏简介
停止程序调试,返回到Build菜单选项
Debugger工具栏简介
在当前点上挂起程序的执行
Debugger工具栏简介
(ALT+F10)可以在程序正在调试时修改源代码
Debugger工具栏简介
(SHIFT+F11)确认当前子程序中没有程序错误时,该选项可 以快速执行该子程序,并停留在子程序后面的语句
Debugger工具栏简介
(CTRL+F10)快速执行到光标所在的代码处
Debugger工具栏简介
(SHIFT+F9)显示QuickWatch窗口,在该窗口可以计算表达 式的值
Debugger工具栏简介
打开Watch窗口,该窗口包含该应用程序的变量名及其当前 值,以及所有选择表达式
Debugger工具栏简介
打开Variables窗口,该窗口包含关于当前和前面的语句中所 使用的变量和返回值
Debugger工具栏简介
显示Regisers窗口,显示微处理器的一般用途寄存器和CPU 状态寄存器