vc++6.0_调试详细教程(17种方法)
Visual_C++6.0调试功能图解教程
Visual_C++6.0调试功能图解教程Visual C++ 6.0调试功能图解教程(1)2008年11⽉02 16:50来源: ⽹络阅读:50【⼤中⼩】Visual C++ 6.0调试功能这是我⾃⼰在学习时整理的,希望对⼤家有⽤.其中有⼏个部分的内容,如下:※My Note全部由我截图并参考资料进⾏说明,这其中有⼤量的内容是调试过程中体会总结才写的.有不当之处请⼤家更正.※From 《Visual C++ Debugger》这本书写得⾮常的不错,从⾥⾯截了⼀些有⽤的图,主要是强烈推荐⼤家阅读这本书.※Debug Menu From MSDN这是我从Visual C++ 6.0 MSDN Library October 2001中查来的,在My Note中有很多是从那⾥参考的.强烈推荐⼤家看这份英⽂说明.※From 《visual C++ 6.0开发⼯具与调试》这是我从⽹络上搜索到的,问题很经典,强烈推荐⼤家参看学习,避免不必要的错误.My Note○常⽤功能:Restart(Ctrl+shift+F5):此debugger功能将从程序的开始(第⼀有效⾏)处全速执⾏,⽽不是从当前所跟踪的位置开始调试,这时所有变量的当前值都将被丢弃,debugger会⾃动停在程序的main()开始处.这时如果选择Step Over(F10)就可以逐步执⾏main()函数了.1. Stop Debugging(Shift+F5):此debugger功能将终⽌(所有)调试,并返回到常规编辑状态.2. Break(此功能常常在遇到调⽤函数的语句时可见.):此功能将在调试过程中的debugger当前位置挂起程序的执⾏,然后就可以在调试状态⼀修改程序的代码,接着可以⽤Apply Code Changes(Alt+F10)来应⽤修改的代码到正在调试的程序当中.如果,当前(需要,待)可以(从DOS等窗⼝)输⼊值,挂起后将不能再输⼊.3. Apply Code Changes(Alt+F10):此功能可以在程序正在调试程序过程中应⽤(挂起)修改后的源代码.如,选择Break功能并修改代码后,只要选择Apply Code Changes(Alt+F10)就能将修改后的代码应⽤到正在调试的程序当中.4. Show Next Statement(Alt+Num*):此功能将显⽰程序代码的下⼀条语句,如果源代码中找不到,则在Disassembly窗⼝中显⽰语句.当在Disassembly窗⼝中显⽰时,可以单击Disassembly 返回到源代码窗⼝.5. Step Into(F11):此功能可以单步进⼊到在调试过程中所跟踪的调⽤函数的语句的函数内部.如,当前语句是"d.Display()", 选择Step Into(F11)后,Debugger将进⼊Display()函数内部并停在Display()函数内部的第⼀条语句上.(此时, 就可以Step Over(F10)对Display()函数进⾏单步调试了.)6. Step Over(F10):此功能可以单步对所在函数单步调试,如果调试的语句是⼀个调⽤函数的语句时, Debugger将全速执⾏所调⽤的函数,单步(⼀步)通过所调⽤的函数,Debugger停该调⽤语句的下⼀条语句上.7. Step Out(Shift+F11):此功能将使Debugger切换回全速执⾏到被调⽤函数结束,并停在该函数调⽤语句的下⼀条语句上.当确定所调⽤的函数没有问题时可以⽤这个功能全速执⾏被调⽤函数.8. Run to Cursor(Ctrl+F10):此功能将全速执⾏到包含插⼊点光标所在的⾏,可以作为在插⼊点光标处设置常规断点的⼀种选择.注意,当光标处不是⼀个有效的执⾏语句时此功能将不起作⽤.9. Go(F5):此功能将全速执⾏程序直到遇到⼀个断点或程序结束,或直到程序暂停等待⽤户输⼊.注意,此功能最能有效的调试循环,常将断点设置在循环体内,重复的按F5全速执⾏循环体可以测试循环过程中的产⽣的变化.10. S tep Into Specific Function:此功能可以可以单步通过程序中的指令,并进⼊指定的函数调⽤,此功能对于函数的嵌套层不限.调试常⽤快捷键From 《Visual C++ Debugger》Debug Menu From MSDNStart Debug Commands (Build menu)When you begin debugging, the Debug menu appears, replacing the Build menu o n the menu bar. You can then control program execution using the commands liste d in thefollowing table.Debug Menu Commands that Control Program ExecutionThe following additional commands appear on the Debug menu:From 《visual C++ 6.0开发⼯具与调试》1、如何快速地规范代码缩进格式选中所需要规范的代码,按shift+F82、如何在Release状态下进⾏调试Project->Setting=>ProjectSetting对话框,选择Release状态。
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)--实例一使用说明程序名为 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 按任意键,返回。
使用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); }
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功能。
(完整版)vc6.0使用教程详解
你首先要打开VC6.0界面,一般用得较多的是Win32控制台应用程序(源程序,扩展名.cpp),步骤是:(先工程—后文件—编译—连接---运行)1,建立一个工程,“文件”——“新建”,出现下面界面:选择“Win32 Console Application”(控制台应用程序,左边倒数第三个),命名工程名称,选择保存位置,点击“确定”,进入下一步,看到如下提示界面:建立一个空工程,对应其他需要的你一可以建立别的工程;点击“完成”,之后:显示你创建的工程的信息。
2,再在有一个的工程的条件下,我们再建立一个源文件;“文件”——“新建”(快捷键Ctri+N),出现:建立源文件,选择“C++ Source ”,一般都是建立这种文件的(适用在当文件中适用)如果要建立头文件的话,选择“C/C++ Header File”,(适用在多文件工程中使用)命名,文件名称,点击“确定”,之后:进入编辑区,在主界面编写代码:如下编写完之后呢:可以按编译按钮调试程序,看看有没有错误,有的话改正,没有的话就可以再按连接按钮检查连接(多文件工程时常用,检查文件间是否正常连接),最后,点运行按钮,就可以运行了。
如果是您有代码如:cpp文件,或 .h 文件,想添加都VC6.0里来测试的话,可以这样做:首先,要理解一下文件扩展名为:cpp和.h文件扩张名是.h,代表的是头文件,一般是书写一些函数原型,以及一些在整个程序中常用到的结构体,频繁使用的函数说明,定义等等;文件扩张名为,cpp的,是C++中的源文件,也是最常用到的文件,每建立一个工程都要至少一个源文件(至少要有一个函数入口——主函数main() ),包含了核心代码;建立与运行说明:(以VC 6.0编译器为例,其他编译器类似)首先,打开VC 6.0编译环境;在菜单栏——文件(的下拉菜单中选择“新建”),在弹出的选择窗口中,选择Win32 Console Application(控制台应用程序),在填写工程名称,选择一个程序保存路径,点击“完成”,查看工程信息。
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窗口,在该窗口可以计算表达 式的值
VC++6.0使用手册(史上最全)
图1-1Visual C++界面开项目工作区文件时其他文件随即会自动打开。
在此文件夹下还会创建 Res(资源)、Debug(调试)、Release(发行)等子文件夹。
2.2编辑 在编辑窗口打开、浏览文件、输入、修改、复制、剪切、粘贴、查找、替换、撤销等操作,可以通过菜单完成,也可以通过工具栏按钮完成,这些与 Word 之类的 windows 编辑器用法完全相同,这里就不再重复叙述了。
2.3辅助VC 不仅提供了“语法着色”帮助我们阅读程序,还可以通过一些快捷键检查常见的括号不匹配错误。
MSDN 也可以在编辑过程中提示存在的变量名、函数名。
很多程序员借助类似 Visual Assist X 的工具辅助开发,减少程序出错的可能性。
3.开发 C 程序3.1开发单个 C 语言程序1. 创建一个工作文件夹。
由于开发过程会产生一系列文件,建议每开发一个新的 C 程序都创建一个工作文件夹。
还可以将所有工作文件夹集中到一起,如E:\LXH\EX01-01 、E:\LXH\EX03-02 等。
2. 启动 Visual C++。
3. 新建一个 C 语言源程序。
选择菜单:File 下的 New 菜单项,出现如图 1-2 所示 new(新建)对话框。
图1-2选择菜单File下的New菜单项选择 Files标签下的 C++Source File 在“E:\LXH\EG01-01”文件夹中创建C 程序:eg01-01.c,如图 1-3 所示。
图1-3Files标签4. 输入、编辑源程序。
注意不要输入中文标点符号,要及时按 Ctrl+S 保存文件,如图 1-4 所示。
图1-4输入源程序5.编译、连接。
点击“BuildMiniBar”工具栏上的“Build”按钮进行编译、连接。
也可以选择菜单 Build 下的 Build (F7) 菜单项或Rebuild All菜单项。
更简捷的方法是直接按 F7 功能键。
Visual C++将提示创建默认工作区,如图 1-5 所示。
VC++6.0调试方法大全
一、调试基础调试快捷键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宏也就随之被激活了。
vc6.0使用教程详解
你首先要打开VC6.0界面,一般用得较多的是Win32控制台应用程序(源程序,扩展名.cpp),步骤是:(先工程—后文件—编译—连接---运行)1,建立一个工程,“文件”——“新建”,出现下面界面:选择“Win32 Console Application”(控制台应用程序,左边倒数第三个),命名工程名称,选择保存位置,点击“确定”,进入下一步,看到如下提示界面:建立一个空工程,对应其他需要的你一可以建立别的工程;点击“完成”,之后:显示你创建的工程的信息。
2,再在有一个的工程的条件下,我们再建立一个源文件;“文件”——“新建”(快捷键Ctri+N),出现:建立源文件,选择“C++ Source ”,一般都是建立这种文件的(适用在当文件中适用)如果要建立头文件的话,选择“C/C++ Header File”,(适用在多文件工程中使用)命名,文件名称,点击“确定”,之后:进入编辑区,在主界面编写代码:如下编写完之后呢:可以按编译按钮调试程序,看看有没有错误,有的话改正,没有的话就可以再按连接按钮检查连接(多文件工程时常用,检查文件间是否正常连接),最后,点运行按钮,就可以运行了。
如果是您有代码如:cpp文件,或 .h 文件,想添加都VC6.0里来测试的话,可以这样做:首先,要理解一下文件扩展名为:cpp和.h文件扩张名是.h,代表的是头文件,一般是书写一些函数原型,以及一些在整个程序中常用到的结构体,频繁使用的函数说明,定义等等;文件扩张名为,cpp的,是C++中的源文件,也是最常用到的文件,每建立一个工程都要至少一个源文件(至少要有一个函数入口——主函数main() ),包含了核心代码;建立与运行说明:(以VC 6.0编译器为例,其他编译器类似)首先,打开VC 6.0编译环境;在菜单栏——文件(的下拉菜单中选择“新建”),在弹出的选择窗口中,选择Win32 Console Application(控制台应用程序),在填写工程名称,选择一个程序保存路径,点击“完成”,查看工程信息。
vc++6.0调试方法(附有快捷键)
调试程序可以帮助了解程序是怎样运行的。
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调试技巧
• ④ 运行到当前光标处 当按下CTRL+F10后。程序运行至当前光标处所在的语句。
• ① 设置断点的方法
可以通过下述方法设置一个断点。首先把光标移动到需要设置断点的代码行上,然后按F9快捷键或 者单击“编译”工具条上的按钮 ,断点处所在的程序行的左侧会出现一个红色圆点。
• ② 程序运行到断点 • 选择主菜单“编译(Build)”中的“开始调试(Start Debug)”命令的下一级的
“去(Go)”调试命令,或者单击“编译(Compile)”,程序执行到第一个断点处 程序将暂停执行,该断点处所在的程序行的左侧红色圆点上添加一个黄色箭头,此时, 用户可方便地进行变量观察。继续执行该命令,程序运行到下一个相邻的断点。参考 图2-9。
• ③ 取消断点 • 只需在代码处再次按F9或者单击“编译” 。也可以打开“Breakpoints”对话框后,按
照界面提示去掉断点。
• (4) 结束程序调试,返回程序编辑环境。 选择主菜单“Debug”中的“Stop Debugging”命令,或者单击“调试(Debug)” 工具条上的 按钮,或者单击Shift+F5键,可结束程序调试,返回程序编辑环境。
sual C++6.0环境后,选择主菜单“打开工作区(Open Workspace)”命令,在“Open Workspace”对话框内找到并选择 要打开的工作区文件myexam1.dsw,单击“确定(OK)”按钮,打 开工作区。
• 在左侧的工作区窗口,单击下方的 “FileView” 选项卡,选择文件 视图显示,打开“Source”文件夹,再打开要编辑的C源程序进行编 辑和修改。如图所示。
vc++6.0-调试详细教程(17种方法)
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返回。
绍VC6.0的18个实用小技巧
绍VC6.0的18个实用(shíyòng)小技巧[关键字: vc6.0技巧(jìqiǎo),宏的定义,格式化代码,整理视图,添加lib,添加头文件]1.检测(jiǎn cè)程序中的括号是否匹配把光标移动到需要检测的括号(如大括号{}、方括号[]、圆括号()和尖括号<>)前面,键入(jiàn rù)快捷键“Ctrl+]”。
如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告声。
2.查看一个宏(或变量(biànliàng)、函数)的宏定义把光标移动到你想知道的一个宏上,就比如说最常见的DECLARE_MAP_MESSAGE 上按一下F12(或右键菜单中的Go To Defition Of …),如果没有建立Browse files,会出现提示对话框,确定,然后就会跳到定义那些东西的地方。
相当可喜的是,它也可以看到Microsoft定义的系统宏,非常good.3.格式化一段乱七八糟的源代码选中那段源代码,按ATL+F8。
4.在编辑状态下发现成员变量或函数不能显示删除该项目扩展名为.ncb文件,重新打开该项目。
5.如何整理ClassView视图中大量的类可以在classview 视图中右键新建文件夹(new folder),再把具有相近性质的类拖到对应的文件夹中,使整个视图看上去清晰明了.6.定位(dìngwèi)预处理指定在源文件中定位光标到对称(duìchèn)的#if, #endif,使用Ctrl+K.7.如何添加系统中Lib到当前(dāngqián)项目在Project | Settings | Link | Object/library modules:输入(shūrù)Lib名称,不同的Lib之间用空格格开.8.如何添加系统中的头文件(.h)到当前(dāngqián)项目.#include <FileName.h>,告诉编译到VC系统目录去找;使用#include "FileName.h",告诉编译在当前目录找.9.如何在Studio使用汇编调试在WorkBench的Debugger状态下按CTRL+F7.10.怎样处理ClassZiard找不到的系统消息如果要在ClassWizard中处理WM_NCHITTEST等系统消息,请在ClassWizard 中Class Info页中将Message filter改为Window就有了.11.如何干净的删除一个类先从Workspace中的FileView中删除对应的.h和.cpp文件,再关闭项目,从实际的文件夹中删除对应的.h和.cpp文件与.clw文件。
关于Visual C++ 6.0的调试技巧和经验总结
创建c语言源代码的步骤:1、新建一个文件2、输入文件名称,设置工程文件夹(所以可以先建一个文件夹):3、书写并编辑源代码:4、编译:5、连接:6、运行看看工程文件夹结构:7、用键盘敲入程序输入:一个小技巧:可以直接点击“运行”工具按钮,如果有错,也会有出错提示。
这样可以省略编译和连接操作。
当编译时有问题怎么办? vc会给你出错地点和原因的提示,注意,首先应该修改第一条错误记录,修改后就重新编译连接,改对后再改剩下的。
即从前到后一个错误一个错误的改。
(可能后面的所有错误都是第一个错误导致的,改正第一个错误后,其他错误就消失了,或大大减少了)调试(发现错误位置,在编译、连接成功,而运行时出错时使用):调试时的快捷键以及用法见下面的内容:○常用功能:Restart(Ctrl+shift+F5):此debugger功能将从程序的开始(第一有效行)处全速执行,而不是从当前所跟踪的位置开始调试,这时所有变量的当前值都将被丢弃,debugger会自动停在程序的main()开始处。
这时如果选择Step Over(F10)就可以逐步执行main()函数了。
Stop Debugging(Shift+F5):此debugger功能将终止(所有)调试,并返回到常规编辑状态。
Break(此功能常常在遇到调用函数的语句时可见。
):此功能将在调试过程中的debugger当前位置挂起程序的执行,然后就可以在调试状态下修改程序的代码,接着可以用Apply Code Changes(Alt+F10)来应用修改的代码到正在调试的程序当中。
如果,当前(需要,待)可以(从DOS等窗口)输入值,挂起后将不能再输入。
Apply Code Changes(Alt+F10):此功能可以在程序正在调试程序过程中应用(挂起)修改后的源代码。
如,选择Break功能并修改代码后,只要选择Apply Code Changes(Alt+F10)就能将修改后的代码应用到正在调试的程序当中。
VC6.0 IDE的使用和程序调试技巧
项目工作区窗口
ClassView页
FileView页 ResourceView页
FileView页
ClassView页
File->New->Proj32 Application
基于WINDOWS平台的32位开发环境开发应用程序,SDK程序。 入口函数为WinMain
文件类型 Active Server Page Bitmap File C/C++ Header File HTML Page Resource Script Resource Template
Visual C++6.0 可以创建的文件类型 说明 文件类型 网页制作 Binary File 创建位图文件 C++ Source File 创建 C/C++头文件 Cursor File 创建 HTML 文件 Icon File 创建资源脚本文件 Text File 创建资源模板文件 SQL Script File
6:使用单步执行到程序结束
设置断点以后,调试运行程序时,程序 开始执行,并且运行到断点处暂停下来, 此时我们有机会观察程序的运行情况, 并且诊断程序目前的状态是否如我们所 预期的那样。 不过我们先不着急观察程序的状态,而 是来看看如何控制程序的运行,以便在 我们需要的时候让程序暂停下来,并且 以我们需要的方式走走停停!
方法是使用单步执行手段stepover让程序向前走一步停止调试停止调试并重新启动调试单步执行当前位置对比调试运行时出现的调试菜单debug和调试工具栏根据图标查找对应项设置断点调试运行程序此时程序暂停在断点处等待选择debug菜单找到最后一项quickwatch并点击输入想要观察的变量变量名变量的值点击addwatch点击addwatch看到如下画点击单步执行按钮或者菜单程序则向前单独运行一个步骤每向前执行一步就会暂停下来这样我们就有充足的时间观察所关心的变量名称按下f5键可以让程序从当前位置向前执行直到遇见下一个断点或者程序结束下面是赠送的ppt模板不需要朋友可以下载后编辑删除
VC 6.0_Debug调试方法
编译0 error(s), 0 warning(s)链接0 error(s), 0 warning(s)当你按捺不住激动滴心情点击运行后,发现结果并不是你想要的结果……郁闷了。
然后你在代码中加了n条printf来查看变量的结果……n多循环……运行,再加printf,again and again……终于,要抓狂了……好吧,同学,如果你会用Debug,也许你不用这么纠结。
下面通过一简单例子说明如何使用Debug的一些“基本”(我也只是刚入门的小菜鸟,高级的修行要靠自己的了)功能:写了如图中的一个简单程序,编译链接都没有错误,运行结果却不理想(不正确)需要指出的是,主函数不要再用void main()了,这种只有在你学的环境才不会出错,到别的(linux编译器)地方编译是通过不了的。
main函数必须要有返回值,如写成int main()在函数结尾时加一个return 0;,这样,所有编译器都不会报错了。
最终结果确定是逻辑错误,如果不用单步调试,很难找出这种错误的。
这里先提到一个断点的概念,顾名思义,既是在你需要的地方让它断开,如果你在某一行代码处添加了断点,那么程序运行到断点处即会暂停,不再继续往下运行,直到接到你继续运行的命令。
对上边示例的程序,在你感觉可能有问题的地方添加断点(按快捷键F9或者点击图中小手按钮),以便运行到断点处好查看运行状态。
2012-07-21更新:上边划掉的部分以前就发现有点没解释清楚,一直没来得及更正。
现更正下:之前只知道一个F10,所以解释成了遇到函数会认为是一步直接过去{ } ,得到返回结果。
其实可以从调试的菜单中看到,F10是step over ,意思就是跳过{ } 图标上也有形象的表示,仔细看还有一个F11 是 step into,即进入{ } 内的意思,这下就可以解释清楚了为什么会跳过去,还有其它的更多的快捷键,需要大家自己研究了,常用的也就这几个吧。
在需要的地方添加完断点后(其实,在每个函数第一个需要停下来的地方添加断点就可以了,剩下的地方都可以用F10单步执行,某些已经验证过正确的函数,就不需要每次进行单步查看了验证过的函数等可以按F10 跳过,想要进入其内部可按F11……)添加完断点,按F5或者下图中的调试按钮,即可出现调试界面。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
vc++6.0 调试详细教程
Step into
Step over
Step out
Run to cursor
Watch
Variables
Registers
Memory
Stop Debug
Call stack
Disassembly
Restart Debugger
2、调试的一般过程
调试,就是在程序的运行过程的某一阶段观测程序的状态。
在一般情况下程序是连续运行的,所以我们必须使程序在某一地点停下来。
我们所做的第一项工作就是设立断点;其次再运行程序;当程序在设立断点处停下来时,利用各种工具观察程序的状态。
程序在断点停下来后,有时我们需要按我们的要求控制程序的运行,以进一步观测程序的流向。
下面我们依次来介绍断点的设置,如何控制程序的运行以及各种观察工具的利用。
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栏的某一空行,输入你要查看的变量名或表达式;
回车后你将会看到对应的值。
16、查看工具的使用
观察窗口可有多页,分别对应于标签Watch1,Watch2,Watch3和Watch4。
假如你输入的表达式是一个结构或是一个对象,你可以用鼠标点取表达式右边的形如+ ,以进一步观察其中的成员变量的值。