引子,在调试的时候,遇到一个情况,在原先断点的地方查看的信息不对,
因此修改了一下,结果程序跑着,没有命中断点。
下面用一个例子来分析一下原因。
int fun_a()
{
int ret = 0;
//do something
if(var)
{
ret = 1;
return ret;
}
//do something
//设置断点的地方
//...
return ret;
}
int fun_b()
{
int i = 0;
while(true)
{
for(i = 0; i < UPBOUND; i++)
if(fun_a())
{
continue;
}
}
}
原来在函数fun_a()设置断点的地方可以断住,
但修改了一下代码后,始终没有在断点的地方停止。
是因为修改了代码,使得fun_a()里的var为true,
跑步到断点的地方去。
外面调用的地方是一个循环,不停调用fun_a(),
虽然程序没有停,但程序始终执行不到断点的地方,
不是设置的断点不奏效,而是代码逻辑不会执行到断点处。
当断点不奏效时,不一定是断点设置失效,也有可能是代码逻辑不能跑动下断点的地方。