本文转载:http://blog.csdn.net/changqiang08/article/details/7642387
vc6.0程序调试技术总结
学c语言,一直编写的都是小程序。但是在写单片机程序时,会出现一些问题,就需要程序的调试技术。在图书馆借了一本书《c语言程序设计实验教程》(西工大出版社),再结合网上一些网友的博文,在这里对vc6.0的程序调试技术简单梳理一下。
现代程序调试的方法主要有两种:单步法、断点法。
一、单步法
a、step into F11 单步调试
遇到函数时,会进入到函数内部进行更深入的单步调试,若是系统库函数代码。则可能进入指令级而非源代码级的单步调试。
b、step over F10 单步调试
遇到函数时。把函数当做 “一步” 来完成调试,如遇到已调试正确的函数,或系统库函数就可以直接用step over
c、step out F11 + shift 退出
d、run to cursor F10 + ctrl 多步调试/快步调试
step into和step over的区别是step over一直下一步,step into 在step over的基础上,遇到函数会进入到函数内部,以便更深入的单步调试。
run to cursor可进行多步调试,从当前程序调试运行的程序行运行到光标所在程序行。
二、断点法
基本思想:在程序中,设置若干断点,在执行过程中程序连续运行下去,遇到断点程序或断点条件时停止,在停下来的地方进行单步调试。
a、insert breakpoint F9 断点设置
b、remove breakpoint F9 断点删除
c、location 条件断点
为断点设置一个条件,条件可为表达式,当表达式发生改变时,调试结束。
d、data 数据断点
为断点设置一个表达式(运算符+全局变量),当表达式的值发生改变时,数据断点就会到达,调试结束。
e、message 消息断点
windows 程序对windows消息进行截获(截获方式:窗口消息处理函数和特定信息中断),当输入消息处理函数的名字,当每次有消息被这个函数处理时,断点就会到达。
(1)、条件断点
1、按F9,设置断点位置。
2、按快捷键“alt+ F9”, 或通过菜单“edit/breakpoints”打开“breakpoints”对话框,选择设置的断点,如下图
3、条件断点的表达式:i==0&&j==4
4、单击OK。现在我们开始调试程序,按F5, VC会弹出一个提示对话框,提示在你设置的条件断点的中断位置:
(2)数据断点
1、第1步和条件断点一样
2、
3、
(3)消息断点
略
三、观察法
通过单步或者断点,可以使使指定的程序停下来,vc提供多种数据观察方法来了解程序运行期间的各种信息,从而判断错误的原因。
(1)查看(watch)
vc支持查看变量、表达式和内存的值,当断点到达时,将光标移动到该变量和表达式上时停留片刻,就可以看到变量和表达式的值。
(2)定制查看(Quick Watch)
vc提供一种被称为watch的机制,查看变量、表达式的值,在断点状态下,在变量上单击右键,选择“Quick Watch ”,弹出一个“Quick Watch ”对话框,显示这个变量的值。表达式亦然,但这个表达式不能有副作用,“++”操作符会改变变量的值。
单吉Debug工具条上的“ Watch ”按钮,就出现一个“ Watch ”视图,在该视图中输入变量和表达式,就可以查看变量、表达式的值。
(3)内存查看(memory)
由于指针指向的数组,“ Watch ”只能查看第一个元素的值,为了显示其他元素,可以使用memory功能。单吉Debug工具条上的“memory ”按钮,就出现一个“memory ”视图,在该视图中输入地址和数组名,就可以显示该地址指向的内存的内容。
(4)变量查看(varibles)
(5)寄存器查看(Registers)
单吉Debug工具条上的“ Registers ”按钮,就出现一个“ Registers ”视图,显示当前所有寄存器的值。
(6)调用堆栈(Call Stack )
调用堆栈反映了当前断点处函数是被哪些函数按照什么顺序调用的。单吉Debug工具条上的“ Call Stack ”按钮,就出现一个“Call Stack ”对话框,在该对话框显示了一个调用序列,最上面的是当前函数,往下依次是调用函数的上级函数。单击对应的函数,就可以跳转到对应的函数中去。
(7)反汇编视图(Disassembly)。
另:先下断点,然后按F5或者点击Debug->Start Debuging程序停在断点处。
然后点击按钮 Debug->Windows->DisAssambly
可以找到各个查看窗口