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里面的内容仍然翻译,但不再判断真假。
- 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 状态寄存器