一、位置断点(循环语句中设置断点)
平常使用的断点是普通的位置断点,即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.
只输入变量名称,当变量发生改变时,断点才会启动。这对检测变量何时被修改时很方便。