vc++6调试按钮用法和注意事项(考前资料)

合集下载

VC6程序的基本调试方法

VC6程序的基本调试方法

Visual C++ 6.0编程环境的使用目录3 严谨思维,调试程序 (1)3.1什么时候需要对程序进行调试 (1)3.2对程序进行调试的基本手段和方法 (1)(1)观察了解程序的“病症”表现 (1)(2)弄清程序的主要工作流程 (1)(3)进行大致的检查,确定问题存在的模块 (3)(4)检查故障模块,确定问题并解决 (3)3.3对程序进行调试的基本手段 (4)(1)设置固定断点或临时断点 (4)(2)单步执行程序 (4)(3)使用断言 (5)(4)与调试相关的操作菜单:Build菜单 (6)(5)与调试相关的操作菜单:Debug菜单 (6)3.4对一个简单程序的调试过程 (7)3.5设计合适的程序调试方案 (8)3.6优秀程序员的基本素质——丰富的想象、严谨的思维 (10)(1)程序运行结果看起来对了,但并不意味着程序没有隐藏的问题 (10)(2)严谨思维的典范——程序员学习的榜样 (11)3 严谨思维,调试程序所谓程序调试,是指当程序的工作情况(运行结果)与设计的要求不一致——通常是程序的运行结果不对时,科学地(而不是凭偶然的运气)通过一定的方法、使用一定的手段来检查程序中存在的设计问题(某种逻辑错误而不是语法、链接错误,修正语法、链接错误不是调试程序要做的事)。

3.1 什么时候需要对程序进行调试当程序编译出错或者链接出错时,系统都将在Output输出窗口中随时显示出有关的提示信息或出错警告信息等(如果是编译出错,只要双击Output窗口中的出错信息就可以自动跳到出错的程序行,以便仔细查找)。

但若编译和链接都正确,而执行结果又总是不正确时,这时就需要使用调试工具来帮着“侦察”出程序中隐藏着的出错位置(某种逻辑错误)。

强调:初学者常犯的错误是认为“编译和链接”都正确,程序就应该没有问题,怎么会结果不对呢?“编译和链接”都正确,只能说明程序没有语法和拼写上的错误,但在算法(逻辑)上有没有错,还得看结果对不对。

vc++6.0环境下程序调试教程

vc++6.0环境下程序调试教程

更多共享就在:/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调试功能_图解教程(2)--实例

Visual_C++_6.0调试功能_图解教程(2)--实例

