TBE(⊙﹏⊙) 2021-09-12 12:57 采纳率: 0%
浏览 103

QT:关于qdebug影响程序运行的问题

同一段代码,我在加上一句和程序无关的qDebug后居然和之前的运行结果不一样
比如加上之前程序的变量a=1,加上之后a=2;a的最终值是由很多条件(if)决定的,但是qDebug按理来说并不影响程序的判断,
甚至我让这个qDebug有一个if条件而无法执行,但仅仅是写上去而不触发依然会改变程序结果。
试了半天没有头绪,希望有人能帮忙解决,如果需要原代码我再发,代码有点长
尽量简化了下,程序:

int T=0;
int M=0;

class::class(...)
{
    Timer_1=new QTimer();//Timer_1Timer_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();
}


  • 写回答

2条回答 默认 最新

  • CSDN专家-cpp_learner 2021-09-13 08:46
    关注

    a的最终值是由很多条件(if)决定的
    qDebug()确实不会影响程序的结果,应该是你if语句哪里,改变了a的值。
    你可以写一个类似的简短的代码发出来我们给你看看,解释解释

    评论

报告相同问题?

问题事件

  • 修改了问题 9月13日
  • 修改了问题 9月13日
  • 创建了问题 9月12日

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?