vc++6.0调试方法(附有快捷键)
VC++ 6.0开发环境与程序测试与调试
242第13章VC++ 6.0开发环境及程序测试与调试 VC++ 6.0是Microsoft 公司推出的运行在Windows 操作系统中的交互式、可视化集成开发软件,它不仅支持C++语言,也支持C 语言。
VC++ 6.0集程序的编辑、编译、连接、调试等功能于一体,为编程人员提供了一个既完整又方便的开发平台。
本章主要介绍英文版Visual C++ 6.0开发C 语言程序的基本方法。
13.1 VC++ 6.0的主窗口界面用鼠标依次单击“开始”→“程序”→“Microsoft Visual Studio 6.0”→“Microsoft Visual C++ 6.0”,进入VC++ 6.0主界面窗口(以下简称VC 窗口),如图13.1所示。
VC 窗口由标题栏、菜单栏、工具栏、项目工作区窗口、输出窗口、编辑窗口、状态栏组成。
输出窗口编辑窗口图13.1 VC++ 6.0的集成开发环境图13.1 VC++ 6.0的集成开发环境(1)菜单栏菜单栏包含File (文件)、Edit (编辑)、View (视图)、Insert (插入)、Project (项目)、Build (建立)、Tools (工具)、Window (窗口)和Help (帮助)菜单项,每个菜单项下有对应的下拉子菜单。
选择菜单的方法与Word 等软件相似,可以用鼠标单击菜单项,也可以用键.. .. ...专业资料.盘操作,即同时按Alt 键和所选菜单的热键字母。
(2)工具栏VC 提供了多种工具栏,在默认的情况下,工具栏显示Standard (标准工具栏)、Build MiniBar (小型编连工具栏)和WizardBar (向导工具栏),其中,WizardBar 与类有关,在此不予介绍。
在调试C 语言程序时,用得最多的是Standard 和Build MiniBar 。
Standard 工具栏中包含新建文本文件()、打开()、保存()、剪切()、复制()、粘贴()、查找()等十几个常用编辑工具。
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 下进行程序调试。
VC6.0的最全快捷键和若干实用小技巧
C++开发中常见问题
1,简述VC6下如何进行程序的调试。
在主菜单"Build"中,有一个Start Build的子菜单,它下面包含了Go菜单(快捷键为F5),选择后,程序将从当前语句进入调试运行,直到遇到断点或程序结束。
将鼠标移动到要调试的代码行,单击鼠标右键选择“Insert/Remove Breakpoint”,或者按下F9,可以在该行上添加断点,此时断点代码行前面出现一个棕色的圈,再次选择将清除断点。进入调试状态后,Debug菜单将取代Build菜单出现在菜单栏中,它下面包含常用的调试操作,如Step Over,单步运行并不跟踪到调用的函数内部;其他还包括Step Into,Step Out, Stop Debugging等调试方法。
调用GlobalFree函数来释放内存块。您必须传给该函数一个内存句柄。
在WIN32中您也可以用“Local”替代内存分配API函数带有“Global”字样的函数中的“Global”,也即用LocalAlloc、LocalLock等。
在调用函数GlobalAlloc时使用GMEM_FIXED标志位可以更进一步简化操作。使用了该标志后,Global/LocalAlloc返回的是指向已分配内存的指针而不是句柄,这样也就不用调用Global/LocalLock来锁定内存了,释放内存时只要直接调用Global/LocalFree就可以了。
猜测:一定是内存不够啦,遂在某处调用函数得到当前剩余的物理内存数量并使用MessageBox显示。报告曰:自由物理内存还有100多M。鼠标按下OK键,程序居然不死了。恩???
删除MessageBox()函数—死!加上MessageBox()函数—不死!再删除–死,再加上–不死。晕倒!
使用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); }
VC6.0调试方法
VC6.0调试⽅法
1.打开你要调试代码的⼯作空间。
2.按快捷键F5或点击以下图⽚上标记的图标进⼊调试模式。
3.打开调试⼯具条,⼀般情况下当你按F5键后会⾃动弹出,如果没有弹出的话,右击⼯具栏空⽩处,会弹出下图,选中调试,就会出现调试⼯具条。
4.接下来,在监视窗⼝中添加你要监视数据变化的变量。
5.按F11逐语句的调试代码,如果某⼀语句是⼀函数,你不希望进⼊该函数时,F10逐过程来查看,在代码的调试过程中,通过监视窗⼝查看变量值的变化,从⽽确定代码是否有问题。
6.如果希望跳出某⼀函数时,按快捷键Shift+F11,或者直接点击调试⼯具条上的按钮就可以跳出该函数了。
7.如果只是希望调试某⼀部分代码的话,可以设置断点来调试,调试⽅法如上,只是在要调试的代码之间⽤断点来分开。
设置断点时,光标放在你要设置断点的那⾏,按F9或点击编译微型条上⾯的类似⼿状的按钮即可。
Visualc++6.0的快捷键和使用说明
Visualc++6.0的快捷键和使用说明F1:帮助Ctrl+O :OpenCtrl+P :PrintCtrl+N :NewCtrl+Shift+F2 :清除所有书签F2 :上一个书签Shift+F2 :上一个书签Alt+F2 :编辑书签Ctrl+F2 :添加/删除一个书签F12 :Goto definitionShift+F12 :Goto referenceCtrl+'Num+' :Displays the next symbol definition or referenceCtrl+'Num-' :Displays the previous symbol definition or referenceCtrl+J/K :寻找上一个/下一个预编译条件Ctrl+Shift+J/K :寻找上一个/下一个预编译条件并将这一块选定Ctrl+End :文档尾Ctrl+Shift+End :选定从当前位置到文档尾Ctrl+Home :文档头Ctrl+Shift+Home :选定从当前位置到文档头Ctrl+B/Alt+F9 :编辑断点Alt+F3/Ctrl+F :查找F3 :查找下一个Shift+F3 :查找上一个Ctrl+]/Ctrl+E :寻找下一半括弧Ctrl+Shift+] :寻找下一半括弧并选定括弧之间的部分(包括括弧)Ctrl+Shift+E :寻找下一半括弧并选定括弧之间的部分(包括括弧)F4 :寻找下一个错误/警告位置Shift+F4 :寻找上一个错误/警告位置Shift+Home :选定从当前位置到行首Shift+End :选定从当前位置到行尾Ctrl+L :剪切当前行Ctrl+Shift+L :删除当前行Alt+Shift+T :交换当前行和上一行Ctrl+Alt+T :Brings up the completion list boxShift+PageDown :选定从当前位置到下一页当前位置Shift+PageUp :选定从当前位置到上一页当前位置Ctrl+Shift+Space:显示函数参数的T ooltipCtrl+Z/Alt+Backspace :UndoCtrl+Shift+Z/Ctrl+Y :RedoF8 :当前位置变成选定区域的头/尾(再移动光标或者点鼠标就会选定)Ctrl+Shift+F8 :当前位置变成矩形选定区域的头/尾(再移动光标或者点鼠标就会选定)Alt+F8 :自动格式重排Ctrl+G :GotoCtlr+X/Shift+Del:CutCtrl+C/Ctrl+Ins :CopyCtrl+V/Shift+Ins:PasteCtrl+U :将选定区域转换成小写Ctrl+Shift+U :将选定区域转换成大写Ctrl+F8 :当前行变成选定区域的头/尾(再移动上下光标或者点鼠标就会选定多行)Ctrl+Shift+L :删除从当前位置到行尾Ctrl+Shift+8 :将所有Tab变成`或者还原Ctrl+T :显示变量类型Ctrl+↑ :向上滚屏Ctrl+↓ :向下滚屏Ctrl+Del :删除当前单词的后半截(以光标为分割)Ctrl+Backspace :删除当前单词的前半截(以光标为分割)Ctrl+← :移到前一个单词Ctrl+→ :移到后一个单词Ctrl+Shift+← :选定当前位置到前一个单词Ctrl+Shift+→ :选定当前位置到后一个单词Ctrl+Shift+T :将本单词和上一个单词互换Alt+0 :Workspace WindowAlt+2 :Output WindowAlt+3 :Watch WindowAlt+4 :Variables WindowAlt+5 :Registers WindowAlt+6 :Memory WindowAlt+7 :CallStack WindowAlt+8 :Disassembly WindowCtrl+W :ClassWizardAlt+Enter :属性Alt+F7 :Project SettingsF7 :BuildCtrl+F7 :CompileCtrl+F5 :RunCtrl+Break :Stops the buildF5 :GoCtrl+F10 :Run to cursorF11 :step intoAlt+F10 :Apply codes changesCtrl+F9 :Enable/Disable a breakpointAlt+F11 :将Memory Window 切换到下一种显示模式Alt+Shift+F11 :将Memory Window 切换到上一种显示模式Ctrl+Shift+F9 :去掉所有断点Ctrl+Shift+F5 :Restarts the programCtrl+Shift+F10 :将当前行设为下一条指令执行的行Alt+Num* :滚动到当前指令Shift+F11 :跳出当前函数F9 :断点F10 :step overShift+F5 :停止DebuggingCtrl+F11 :Switches between the source view and the disassembly view for this instructionAlt+F12 :Queries on the selected object or current context Alt+F6 :Toggles the docking feature for the window on/off Shift+Esc :隐藏窗口Ctrl+Shift+G :?Ctrl+* :打开string tableCtrl+Space :?Ctrl+F3 :向下查找下一个Ctrl+Shift+F3 :查找上一个Ctrl+D :查找Ctrl+I :向下查找下一个Ctrl+Shift+I :查找上一个F6 :?Activates the next paneShift+F6 :?Activates the previous paneCtrl+M :?Detects duplicate mnemonics in the resourceAlt +O : 头文件与cpp文件的交互显示。
【Visual C++】Visual_C++6.0调试功能图解教程
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○常用功能:1.Restart(Ctrl+shift+F5):此debugger功能将从程序的开始(第一有效行)处全速执行,而不是从当前所跟踪的位置开始调试,这时所有变量的当前值都将被丢弃,debugger会自动停在程序的main()开始处.这时如果选择Step Over(F10)就可以逐步执行main()函数了.2. Stop Debugging(Shift+F5):此debugger功能将终止(所有)调试,并返回到常规编辑状态.3. Break(此功能常常在遇到调用函数的语句时可见.):此功能将在调试过程中的debugger当前位置挂起程序的执行,然后就可以在调试状态一修改程序的代码,接着可以用Apply Code Changes(Alt+F10)来应用修改的代码到正在调试的程序当中.如果,当前(需要,待)可以(从DOS等窗口)输入值,挂起后将不能再输入.4.Apply Code Changes(Alt+F10):此功能可以在程序正在调试程序过程中应用(挂起)修改后的源代码.如,选择Break功能并修改代码后,只要选择Apply CodeChanges(Alt+F10)就能将修改后的代码应用到正在调试的程序当中.5. Show Next Statement(Alt+Num*):此功能将显示程序代码的下一条语句,如果源代码中找不到,则在Disassembly窗口中显示语句.当在Disassembly窗口中显示时,可以单击Disassembly 返回到源代码窗口.6.Step Into(F11):此功能可以单步进入到在调试过程中所跟踪的调用函数的语句的函数内部.如,当前语句是”d.Display()”,选择Step Into(F11)后,Debugger将进入Display()函数内部并停在Display()函数内部的第一条语句上.(此时,就可以Step Over(F10)对Display()函数进行单步调试了.)7. Step Over(F10):此功能可以单步对所在函数单步调试,如果调试的语句是一个调用函数的语句时,Debugger将全速执行所调用的函数,单步(一步)通过所调用的函数,Debugger停该调用语句的下一条语句上.8.Step Out(Shift+F11):此功能将使Debugger切换回全速执行到被调用函数结束,并停在该函数调用语句的下一条语句上.当确定所调用的函数没有问题时可以用这个功能全速执行被调用函数.9. Run to Cursor(Ctrl+F10):此功能将全速执行到包含插入点光标所在的行,可以作为在插入点光标处设置常规断点的一种选择.注意,当光标处不是一个有效的执行语句时此功能将不起作用.10.Go(F5):此功能将全速执行程序直到遇到一个断点或程序结束,或直到程序暂停等待用户输入.注意,此功能最能有效的调试循环,常将断点设置在循环体内,重复的按F5全速执行循环体可以测试循环过程中的产生的变化.11.Step 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 on the menu bar. You can then control program execution using the commands listed in the following 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中如何编译运行及调试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。
VC6.0调试快捷键
调试.应用代码更改Alt + F10 应用代码更改但不停止调试模式。
有关更多信息,请参见编辑并继续。
调试.自动窗口Ctrl + Alt +V,A显示“自动”窗口,以查看当前过程内当前执行行范围中的当前变量的值。
有关更多信息,请参见中断执行。
调试.全部中断Ctrl + Alt +Break临时停止执行调试会话中的所有进程。
仅适用于“运行”模式。
调试.断点Alt + F9 Ctrl+ Alt + B 显示新断点对话框,在其中可以添加和修改断点。
有关更多信息,请参见断点概述。
调试.调用堆栈Alt + 7 Ctrl +Alt + C显示“调用堆栈”窗口,以显示当前执行线程的所有活动过程或堆栈帧的列表。
仅适用于“运行”模式。
有关更多信息,请参见如何:使用“调用堆栈”窗口。
调试.清除所有断点Ctrl + Shift +F9清除项目中的所有断点。
调试.反汇编Alt +8 显示“反汇编”窗口。
有关更多信息,请参见如何:使用“反汇编”窗口。
调试.启用断点Ctrl + F9 在当前行上启用断点。
调试.异常Ctrl + Alt + E 显示“异常”对话框。
有关更多信息,请参见在出现异常之后继续执行。
调试.即时Ctrl + Alt + I 显示“即时”窗口,在此可计算表达式和执行个别命令。
调试.局部变量Alt + 4 Ctrl +Alt + V,L显示“局部变量”窗口,以查看当前堆栈帧中每个过程的变量及变量值。
调试.内存1 Alt + 6 Ctrl +Alt + M,1 显示“内存1”窗口,查看在“监视”或“变量”窗口中不能清楚地显示的大缓冲区、字符串和其他数据。
调试.内存2 Ctrl + Alt +M,2 显示“内存2”窗口,查看在“监视”或“变量”窗口中不能清楚地显示的大缓冲区、字符串和其他数据。
调试.内存3 Ctrl + Alt +M,3 显示“内存3”窗口,查看在“监视”或“变量”窗口中不能清楚地显示的大缓冲区、字符串和其他数据。
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宏也就随之被激活了。
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里面的内容仍然编译,但不再判断真假。
所以后者更安全一点。
Visual C++6.0快捷键大全
VC++6.0快捷键1.检测程序中的括号是否匹配把光标移动到需要检测的括号(如大括号{}、方括号[]、圆括号()和尖括号<>)前面,键入快捷键“Ctrl+]”。
如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告声。
2.查看一个宏(或变量、函数)的宏定义把光标移动到你想知道的一个宏上,就比如说最常见的DECLARE_MAP_MESSAGE上按一下F12(或右键菜单中的Go To Defition Of …),如果没有建立Browse files,会出现提示对话框,确定,然后就会跳到定义那些东西的地方。
3.格式化一段乱七八糟的源代码选中那段源代码,按ATL+F8。
4.在编辑状态下发现成员变量或函数不能显示删除该项目扩展名为.ncb文件,重新打开该项目。
5.如何整理ClassView视图中大量的类可以在classview 视图中右键新建文件夹(new folder),再把具有相近性质的类拖到对应的文件夹中,使整个视图看上去清晰明了.6.定位预处理指定在源文件中定位光标到对称的#if, #endif,使用Ctrl+K.7.如何添加系统中Lib到当前项目在Project | Settings | Link | Object/library modules:输入Lib名称,不同的Lib 之间用空格格开.8.如何添加系统中的头文件(.h)到当前项目.#include ,告诉编译到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文件。
vc6.0调试技巧
/Zi
Program Database
创建一个程序库(PDB),包括类型信息和符号调试信息。
/ZI
Program Database for Edit and Continue
除了前面/Zi的功能外,这个选项允许对代码进行调试过程中的修改和继续执行。这个选项同时使#pragma设置的优化功能无效
Life is like a box of chocolate, you never know what you are going to get.
二、调试的一些技巧
1、使用ASSERT和VERIFY(原则:尽量简单)
ASSERT:它接收一个表达式,如果这个表达式为TRUE,则无动作,否则中断当前程序执行。对于系统中出现这个宏导致的中断,应该认为你的函数调用未能满足系统的调用此函数的前提条件。例如,对于一个还没有创建的窗口调用SetWindowText等。
vc6.0调试技巧
一、基本的调试设置
1、CTRL+F10:运行到当前光标处 DEBUG模式下 用F9在要看的语句上打好断点,F5调试运行,F10单步运行。
2、设置
为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard创建的工程中包含的Debug Configuration自动包含调试信息,但是是不是Debug版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configuration中增加调试信息,包括Release版本。
LocalFree( lpMsgBuf );
LPVOID lpMsgBuf;
但是也要注意:由于用GetLastError插得代码七零八碎。在Watch窗里使用变量@err时就可以立即看到当前的LastError码。
VC++6.0使用说明(快捷键)
V C++6.0使用说明(快捷键)F1 显示帮助,如果光标停在代码的某个字符上,显示MSDN中相应的帮助内容F2 书签功能: C trl+F2 –在某行设置一个书签(再按一次次是取消)F2 –跳到下一个书签位置Shift+F2 –跳到上一个书签位置C trl+Shift+F2 –删除所有书签F3 查找: C trl+F3 –在文件中查找,如果当前光标在一个字符串上,那么自动查找此字符串.相似的有C trl+FF3 –查找文件中下一个串Shift+F3 –查找文件中上一个串F4 - 如果是编译后或者Find in Files后,可以逐条定位.C trl+F4 –关闭文件Alt+F4 –关闭V C(跟WINDOWS定义的一样)F5编译并执行F5 –编译并通过V C执行C trl+F5 –不经过V C,直接执行编译后的exeShift+F5 –F5运行后,直接从V C中停止程序(可以模拟当机情况)C trl+Shift+F5 –重新开始运行F6切换窗口SplitWindow后,可以转换光标所在的窗口F7编译F7 编译工程C trl+F7 编译当前文件Alt+F7 工程设置对话框F8选择的粘滞键其实更常用的是按住Shift+方向键Alt+F8 选中的代码书写格式对齐F9设置断点C trl+F9删除所有断点Alt+F9 显示编辑断点的对话框C trl+F9断点无效F10单步执行(Debug时)C trl+F10执行到光标所在行(试试看Shift+F10什么效果)F11跟踪时进入函数内部Shift+F11跳到上一层调用栈F12跳到函数定义初(需要带Browse Info选项编译,建议不选,生成文件很大)编辑常用C trl+W 显示C lassWizard,边界面程序用的比较多C trl+Z/C trl+Y Undo/RedoC trl+U 字母转化为小写(有的V C没有设置)C trl+Shift+U 字母转化为大写(有的V C没有设置)C trl+S 保存(强烈建议编码时经常按两下,省得掉电死机时后悔,呵呵,该键在多数编辑软件都适用)C trl+D 查找(嗯,如果有SOFTI C E,那么就是呼叫它了)C trl+F 正宗的查找快捷键C trl+G 跳到文件中第n行C trl+Shift+G 光标在一个文件名上,直接跳到指定文件C trl+H 替换C trl+J,K #ifdef…#endif查找配对C trl+L 剪切一行C trl+} 匹配括号(),{}调试常用Shift+F9 Qui c kWat c h,并显示关标所在处的变量值Alt+3 Wat c h 查看窗口Alt+4 Variables 监视变量(常用)Alt+5 显示寄存器Alt+6显示内存(常用)Alt+7 显示堆栈情况(当机了多看看)Alt+8 显示汇编码还有一些常用的C trl+TAB 切换打开的文件视图,(如果按住C trl,顺序向后切换)C trl+Shift+TAB切换打开的文件视图,(如果按住C trl,顺序向前切换)TAB 选中后,整体后移一个制表符,Shift+TAB 选中后,整体前移一个制表符,Alt+0将焦点移到工作区(ES C回编辑区)Alt+2 将焦点移到输出区(ES C回编辑区)C trl+PgUp 逆序切换工作区视图C trl+PgDn 顺序切换工作区视图另外,V C没有设置打开,关闭工作区,和打开关闭输出区的快捷键,如果觉得不方便, 可以自己注册(我设置的是C trl+,和C trl+/).注册在Tools => C ustomize => KeyBoard。
《VC++6.0快捷键大全》
Alt+F3/Ctrl+F :查找
F3 :查找下一个
Shift+F3 :查找上一个
Ctrl+]/Ctrl+E :寻找下一半括弧
Ctrl+Shift+] :寻找下一半括弧并选定括弧之间的部分(包括括弧)
Ctrl+Shift+E :寻找下一半括弧并选定括弧之间的部分(包括括弧)
Alt+3 Watch 查看窗口
Alt+4 Variables 监视变量(常用)
Alt+5 显示寄存器
Alt+6 显示内存(常用)
Alt+7 显示堆栈情况(当机了多看看)
Alt+8 显示汇编码
还有一些常用的
Ctrl+TAB 切换打开的文件视图,(如果按住Ctrl,顺序向后切换)
F7编译 F7 编译工程
Ctrl+F7 编译当前文件
Alt+F7 工程设置对话框
F8选择的粘滞键 其实更常用的是按住Shift+方向键
Alt+F8 选中的代码书写格式对齐
F9设置断点 Ctrl+F9删除所有断点
Alt+F9 显示编辑断点的对话框
Ctrl+F9断点无效
Ctrl+Shift+→ :选定当前位置到后一个单词
Ctrl+Shift+T :将本单词和上一个单词互换
《VC++6.0快捷键大全》
F1 显示帮助,如果光标停在代码的某个字符上,显示MSDN中相应的帮助内容
VC6.0中如何调试程序说明大全
56
2、变量窗口(VARIABLE WINDOW)。
在VIEW 菜单,Debug window选 Variables window; 变量窗口将 出现在屏幕上。其中显示着变量名及其对应的值。将会看到在变量观 察窗口的下部有三个标签:AUTO ,LOCAL,THIS 选中不同的标签,不同 类型的变量将会显示在该窗口中。
** 与位置有关的断点; ** 与逻辑条件有关的断点 ** 与WINDOWS消息有关的断点。
h
40
与位置有关的断点;
1、最简单的是设置一般位置断点,把光标移到你要设断点的位置; 然后按工具条上的add/remove breakpoint 按钮或按快捷键F9;在这 一行的左边出现一个红色的圆点表示设了一个断点。
5
程序调试概述
• 预防性维护
– 一条有经验的方法是桌面检查法。桌面检查一 个程序类似于核对一封信或手稿,其思想是在 内心对程序进行跟踪,确保程序逻辑正确。程 序员必须考虑各种可能的输入,并记录程序执 行期间所产生的所有结果。
h
6
VC++程序调试演示
• 程序调试概述
• Debugger工具栏简介
• 启动Debugger
h
57
3、观察窗口(WATCH WINDOW)。
在VIEW 菜单,选择Debug window,Watch window 子命令。变量 窗口将出现在屏幕上。
h
58
观察窗口中双击Name栏的某一空行,输入要查看的变量名或表 达式。回车后将会看到对应的值。观察窗口可有多页,分别对应于 标签Watch1,Watch2,Watch3等等。
h
41
2 、当在满足一定条件的情况下才停下来,设置一种与位置有关的逻辑断点。 从EDIT 菜单中选中breakpoint命令。选中Breakpoint对话框中的LOCATION标 签,使LOCATION 页面弹出。
VC6使用手册
VC6.0调试知识大全收藏My Note○常用功能:1、Restart(Ctrl+shift+F5):此debugger功能将从程序的开始(第一有效行)处全速执行,而不是从当前所跟踪的位置开始调试,这时所有变量的当前值都将被丢弃,debugger会自动停在程序的main()开始处.这时如果选择Step Over(F10)就可以逐步执行main()函数了.2、Stop Debugging(Shift+F5):此debugger功能将终止(所有)调试,并返回到常规编辑状态.3、Break(此功能常常在遇到调用函数的语句时可见.):此功能将在调试过程中的debugger 当前位置挂起程序的执行,然后就可以在调试状态一修改程序的代码,接着可以用Apply Code Changes(Alt+F10)来应用修改的代码到正在调试的程序当中.如果,当前(需要,待)可以(从DOS等窗口)输入值,挂起后将不能再输入.4、Apply Code Changes(Alt+F10):此功能可以在程序正在调试程序过程中应用(挂起)修改后的源代码.如,选择Break功能并修改代码后,只要选择Apply Code Changes(Alt+F10)就能将修改后的代码应用到正在调试的程序当中.5、Show Next Statement(Alt+Num*):此功能将显示程序代码的下一条语句,如果源代码中找不到,则在Disassembly窗口中显示语句.当在Disassembly窗口中显示时,可以单击Disassembly 返回到源代码窗口.6、Step Into(F11):此功能可以单步进入到在调试过程中所跟踪的调用函数的语句的函数内部.如,当前语句是"d.Display()",选择Step Into(F11)后,Debugger将进入Display()函数内部并停在Display()函数内部的第一条语句上.(此时, 就可以Step Over(F10)对Display()函数进行单步调试了.)7、Step Over(F10):此功能可以单步对所在函数单步调试,如果调试的语句是一个调用函数的语句时,Debugger将全速执行所调用的函数,单步(一步)通过所调用的函数,Debugger停该调用语句的下一条语句上.8、Step Out(Shift+F11):此功能将使Debugger切换回全速执行到被调用函数结束,并停在该函数调用语句的下一条语句上.当确定所调用的函数没有问题时可以用这个功能全速执行被调用函数.9、Run to Cursor(Ctrl+F10):此功能将全速执行到包含插入点光标所在的行,可以作为在插入点光标处设置常规断点的一种选择.注意,当光标处不是一个有效的执行语句时此功能将不起作用.10、Go(F5):此功能将全速执行程序直到遇到一个断点或程序结束,或直到程序暂停等待用户输入.注意,此功能最能有效的调试循环,常将断点设置在循环体内,重复的按F5全速执行循环体可以测试循环过程中的产生的变化.Step Into Specific Function:此功能可以可以单步通过程序中的指令,并进入指定的函数调用,此功能对于函数的嵌套层不限.From 《visual C++ 6.0开发工具与调试》1、如何快速地规范代码缩进格式选中所需要规范的代码,按shift+F82、如何在Release状态下进行调试Project->Setting=>ProjectSetting对话框,选择Release状态。
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)。
20、如何调试一个没有源码的exe文件调用的dll
在Visual C++ 6.0中,进入“Project Setting”对话框然后选择Debug标签页。通常Visual Studio默认“executable for debug session”为可执行文件名,但可以将它改成任何你想要的程序。甚至可以指定不同的工作目录以及传递参数到你的程序。这个技术常用来调试Dlls、名字空间扩展、COM对象和其他从某些EXE以及从第三方的EXE中调用的plug-in程序。
3)使用/MD选项编译时,既然所有的运行库都被保留在动态链接库之内,源文件中对“func”的引用,在目标文件里即对“__imp__func”的引用。如果试图使用静态库LIBC.LIB或LIBCMT.LIB进行链接,将在__imp__func上发生LNK2001错误。如果不使用/MD选项编译,在使用MSVCxx.LIB链接时也会发生LNK2001错误。
现在就可以项用MFC AppWizard一样用这个定制的向导。如果不想用了,可以在Visual C++ 6.0安装目录下Common\MSDev98\Template目录中删除该Wizard对应的.awx和.pdb文件。
18、如何解决Visual C++ 6.0不正确连接的问题
情景:明明之前改动了一个文件,却要把整个项目全部重新编译链接一次。刚刚链接好,一运行,又提示重新编译链接一次。
6、如何在非MFC程序中使用ClassWizard
在工程目录下新建一个空的.RC文件,然后加入到工程中就可以了。
7、如何设置断点
按F9在当前光标处增加一个断点和取消一个断点。
另外,在编辑状态下,按Ctrl+B组合键,弹出断点设置对话框。然后单击【Condition…】按钮弹出设置断点条件的对话框进行设置。
15、如何添加Lib文件到当前工程
单击菜单【Project】->【Settings…】弹出“Project Setting”对话框,切换到“Link”标签页,在“Object/library modules”处输入Lib文件名称,不同的Lib之间用空格隔开。
16、如何快速删除项目下的Debug文件夹中临时文件
21、Visual C++ 6.0工程中的项目文件都表示什么。
.opt:工程关于tudio File):资源辅助文件,二进制格式,一般不用去管它。
.clw:ClassWizard信息文件,实际上是INI文件格式,有兴趣可以研究一下。有时候ClassWizard出了问题,手工修改CLW文件可以解决。如果此文件不存在的话,每次用ClassWizard的时候会提示是否重建。
这是因为出现了未来文件(修改时间和创建时间比系统时间晚)的缘故。可以这样处理:找到工程文件夹下的debug目录,将创建和修改时间都比系统时间晚的文件全部删除,然后再重新“Rebuild All”一次。
19、引起LNK2001的常见错误都有哪些
遇到的LNK2001错误主要为:unresolved externalsymbol “symbol”
.hpj(Help Project):是生成帮助文件的工程,用microsoft Help Compiler可以处理。
.mdp(Microsoft DevStudio Project):是旧版本的项目文件,如果要打开此文件的话,会提示你是否转换成新的.dsp格式。
5、Workspace和Project之间是什么样的关系
每个Workspace可以包括几个project,但只有一个处于Active状态,各个project之间可以有依赖关系,在project的Setting…中可以设定,比如那个Active状态的project可以依赖于其他的提供其函数调用的静态库。
如果链接程序不能在所有的库和目标文件内找到所引用的函数、变量或标签,将产生此错误信息。
一般来说,发生错误的原因有两个:一时所引用的函数、变量不存在,拼写不正确或者使用错误;其次可能使用了不同版本的链接库。一下是可能产生LNK2001错误的原因:
1、由于编码错误导致的LNK2001错误
1)不相匹配的程序代码或模块定义(.DEF)文件导致LNK2001。例如,如果在C++源文件内声明了一个变量“var1”,却视图在另一个文件内以变量“var1”访问改变量。
2)如果使用的内联函数是在.cpp文件内定义的,而不是在头文件内定义将导致LNK2001错误。
3)调用函数是如果所用的参数类型头函数声明是的类型不符将会产生LNK2001错误。
4)视图从基类的构造函数或析构函数中调用虚函数时将会导致LNK2001错误。
5)要注意函数和变量的可公用性,只有全局变量、函数时可公用的。静态函数和静态变量具有相同的使用范围限制。当试图从文件外部方位任何没有在该文件内声明的静态变量时将导致编译错误或LNK2001错误。
在工作区的FileView视图中选中对应的项目,单击右键弹出菜单,选择【Clean(selection only)】菜单即可。
17、如何快速生成一个现有工程(除了工程名外),其它完全相同的新工程。
在新建工程的“New”对话框中选择“Custom Appwizard”项,输入新工程的名字,单击【OK】按钮。出现“Custom AppWizard”项,输入新工程的名字,单击【OK】按钮。出现“Custom AppWizard-Step 1 of 2”对话框,选择“An existing Project”项,单击【Next】按钮。出现“Custom AppWizard-Step 2 of 2”对话框,选择现有工程的工程文件名,最后单击【Finish】按钮。编译后就生成一个与现有工程相同但可以重新取名的工程AppWizard。
4)使用/ML选项编译时,如用LIBCMT.LIB链接回在_errno上发生LNK2001错误。
5)当编译调试版的应用程序时,如果采用发行版模态库进行链接也会产生LNK2001错误;同样,使用调试版模态库链接发行版应用程序时也会产生相同的错误。
6)不同版本的库和编译器的混合使用也能产生问题,因为新版的库里可能包含早先的版本没有的符号和说明。
4、ASSERT和VERIFY有什么区别
ASSERT里面的内容在Release版本中不编译,VERIFY里面的内容仍然编译,但不再判断真假。所以后者更安全一点。
例如ASSERT(file.Open(strFileName)),一旦到了Release版本中,这一行就忽略了,file根本就不Open()了,而且没有任何出错的信息。如果用VERIFY()就不会有这个问题。
11、如何清除所有的断点
菜单【Edit】->【Breakpoints…】,打开“Breakpoints”对话框,单击【Remove All】按钮即可。
快捷键是“Ctrl + Shift + F8”。
12、如何在ClassWizard中选择未列出的信息
打开“ClassWizard”对话框,然后切换到“Class Info”页面。改变“Message filter”,如选择“Window”,“Message”页面就会出现Window的信息。
8、在编辑状态下发现成员变量或函数不能显示提示,如何打开显示功能
这似乎是目前这个Visual C++ 6.0版本的一个bug,可按如下步骤使其正常,如再出现,可如法炮制:
(1)关闭Project,(2)删除“工程名.ncb”文件,(3)重新打开工程
9、如何将一个通过ClassWizard生成的类彻底删除
2、由于编译和联机的设置而造成的LNK2001错误
1)如果编译时使用的时/NOD(/NODERAULTLIB)选项,程序所需要的运行库和MFC时将得到又编译器写入目标文件模块,但除非在文件中明确包含这些库名,否则这些库不会北链接进工程文件。这种情况下使用/NOD将导致LNK2001错误
2)如果没有为wWinMainCRTStartup设定程序入口,在使用Unicode和MFC时讲的到“unresolved external on _WinMain@16”的LNK2001错误信息。
13、如何检测程序中的括号是否匹配
把光标移动到需要检测的括号前面,按快捷键“Ctrl + ]”。如果括号匹配正确,光标就跳到匹配的括号处,否则光标不移动,并且机箱喇叭还会发出一声警告。
14、如何查看一个宏(或变量、函数)的定义
把光标移动到要查看的一个宏上,就比如说最常见的DECLARE_MAP_MESSAGE上按一下F12(或右键菜单中的相关菜单),如果没有建立浏览文件,就会出现提示对话框,按【确定】按钮,然后就会跳到该宏(或变量、函数)定义的地方。
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。
.dsp(DevelopStudio Project):项目文件,文本格式,不过不熟悉的不要手工修改。
.dsw(DevelopStudio Workspace):是工作区文件,其特点和.dsp差不多。
.plg:是编译信息文件,编译时的error和warning信息文件(实际上是一个html文件),一般用处不大。在单击菜单【Tool】->【Option】弹出的对话框里面有个选项可以控制这个文件的生成。