Visual_C++_6.0调试功能_图解教程(2)--实例Visual C++ 6.0调试功能图解教程(2)--实例一使用说明程序名为 NO3.exe.运行环境为DOS,执行后显示:在"请输入你的选择后(1.2.3.4.5.6)"后输入数字选择执行的功能. 测试结果:1.选择1.后输入:1234567892.选择2后输入分别输入1,3.重复1)操作后选择2,分别输入10,10.3.4.重复1)操作后选择3.分别输入1,abcde再重复1)操作后选择3.分别输入9,abcde1.2.再重复1)操作后选择4,分别输入1,3再重复1)操作后选择4,分别输入0,3再重复1)操作后选择4,分别输入10,35) 再重复1)操作后选择5,分别输入1,abcde再重复1)操作后选择5,分别输入9,abcde再重复1)操作后选择5,分别输入0,abcde再重复1)操作后选择5,分别输入10,abcde6)运行No3.exe后选择6或输入非"1,2,3,4,5"的数字调试过程:1.本调试主要针对置换操作功能进行演示:1.将光标移置String:: Replace(String t1,int pos)函数的第一条语句处Ctrl+F10开始调试2.在DOS窗口中选择1后输入"123456789".接着选择5分别输入1,abcde.这时Debugger停留在String:: Replace(String t1,int pos)的第一条语句处:3.在Watch窗口的名称栏分别输入:str,t1.str,q,out,pos,(-pos) +1,pos – size,j,i.进行观察.4.按F10开始单步调试.1.按F10三次后Debugger停留在最后一个判断语句处.同时Watch窗口中个名称的值分别为:2.接着单步调试,for()函数完后,Debugger停留在"delete t1.str;"语句处.这时Watch窗口中个各名称的值分别为:接着两次F10,这时t1.str和out的值已经改变,Debugger停留在String:: Replace(String t1,intpos)的结束处.3.再按一次F10,Debugger停留在main()函数的switch(k)里的case 5的if()语句处:F10到调用Display()函数的语句处后F11跟进Display()的内部.在Watch窗口的名称中输入str,I,len进行观察.单步调试到Display()函数结束,Debugger停留在Display()函结束处.在Watch窗口中str,I,len的值分别为:同时DOS窗口中显示如下:5.按Shift+F5退出调试.完成调试操作.参考源码:2.1Code:2//3.h3#include4#include5#include6//using namespace std;7int out; // 定义一个全局变量8class String9{10public:11 String(){}12 ~String(){}13 String SubString(int pos,int num); //取子串函数14void Insert(String t,int pos); //插入子串函数15void Delete(int pos,int num); //删除子串函数 16void Creat(); //生成字符串函数 17void Display(); //打印子串函数18 Replace(String t1,int pos); //置换子串函数19private:20char *str;21int size;22 };2324//3.cpp25#include "3.h"26//生成新字符串函数27void String:: Creat()28 {29char s[100];30 cin>>s;31 size=strlen(s);32 str=new char[size + 1];33if(str==0)34 cout<<"没有申请到空间!"<<endl;< p="">35 strcpy( str, s);36//strcpy_s(str,sizeof(str)/sizeof(str[0]),s);3738 }39//输出40void String::Display()41{42int len = size;43int i;44for( i=0;i < size;i++ )45 cout<<str[i];< p="">46 cout<<endl;< p="">47 cout<<"字符串的总长度为:"<<len<<endl;< p="">48}49//求子串50//void String String::SubString(int pos,int num)51String String::SubString(int pos,int num)52{53 String temp;54int left=size-pos + 1;//从pos位置开始所有余下的字符串长度55char *p,*q;56if( pos > size )57 {58 cout<<"错误!"<<endl;< p="">59 cout<<"指定位置超过字符串长度为:"<< pos - size<<="">60 exit (1);//异常退出61 }62else if( num > left )63 num = left;64 temp.str=new char[num+1];//重新分配内存空间65if(temp.str==0)66 cout<<"没有申请到空间!"<<endl;< p="">67 p=temp.str;68for(int i = pos-1;i < pos+num-1;i++)69 {70 q = &str[i];71 *p = *q;72 p++;73 }74 *p=0;75 temp.size = num;76return temp;77}7879//插入运算:在串对象s的pos位置后插入一个串t80void String::Insert(String t,int pos)81{82//String temp;83int i_len = t.size;84 cout<<"插入字符串的长度为:"<<i_len<<endl;< p="">8586char *q;87 q = new char( size + 1);88 strcpy(q,str);8990 delete str;91 str = new char( size + t.size + 1); //字符串长度要在原长上增加插入串的长度929394 strcpy(str,q);9596//依次后移,空出长度为插入字符串的长度的空间9798for(int j = size-1;j > pos-1;j--)99 {100int i = j + t.size;101 str[ i-- ] = str[ j ];102 }103104 j = pos;105for(int i = 0;i < t.size;)106 {107 str[j++] = t.str[i++];108 }109110 size+=t.size;111 str[size + 1]='\0';112113}114115116//删除 :删除串中的一个子串117void String:: Delete(int pos,int num)118{119//用if else if语句判断删除的位置是否越界120if(pos <= 0)121 {122 cout<<"无法完成删除操作!"<<endl<<"删除位置低于字符串长度为:"< (-pos)="" +1<<endl;<="" <="" p="">123 exit (1);124 }125else if( pos > size )126 {127 cout<<"无法完成删除操作!"<<endl<<"删除位置超过字符串长度为:"< -="" <="" <<endl;<="" p="" pos="" size=""> 128 exit (1);129 }130else if(pos >= 0 && pos <= size )131 {132int i = pos - 1;133for(int j = (pos + num -1); j <= size ; j++) //从删除到的位置开始前移134 {135 str[i] = str[j];136 i++;137 }138 }139 size = size-num; //只取删除后余下的字符个数140}141142//置换:置换串中的一个子串143 String:: Replace(String t1,int pos)144{145//用if else if语句判断置换的位置是否越界146if(pos <= 0)147 {148 cout<<"无法完成转换操作!"<<endl<<"置换位置低于字符串长度为:"<< (-pos)="" +1="" <<endl;<="" p="">149 exit (1);150 }151else if(pos > size)152 {153 cout<<"无法完成置换操作!"<<endl<<"置换位置超过字符串长度为:"< -="" <="" <<endl;<="" p="" pos="" size=""> 154 exit (1);155 }156157//当置换的位置加上置换给的子串长度之和超过原字符串的长度时158 //在将不被置换的字符串长度的拷后追加新字符串的长度159else if( (t1.size+pos) >size )160 {161162char *q; //定义指针数组q用来转存原先将不被置换的字符串163 q = new char[ pos +1] ; //给q分配足够的空间为将不被置换的字符串的长度164for( int i = 0;i < pos-1;i++ )165 {166 q[i] = str[i];167168 }169170 q[pos-1] = '\0';171 delete []str; //释放原字符串空间172 strcat(q,t1.str); //通过strcat函数将输入的子串与原子串的拷贝173 cout<<"置换后的字符串为: "<<q<<endl;< p="">174return out = 0;175 }176177else if( (t1.size+pos) <= size )178 {179int j = pos - 1;180for(int i = 0;i < t1.size;i++)181 str[j++] = t1.str[i];182 delete t1.str;183return out = 1;184 }185186187}188//主函数189int main(int argc, char* argv[])190{191int pos,num,k;192 String s,s1,s2,t,t1;193do{194 cout<<"\n\n 1.生成字符串" ;195 cout<<"\n\n 2.取子串";196 cout<<"\n\n 3.插入子串s1";197 cout<<"\n\n 4.删除子串";198 cout<<"\n\n 5.置换子串";199 cout<<"\n\n 6.结束程序";200 cout<<"\n******************************** ";201 cout<<"\n 请输入你的选择(1,2,3,4,5,6)";202 cin>>k;203switch(k){204case 1:{205 cout<<"请输入一个字符串:";206 s.Creat();207 cout<<"字符串为: ";208 s.Display();209 }break;210case 2:{211 cout<<"请输入子串的截取位置pos及子串长度num"<>pos>>num;213 t = s.SubString(pos,num);214 cout<<"你所取的子串为:";215 t.Display();216 }break;217case 3:{218 cout<<"请输入子串插入位置pos"<<endl;< p="">219 cin>>pos;220 cout<<"请输入要插入的子串: ";221 s1.Creat();222 s.Insert(s1,pos);223 cout<<"插入后的字符串为: ";224 s.Display();225 }break;226case 4:{227 cout<<"请输入要删除子串的开始位置pos及子串长度num"<<="" p="">228 cin>>pos>>num;229 s.Delete(pos,num);230 cout<<"删除后的字符串为: ";231 s.Display();232 }break;233case 5:{234 cout<<"请输入子串置换位置pos"<<endl;< p="">235 cin>>pos;236 cout<<"请输入要置换的子串: ";237 s2.Creat();238 s.Replace(s2,pos);239if( out != 0 )240 {241 cout<<"置换后的字符串为: ";242 s.Display();243 }244 }break;245default:break;246 } //switch247 cout<<"\n--------------------------------- ";248}while(k>=1&&k<6);249 cout<<"\n 再见!";250 cout<<"\n 按任意键,返回。

