关于Qt中调试功能的介绍)
Qt调试基本介绍
系统环境
Windows 10
Qt 5.5
调试模式介绍
如图,在项目中设置断点后,按F5或调试按钮后会Qt会自动跳转到以下界面
图中各序号的含义如下:
- 开始调试;
- 停止调试;
- 单步跳过按钮;
- 单步进入按钮;即进到该函数内部;
- 单步跳出按钮;通常与单步进入配合使用;
- 重新启动调试;
- 显示代码对应的汇编指令;
- 调试过程中相应变量的值显示;
- 堆栈视图;
- 其他视图;
- 调试按钮;
结合案例分析
以下结合课上的简易计算器作业案例来分析Qt中调试功能的使用。
1. 程序可以正常启动;
2. 按下=号后,程序卡死,并显示找不到QStack的路径;
3. 设置断点并进入调试界面
由于程序卡死时,控制台显示的是与栈有关的错误,故猜测是中缀转后缀的函数中栈的使用出了差错,故在此处设置断点并调试;
4. 进入中缀转后缀函数体内,并点击单步跳过按钮进行调试
前面数字的读取没有问题,isDigital()函数正常,生产的后缀表达式suffix_e也正常;
当到运算符时,出现问题;
通过箭头所指代码以及控制台的报错情况可以观察到,此处程序利用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用法类似,熟悉掌握调试功能,能够快速提高开发的效率,因此,掌握好此项技能十分关键。