当在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
或其他更改流的语句。这怎么可能?我尝试从头开始重建代码,以消除伪造的链接或类似的问题,但是该错误仍然可以重现。
欢迎任何输入。
最佳答案
在POINT-B,您位于else内部,而if在if内部,而if在内部。一旦完成其他步骤,整个树就无事可做了。
您希望指针跳到哪里?
从技术上讲,它将到达POINT-B后面两行的闭合支架,然后到达POINT-B后面三行的闭合支架,然后到达POINT-B后面八行的闭合支架,最后到达终点的闭合支架。 。所有这些都不执行,因此被跳过。
关于c++ - 在调试期间,我的程序跳至最近的while语句而不会中断或继续[C++],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38155714/