VC++ 6使用、调试和C++程序撰写规范

VC++ 6使用、调试和C++程序撰写规范

利用 VC++ 6.0 编写程序 利用 VC++ 6.0 调试程序
C 程序代码规范
• 清晰、规范的代码书写风格不仅给他人阅 读代码提供了方便,同时也给自己对代码 的检查、分析和调试工作创造了方便。 • 因此,在我们学习程序设计的开始阶段就 养成良好的代码书写习惯是非常重要的。 • 下面的内容简要叙述了一些代码书写方面 的规范,供大家参考。
设置断点 所谓断点,就是告诉调试器在何处 暂时中断程序的运行,以便查看程 序的状态以及浏览和修改变量的值 等。
• 在程序中设置位置断点可以将光标移动至 要设置断点的代码行,然后按快捷键F9或 点击工具栏中的 按钮。 • 一旦断点设置成功,则断点所在代码行的 最前面会有一个深红色的实心圆。
• 在设置好断点后,就可以启动调试程序了。 方法是点击 按钮,或使用快捷键F5。 • 为了更好的说明调试的过程,我们仍然以 前面的示例程序为例。上文说到,在对该 程序进行了语法错误的修改后,发现程序 依然存在逻辑错误。为对其进一步进行调 试,首先需要设置断点。 • 我们首先在程序的第6行设置断点。
• 按F5键开始调试,发现屏幕上出现控制台 程序的提示输入信息,我们随便输入三个 数,例如3.14,2,16。之后我们发现程序 停留在了断点处。 • 此后,我们希望程序按照我们的意愿单步 执行,从而使我们能够清楚地看到每执行 一步之后,各变量值的变化情况,从而发 现程序的错误所在。
使程序单步执行的命 令有两个: • Step Over:运行下 一行代码,若遇函数, 则不进入函数,直接 算出函数执行的结果。 • Step Into:运行下一 行代码,若遇函数, 则进入函数执行
利用 VC++ 6.0 编写程序 利用 VC++ 6.0 调试程序

