与WINDOWS消息有关的断点
注意
:此类断点只能工作在x86 或 Pentium 系统上。
- 选中Breakpoint对话框中的Message标签;
- 在Break At WndProc 编辑框中输入Windows 函数的名称;
- 在Set One Breakpoint From Each Message To Watch下拉列表框中选择对应的消息;
应用断点:如何控制程序的运行
当我们从菜单Build到子菜单Start Debuging
选择Go 程序开始运行在Debug状态下,程序会由于断点而停顿下来后,可以看到有一个小箭头,它指向即将执行的代码。随后,我们就可以按要求来控制程序的运行:其中有四条命令:Step over
, step Into
, Step Out
,Run to Cursor
。
Step over 的功能是运行当前箭头指向的代码(只运行一条代码)。F10
Step Into 的功能是如果当前箭头所指的代码是一个函数的调用,则用Step Into 进入该函数进行单步执行。F11
Step Out 的功能是如当前箭头所指向的代码是在某一函数内,用它使程序运行至函数返回处。Shift F11
Run to Cursor 的功能是使程序运行至光标所指的代码处。Ctrl F10
VC调试器——查勘现场
查看工具的使用
调试过程中最重要的是要观察程序在运行过程中的状态,这样我们才能找出程序的错误之处。这里所说的状态包括各变量的值,寄存中的值,内存中的值,堆栈中的值 ,为此我们需要利用各种工具来帮助我们察看程序的状态。
先看一下这张图,然后再看下面的介绍:
-
弹出式调试信息泡泡(Data Tips Pop_up Information)
当程序在断点停下来后,要观察一个变量或表达式的值的最容易的方法是利用调试信息泡泡。要看一个变量的值,只需在源程序窗口中,将鼠标放到该变量上,你将会看到一个信息泡泡弹出,其中显示出该变量的值。要查看一个表达式的值,先选中该表达式,仍后将鼠标放到选中的表达式上,同样会看到一个信息泡泡弹出以显示该表达式的值。 -
变量窗口(VARIABLE WINDOW)——看程序中的变量
断点处或其附近被访问的变量的当前值。Variables窗口的下部有三个标签:
AUTO: 显示变量和函数返回值;
LOCAL:显示当前函数的局部变量;
THIS: 在一个C++程序中,显示this指针当前指向的对象; -
观察窗口(WATCH WINDOW)——索要变量或表达式的当前值
被调试器直接跟踪的变量和表达式的当前值。在Watch窗口中指定那些你在程序暂停时总想知道他们当前值的那些变量。
在观察窗口中双击Name栏的某一空行,输入你要查看的变量名或表达式,回车后你将会看到对应的值。观察窗口可有多页,分别对应于标签Watch1、Watch2、Watch3。假如你输入的表达式是一个结构或是一个对象,你可以用鼠标点取表达式右边的形如 + ,以进一步观察其中的成员变量的值。 -
快速查看变量对话框(quick watch)在快速查看变量对话框中你可以象利用观察窗口一样来查看变量或表达式的值。但我们还可以利用它来改变运行过程中的变量,具体操作如下:
(1)在Debug 菜单,选择Quick Watch命令,这时屏幕上将会出现Quick Watch 对话框;
(2)在Expression 编辑框中输入变量名,按回车;
(3)在Current Value 格子中将出现变量名及其当前对应的值;
(4)如要改变该变量的值只需双击该变量对应的Name 栏,输入你要改变的值;
(5)如要把该变量加入到观察窗口中,点击Add watch 按钮;
(6)点击Close 按钮返回;
Shift F9 如图:
-
查看内存中的值
一个指定地址的内存堆。
在Memory窗口中,在Address 编辑框中输入你要查看的内存地址,对应内存地址中的值将被显示出来;
-
查看或改变CPU寄存器中的值
(1) 在Registers 窗口中,信息以 Register = Value 的形式显示,其中Register 代表寄存器的名字,Value 代表寄存器中的值;
(2)如果你要修改某一个寄存器的值,用TAB键或鼠标将光标移到你想改变的值的右边,然后输入你想要的值。
l在寄存器中,有一类特殊的寄存器称为标志寄存器,其中有八个标志位:
OV 是溢出标志
UP 是方向标志
EI 是中断使能标志
Sign 是符号标志
Zero 是零标志
Parity是奇偶较验标志
Carry 是进位标志
-
查看Call Stack
在Call Stack窗口中可看到还未返回的调用函数列表,调用栈给出从嵌套函数调用一直到断点位置的执行路径。 -
查看Disassembly窗口
编译代码的汇编语言翻译,补充道屏幕上的源窗口中。“Disassembly”指的是把程序中的机器代码转换为相应的汇编指令。