c++ - 在调试期间,我的程序跳转到最近的 while 语句而不中断或继续 [C++]

标签 c++ while-loop gdb qt5 program-flow

在 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 中。一旦完成了其他工作,整棵树就没有什么可做的了。

你希望指针跳转到哪里??

从技术上讲,它将转到 POINT-B 后两行的右括号,然后转到 POINT-B 后三行的右括号,然后转到 POINT-B 后八行的右括号,然后转到 POINT-B 后的右括号最后。所有这些都不做任何事情,因此被跳过。

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

相关文章:

c++ - 为什么 istream 类的 operator<< 在 C++ 中有返回/参数类型的引用?

c - 在 while 循环中一起使用 isalpha 和 toupper 给出 "index out of bounds"

Php mysql 结果进入无限循环

c++ - 调试从 Python 调用的 C++ 代码中的段错误

c - 优胜美地 : SIGBUS error when calling function at gdb command line 上的 gdb

c++ - OpenBLAS 仅为一个例程设置线程数

c++ - VS2012 静态代码分析器在取消分配内存 vector 时给出误报

c++ - 这个 Singleton 实现有什么问题?

php - Foreach 和 while 循环打印相同的值

c - 查看堆栈上存储的数据