Visual C++6.0 中的调试工具使用入门

Visual C++6.0 中的调试工具使用入门

Visual C++6.0 中的调试工具使用入门一、程序开发过程中出现的错误类型我们在进行程序设计时,不可避免地会犯错误。

程序中的错误可以分为三类:编译错误、运行时错误和逻辑错误。

编译错误(Compile errors)又称为编译时错误(Compiling-time errors): 是由于错误的编码产生的。

例如关键字拼写错误、将中文标点符号当成英文符号使用、遗漏了某些必要的标点符号或者使用了一个没有定义的标识符。

编译错误一般都是语法错误,当编译器对程序进行语法检查时,都能发现这些错误,并能够指出产生错误的位置(标出行号)。

我们可以根据编译出错信息指出的行号找到对应的源代码行改正错误,重新编译源程序。

只有当所有的编译错误被改正后,才能通过编译检查,产生目标代码文件。

改正编译错误的关键是要能正确理解编译器给出的编译错误信息。

VC++环境中的编译、链接错误信息是用英文表示的。

对于英文基础薄弱的读者,可以参考本实验指导书后面的“VC++编译、链接常见错误和警告信息中英文对照”。

通常情况下,一个语法错误可能产生多条编译错误信息,这是由于株连错误造成的,建议读者在处理编译错误时,找到第一个出现错误的位置改正后重新编译。

这样能够避免被株连错误迷惑。

值得指出的是,现在大部分编译器对错误的定位不精确,如果在编译器指出的行没有发现错误,应该向前查找错误。

例如,当提示第10行发生错误时,如果在第10行没有发现错误,请从第10行开始往前查找错误并修改之。

运行时错误(Run-time errors)是在程序的运行阶段出现的,当运行环境检测到程序的某些操作无法执行,例如除数为零时,就会出现运行时错误。

当运行环境检测到程序的某些操作是被禁止的,也会产生运行时错误。

例如,访问数组时超越数组的边界,空指针引用(NULL pointer assignment,空指针赋值,即有指针未赋具体地址就使用了)等等。

逻辑错误(Logic errors):当程序没有按照程序员的意图执行时,就表明程序中存在逻辑错误。

Visual C++ 6.0程序调试

Visual C++ 6.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功能。

Visual C++ 6.0 调试工具使用

Visual C++ 6.0 调试工具使用在开发程序的过程中,需要不断地调试自己的程序,或检查错误,或测试程序的稳定性,这就需要借助调试工具来进行。

选择一个好的调试工具并能够熟练地使用它,将会使程序开发变得更加容易,从而大大提高程序开发的效率。

目前有许多调试工具,集成在Visual C++中的调试工具便具有相当强大的功能。

1.1 设置工程的调试属性在Visual C++中建立一个工程(Project)时,Visual C++都会自动创建一个Debug 目录,在该目录下存放在开发过程进行调试时生成的文件以及生成的可执行文件,不妨将此时生成的可执行文件称为Debug版本。

在Debug 版本当中,包含着Microsoft 格式的调试信息,而且不进行任何代码优化。

一般情况下,在程序的开发过程中使用Debug 模式。

在应用程序开发完成之后,要将程序发行时,需要编译形成另一种版本的可执行文件,称为Release 版本,在Release 版本中对可执行程序的二进制代码进行了优化,其中不包含任何的调试信息。

要建立Release 版本的可执行文件,可以选择菜单Project 中的Setting 命令,这时屏幕上面弹出Project Settings 对话框,如图1-1 所示。

在Settings For 下拉列表中选择Release,按OK 按钮退出。

如果要在Visual C++中调试程序,则工程的应设为Debug 版本。

一般Visual C++建立一个工程(Project)时,默认采用Debug 版本。

