当在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语句)。但是代码中没有breakcontinue或其他更改流的语句。这怎么可能?

我尝试从头开始重建代码,以消除伪造的链接或类似的问题,但是该错误仍然可以重现。

欢迎任何输入。

最佳答案

在POINT-B,您位于else内部,而if在if内部,而if在内部。一旦完成其他步骤,整个树就无事可做了。

您希望指针跳到哪里?

从技术上讲,它将到达POINT-B后面两行的闭合支架,然后到达POINT-B后面三行的闭合支架,然后到达POINT-B后面八行的闭合支架,最后到达终点的闭合支架。 。所有这些都不执行,因此被跳过。

关于c++ - 在调试期间,我的程序跳至最近的while语句而不会中断或继续[C++],我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38155714/

10-11 22:42
查看更多