同一段代码,我在加上一句和程序无关的qDebug后居然和之前的运行结果不一样
比如加上之前程序的变量a=1,加上之后a=2;a的最终值是由很多条件(if)决定的,但是qDebug按理来说并不影响程序的判断,
甚至我让这个qDebug有一个if条件而无法执行,但仅仅是写上去而不触发依然会改变程序结果。
试了半天没有头绪,希望有人能帮忙解决,如果需要原代码我再发,代码有点长
尽量简化了下,程序:
int T=0;
int M=0;
class::class(...)
{
Timer_1=new QTimer();//Timer_1和Timer_2是私有成员变量
Timer_2=new QTimer();
connect(Timer_1,&QTimer::timeout,this,&class::a_Timer);
connect(Timer_2,&QTimer::timeout,this,&class::b_Timer);
action(0);
}
void class::action(int n)
{
if(n==60)
{
...
for(int i=0;i<=59;i++)
{
if(...)
{
...
}
}
update();
}
else if(...)
{
if(...)
{
action(++n);
}
else
{
if(...)
{
...
}
update();
if(...)
{
for(...)
{
...
}
}
if(...)
{
...
qDebug()<<...;//文中说的qDebug()在此处,但实际上只要在该函数内,qDebug无论在哪都会影响程序结果
for(...)
{
...
}
if(...)
{
if(...)
{
if(...)
{
T=n;
M=0;
Timer_1->start(500);
}
else
{
if(...)
{
T=n;
M=0;
Timer_1->start(500);
}
else
{
T=n;
M=0;
Timer_1->start(500);
}
}
update();
}
else
{
action(++n);
}
}
else
{
if(...)
{
if(...)
{
if(...)
{
...//加入qDebug前程序进入该处
}
else if(...)
{
...//加入qDebug后程序进入该处
}
else if(...)
{
...
}
else if(...)
{
...
}
}
else
{
...
}
if(...)
{
action(++n);
}
else
{
if(...)
{
action(++n);
}
else
{
T=n;
M=0;
Timer_2->start(500);
}
}
}
else
{
action(++n);
}
}
}
}
}
else
{
action(++n);
}
}
void class::a_Timer()
{
...
for(...)
{
...
}
if(M==5)
{
...
Timer_1->stop();
update();
action(T);
}
else
{
M++;
}
}
void class::b_Timer()
{
...
for(...)
{
...
}
if(...)
{
...
M++;
}
else if(...)
{
...
M++;
}
else if(...)
{
...
M++;
}
else if(...)
{
...
M++;
}
else if(M==5)
{
Timer_2->stop();
action(T);
}
update();
}