现在的位置: 首页 > 综合 > 正文

循环语句的断点调试,位置断点,数据断点(1)

2014年01月30日 ⁄ 综合 ⁄ 共 776字 ⁄ 字号 评论关闭

一、位置断点(循环语句中设置断点)

平常使用的断点是普通的位置断点,即F9单步执行。但当遇到循环体需要循环上百上千次时,怎么办?

void CForDebugDlg::OnOK() 	
{
	for (int i = 0; i < 1000; i++)	//A
	{
		int k = i * 10 - 2;	//B
		SendTo(k);		//C
		int tmp = DoSome(i);	//D
		int j = i / tmp;	//E
	}
}      

执行时发现该程序在E行崩溃,也不确定循环执行了多少遍才会导致tmp=0从而崩溃。显然单步执行在这里行不通。

在位置断点(Location Break)中设置一些条件值就可以非常方便的定位到出错点之前几步。

1. Ctrl+B打开断点设置框。

2. 选择D行所在的断点,然后点击condition按钮,在最下面的“Enter the number of times to skip before stopping”编辑框输入一个打算循环的次数<=1000,这里写1000。

3. F5重新运行程序,程序中断。Ctrl+B打开断点框,发现此断点后跟随一串说明:…487 times remaining。意思是还剩下487次没有执行,即执行到513(1000-487)次时出现错误。因此停止程序,按照第2步所说方法更改D行断点的skip次数,将1000改为513。

4. 再次重新运行程序,程序执行到第513次循环时,自动停止在D行断点处。这时,可以进入DoSome(i)函数内跟踪返回值tmp=0的原因。

其他方法:

在断点设置框中,点击condition按钮后,在"Enter the expression to be evaluated:"下面:

1.
输入一些条件,当条件满足时,断点才有效。
例如,设置i==513,循环执行到i=513时,D行断点有效调试并停在此处。

2.
只输入变量名称,当变量发生改变时,断点才会启动。
这对检测变量何时被修改时很方便。

抱歉!评论已关闭.