在 gdb 下运行我的 C++/Qt5 程序时,我经历了似乎不可能的事情:
while(totalAvailable > (sizeof(quint32)+sizeof(quint16))){
if(nullptr!=c){
// POINT-A
qDebug()<<rct<<"Courier message with ID "<<octomy_message_type_int<<" was received with name "<<c->getName()<<" and "<<bytesAvailable<<" bytes available";
const quint16 bytesSpent=c->dataReceived(*ds, bytesAvailable);
const int left=bytesAvailable-bytesSpent;
totalAvailable-=bytesSpent;
if(left>=0){
if(left>0){
ds->skipRawData(left);
totalAvailable-=left;
}
else{
// POINT-B
qDebug()<<rct<<"LOLBOB";
}
}
else{
qWarning()<<"BAR";
return;
}
}
else{
qWarning()<<"FOO";
return;
}
}
简而言之,当我从一切开始时//POINT-A
,//POINT-B
一切都如预期的那样,但是一旦我越过//POINT-B
调试器就会跳到程序的第一行(while
语句)。但是代码中没有break
或没有continue
其他改变流程的语句。这怎么可能?
我尝试从头开始重建我的代码以消除虚假链接或类似问题,但该错误仍然可以重现。
欢迎任何意见。