图1-1 设置工程的调试属性1.2 学习设置断点进行单步调试通常,一个应用程序是连续运行的,但是在程序调试的过程中,往往需要在程序的运行过程的某一阶段来观测应用程序的状态,所以必须使程序在某一地点停下来。

在Visual C++ 中,可以通过设置断点来达到这样的目的。

在设置好断点之后,当程序运行到设立断点处时就停止运行,此时就可以利用各种工具来观察程序的状态,也可以设置各种条件使程序按要求继续运行,这样就可以进一步观测程序的流向。

VC6.0中如何调试程序说明大全


设置断点
将光标放到需要设置断点的行
设置断点
点击按钮
断点设置好
VC++程序调试演示
• 程序调试概述 • Debugger工具栏简介 • 启动Debugger • 变量跟踪 • 设置断点 • 快速执行到一个断点 • 结束Debugger • 快速查看变量类型
快速执行到一个断点
点击按钮
快速执行到断点设置行
* 选中Breakpoint对话框中的DATA标签,对应的页面将会弹出
* DATA页面中的Expression编辑框中写出逻辑表达式,如(X==3);
2、监视表达式发生变化断点: * 从EDIT 菜单中选中breakpoint命令,屏幕 上将会出现Breakpoint对话框。 * 选中Breakpoint对话框中的DATA标签,对 应的页面将会弹出。 * 在Expression编辑框中写出需要监视的表 达式。 * 最后按OK键返回。
4 控制程序的运行
从菜单Build到子菜单Start Debuging 选择Go程序开 始运行在Debug状态下,程序会由于断点而停顿下来后, 可以看到有一个小箭头,它指向即将执行的代码。按要求 来控制程序的运行,其中有四条命令:Step over, step Into , Step Out ,Run to Cursor。Leabharlann Debugger工具栏简介
(SHIFT+F11)确认当前子程序中没有程序错误时,该选项可 以快速执行该子程序,并停留在子程序后面的语句
Debugger工具栏简介
(CTRL+F10)快速执行到光标所在的代码处
Debugger工具栏简介
(SHIFT+F9)显示QuickWatch窗口,在该窗口可以计算表达 式的值

vc6调试入门教程

VC6调试入门教程虞铭财本文以OJ上957题简单计算为例介绍VC6的基本调试功能。

题目在《程序设计基础2010》实验三分支结构中。

希望大家把这个代码输入到vc中,跟着本教程多调试几遍,肯定可以掌握调试的基本技巧。

文中如有错误,请指出,不胜感激!!已有代码如下提交到OJ上,判题结果为WA。

虽然用题目的样例输入R1也能得到正确结果19。

但题目中还存在逻辑错误。

对于判题结果为WA的题目,首先大家需要去设计一些测试数据去测试你的程序,看看程序的输出结果是否正确(比对程序输出与自己手工计算结果是否一致),本题还可以设计测试数据,如a1,正确结果应该为f(a)+1=0,但运行程序后结果如下说明对测试数据a1来说,程序给出了错误的结果。

需要找出程序到底哪一行出现了问题。

这个时候需要调试程序。

调试程序的目的就是找出程序中的逻辑错误(希望大家都能明白语法错误和逻辑错误的区别)。

调试的最基本方法主要如下:设置断点、单步执行程序、查看程序中的变量。

1、设置断点从代码上看,显然1-6行是没有问题的。

所以我们在第7行设置断点,如果大家不确定前面的代码是否有问题,可以在main函数的开始处设置断点。

把光标移到第7行的行首,如图所示,光标会在第7行闪烁(图上I字形所在位置)。

然后在工具栏上点击调试按钮,或者按快捷键F9。

这样就在第7行设置好了断点,如图第7行前面有一个红色的圆点。

如果再次把光标移到第7行,然后点击调试按钮或者按F9,则取消断点。

所以按钮或者F9的功能是插入或者删除断点。

备注:断点的作用是使程序在调试的时候,运行到断点所在的行(但是尚未执行该行)的时候暂时把程序停下来,这样就可以程序运行到断点的时候查看变量的值。

2、开始调试设置好断点后,点击工具栏上的开始调试按钮或者按快捷键F5就可以开始调试。

开始调试后如图:大家可以发现在第7行有一个黄色的箭头,表示程序执行到该行了(再次强调一下,该行的代码尚未执行)。

备注:在开始调试后,需要注意如果断点行前有scanf()语句,需要先在程序运行窗口先按题目要求给定程序的输入。

VC6常用调试方法


