Qt调试功能简介(结合案例分析)

Qt调试基本介绍

系统环境

Windows 10
Qt 5.5

调试模式介绍

如图,在项目中设置断点后,按F5或调试按钮后会Qt会自动跳转到以下界面
Qt调试界面
图中各序号的含义如下:

  1. 开始调试;
  2. 停止调试;
  3. 单步跳过按钮;
  4. 单步进入按钮;即进到该函数内部;
  5. 单步跳出按钮;通常与单步进入配合使用;
  6. 重新启动调试;
  7. 显示代码对应的汇编指令;
  8. 调试过程中相应变量的值显示;
  9. 堆栈视图;
  10. 其他视图;
  11. 调试按钮;

结合案例分析

以下结合课上的简易计算器作业案例来分析Qt中调试功能的使用。

1. 程序可以正常启动;

程序正常运行

2. 按下=号后,程序卡死,并显示找不到QStack的路径;

程序卡死
程序卡死2

3. 设置断点并进入调试界面

由于程序卡死时,控制台显示的是与栈有关的错误,故猜测是中缀转后缀的函数中栈的使用出了差错,故在此处设置断点并调试;
设置断点
开始调试

4. 进入中缀转后缀函数体内,并点击单步跳过按钮进行调试

前面数字的读取没有问题,isDigital()函数正常,生产的后缀表达式suffix_e也正常;
正常得到数字
当到运算符时,出现问题;
运算符问题1
运算符问题2
通过箭头所指代码以及控制台的报错情况可以观察到,此处程序利用stack1中的符号进行比较时,报出stack1为空的错误,通过排查发现,原来是我忘了在点击=号按钮对应的槽函数中,先初始化存放运算符的栈stack1,忘了在里面先压入一个用于判断的符号“#”;

/*最终运算*/
void Widget::on_btn_equal_clicked()
{
    QString message;
    message = ui->lineEdit->text();
    //stack1.push('#');   //这里忘了运算符先压入一个#用于做判断


    QString suffix_e;
    suffix_e = change2suffix(message);

    /*不能除以0的alert*/
    int num;
    num = message.indexOf('/');
    if(message.at(num+1)=='0'){
        QMessageBox::warning(this,"操作失败","不能除以0");
        return;
    }

    /*test*/
    qDebug()<<"后缀表达式为"<<suffix_e;
    calculate(suffix_e);
    qDebug()<<"结果为:"<<stack2.top();

    /*返回正确结果到lineedit上*/
    QString result;
    result = QString::number(stack2.top());
    ui->lineEdit->setText(result);

}

总结

Qt中的调试功能与其他IDE,如eclipse,Intellij idea用法类似,熟悉掌握调试功能,能够快速提高开发的效率,因此,掌握好此项技能十分关键。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值