Qt程序调试之Q_ASSERT断言(它是一个宏,接受布尔值,当其中的布尔值为真时,便什么也不做)
Qt 一个 什么 其中 断言 接受 assert
2023-09-11 14:19:08 时间
在使用Qt开发大型软件时,难免要调试程序,以确保程序内的运算结果符合我们的预期。在不符合预期结果时,就直接将程序断下,以便我们修改。
这就用到了Qt中的调试断言 - Q_ASSERT。
用一个小例子来说一下 Q_ASSERT 断言的作用吧:
用QtCreator新建一个控制台程序,代码编写如下:
-
-
-
int main(int argc, char *argv[])
-
{
-
QCoreApplication app(argc, argv);
-
-
int a = 4,b = 3;
-
int c = a + b;
-
-
Q_ASSERT(c == 5);
-
-
qDebug()<<"Finish";
-
-
return app.exec();
-
}
注意:这里加上了
Q_ASSERT(c == 5);
一会将看到它的作用。
然后Debug编译,并启动调试,结果程序断下了,看图:
程序被断下,显示 c == 5,在第10行。
这就是Q_ASSERT的神奇之处!它是一个宏,接受布尔值,当其中的布尔值为真时,便什么也不做,当其中的布尔值为假时,便断下。
我们看看Q_ASSERT的定义:
-
Q_CORE_EXPORT void qt_assert(const char *assertion, const char *file, int line);
-
-
-
-
-
-
-
-
再看看qt_noop()是什么:
inline void qt_noop(void) {}
qt_noop就是一个内联空函数,在Release版中将被优化掉。
将刚才的程序代码改成:
Q_ASSERT(c == 7);
并再次调试运行,程序便不会被断下了,因为表达式的值为真,已经符合我们的预期。
顺便说一下,这个例子使用的是VC2013的编译器。
相关文章
- QT-Qt中MediaPlay的使用,播放视频或MP4
- s3c2410上搭建QT/Embedded4.8.5开发环境(七)--命令行开始第一个Qt程序
- QT中实现程序只运行一个实例--应用程序的单例化
- Qt编写的项目作品20-地图综合应用(在线+离线+区域+下载)
- Qt开源作品29-NTP服务器时间同步
- Qt中窗口关闭自动销毁的实现示例
- Qt使用QCustomplot图形库
- Qt数据库SQL关系表格模型QSqlRelationalTableModel
- Qt 事件总结(鼠标、键盘) QMouseEvent、QKeyEvent
- Qt信号与槽自动关联机制
- Qt双缓冲机制与实例
- Qt创建一个自定义按钮
- Qt创建线程的几种方式_创建一个新线程的方法
- qt操作json(QT 教程)
- Qt开发-QT Quick
- Qt 多线程QThread实现方法之一
- 【Qt】在ubuntu上为可执行程序qt创建图标(亲测)
- 【Qt】在ubuntu上安装qt的mqtt模块
- 1、QT基础——Qt概述
- qt之捕获全局事件
- Qt设置TextEdit一直显示最新的数据
- Qt中使用vlc-qt处理音视频
- Qt:使用QCalendarWidget做一个日历
- Qt处理字符串,每两个字符加入一个空格
- QT中文显示乱码解决方式
- qt交叉编译报错::-1: error: The Qt version is invalid: Qt version is not properly installed,please run make
- qt项目搬到另一台电脑出错的解决办法
- QT案例实战1 - 从零开始编写一个OCR工具软件 (5)引入微软OCR