(试试看Shift+F10什么效果)
F11跟踪时进入函数内部
Shift+F11跳到上一层调用栈
F12跳到函数定义初(需要带Browse Info选项编译,建议不选,生成文件很大)
编辑常用
Ctrl+W 显示ClassWizard,边界面程序用的比较多
Ctrl+Z/Ctrl+Y Undo/Redo
Shift+F5 --F5运行后,直接从VC中停止程序(可以模拟当机情况)
Ctrl+Shift+F5 --重新开始运行
F6切换窗口 SplitWindow后,可以转换光标所在的窗口
F7编译 F7 编译工程
Ctrl+F7 编译当前文件
Alt+F7 工程设置对话框
Alt+8 显示汇编码
还有一些常用的
Ctrl+TAB 切换打开的文件视图,(如果按住Ctrl,顺序向后切换)
Ctrl+Shift+TAB切换打开的文件视图,(如果按住Ctrl,顺序向前切换)
TAB 选中后,整体后移一个制表符,
Shift+TAB 选中后,整体前移一个制表符,
7. 按Ctrl + C 可COPY光标所在的这一行。
8. 按住shift+[End] 可选择本行。
//////////////////////////////////////
F1 显示帮助,如果光标停在代码的某个字符上,显示MSDN中相应的帮助内容
F2 书签功能: Ctrl+F2 --在某行设置一个书签(再按一次次是取消)
1.检测程序中的括号是否匹配
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

调试详细教程
1、调试的一般过程
调试,就是在程序的运行过程的某一阶段观测程序的状态。

在一般情况下程序是连续运行的,所以我们必须使程序在某一地点停下来。

我们所做的第一项工作就是设立断点;其次再运行程序;当程序在设立断点处停下来时,利用各种工具观察程序的状态。

程序在断点停下来后,有时我们需要按我们的要求控制程序的运行,以进一步观测程序的流向。

下面我们依次来介绍断点的设置,如何控制程序的运行以及各种观察工具的利用。

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返回。

这种断点主要是由其位置发生作用的,但也结合了逻辑条件,使之更灵活。

9、控制程序的运行
上面我们讲了如何设置各类断点,下面我们来介绍如何控制程序的运行。

当我们从菜单Build到子菜单Start Debug选择Go,程序开始运行在Debug状态下,程序会由于断点而停顿下来后,可以看到有一个小箭头,它指向即将执行的代码。

10、控制程序的运行
随后,我们就可以按要求来控制程序的运行:其中有四条命令:
¡Step over
¡Step Into
¡Step Out
¡Run to Cursor
¡ Step over :运行当前箭头指向的代码(只运行一条代码);
¡Step Into :如果当前箭头所指的代码有函数的调用,则用Step Into 进入该函数进行单步执行;
¡ Step Out:如当前箭头所指向的代码是在某一函数内,用它使程序运行至函数返回处;
¡ Run to Cursor:使程序运行至光标所指的代码处。

11、查看工具的使用
调试过程中最重要的是要观察程序在运行过程中的状态,这样我们才能找出程序的错误之处。

这里所说的状态包括各变量的值、寄存器中的值、内存器中的值、堆栈中的值,为此我们需要利用各种工具来帮助我们察看程序的状态。

12、查看工具的使用
Ø弹出式调试信息泡泡(Data Tips Pop_up Information)。

当程序在断点停下来后,要观察一个变量或表达式的值的最容易的方法是利用调试信息泡泡。

要看一个变量的值,只需在源程序窗口中,将鼠标放到该变量上,你将会看到一个信息泡泡弹出,其中显示出该变量的值。

13、查看工具的使用-变量窗口
Ø变量窗口(VARIABLE WINDOW)。

在View 菜单,Debug Windows选 Variables; 变量窗口将出现在屏幕上。

其中显示着变量名及其对应的值。

你将会看到在变量观察窗口的下部有三个标签:Auto ,Locals,this 选中不同的标签,不同类型的变量将会显示在该窗口中。

14、
Ø观察窗口(WATCH WINDOW)
在View 菜单,选择Debug Windows 命令的Watch 子命令。

这时观察窗口将出现在屏幕上。

15、
在上图的观察窗口中双击Name栏的某一空行,输入你要查看的变量名或表达式;
回车后你将会看到对应的值。

Zhuyi:第多少遍:
int I=0;然后用一个i吧要测试的包住,然后在if前加i=i+1。

相关文档
最新文档