Qt 断言的使用 Q_ASSERT
前言
在写代码的时候,难免会调试程序,确保某一个语句或运算结果符合预期,如果不是的话就将程序暂停,便于修改,那么这时候就要用到一个Qt 中的调试神器—Q_ASSERT(断言)。
所谓的断言,其实很简单,它是一个宏定义,接受一个布尔值,当判断的语句为真时,不做任何操作,如果判断的语句为假,那么在 debug 模式下程序运行到该地方会自动断下,并弹出一个系统消息框,并且在程序输出栏会打印出断言的位置,可以快捷的进入到该位置,便于进行修改。
正文
写一个很简单的调试程序来看一下:
Widget::Widget(QWidget *parent): QWidget(parent)
{QPushButton * btn = NULL;Q_ASSERT(btn);btn = new QPushButton(this);Q_ASSERT(btn);
}
这里显示定义一个 QPushButton 对象,并初始化为 NULL,然后添加断言,运行程序后自动弹出一个系统错误框:(我这里是用的 Mac 编译的)
并且程序输出日志也有相应的提示:
这就是 Q_ASSERT 的神奇之处,在调试 Qt 程序的时候非常方便。
来看看它的源码:
Q_CORE_EXPORT void qt_assert(const char *assertion, const char *file, int line); #if !defined(Q_ASSERT)
# ifndef QT_NO_DEBUG
# define Q_ASSERT(cond) ((!(cond)) ? qt_assert(#cond,__FILE__,__LINE__) : qt_noop())
# else
# define Q_ASSERT(cond) qt_noop()
# endif
#endif
在QT_NO_DEBUG 模式下,也就是调试模式下程序会执行qt_assert(),在 Release 模式下执行qt_noop()函数,而 qt_noop()函数是一个内联空函数,什么都不做,定义如下:
inline void qt_noop(void) {}
建议大家在程序中多使用断言来进行判断逻辑,有助于尽早的发现并解决程序中隐藏的错误点。
Qt 断言的使用 Q_ASSERT相关推荐
- Qt程序调试之Q_ASSERT断言
在使用Qt开发大型软件时,难免要调试程序,以确保程序内的运算结果符合我们的预期.在不符合预期结果时,就直接将程序断下,以便我们修改. 这就用到了Qt中的调试断言 - Q_ASSERT. 用一个小例子来 ...
- QT实现可移动和改变尺寸的无边框窗口
2019独角兽企业重金招聘Python工程师标准>>> 实现QT无边框窗口的拖动,尺寸改变.需要的时候从该类继承,派生类需要定义为QWidget. 头文件: #ifndef SIZE ...
- 【Qt】断言Q_ASSERT的使用
半路出家,总是有太多东西需要学习,有太多问题需要解决. --[Y忍冬草] 最近在写完项目软件后,虽然对于测试出的问题都很好的解决,但是总纠结于发布后出现问题怎么办?就查看了一些关于断言和异常处理的方法 ...
- Qt文档阅读笔记-Q_ASSERT的另外一总用法(大佬用法)
刚刚看到文档里面有个Q_ASSERT,好玩的用法! 普通人的用法如下: #include <QApplication> #include <QGraphicsLineItem> ...
- 【精华】掌握Qt调试技术
前言 软件调试,是开发过程中必备的技能.通过调试可以发现软件存在的bug,即缺陷.调试可以帮助开发者窥探到软件运行过程中的详细状态,从而为消除bug提供重要信息.调试的英文是debug,前面的de在英 ...
- Qt - QTChart绘制图表
文章目录 前言 准备工作 安装QChart组件 项目配置 主要组成部分 QChartView QChart 序列 坐标轴 图例 静态图表 动态图表 场景一 思路 效果 核心实现 场景二 思路 效果 核 ...
- Qt数据可视化(QBoxPlotSeries盒须图)
目录 创建盒须图类 设置盒须图数据 计算中间值 源代码 widget.cpp 实现效果如下: QBoxPlotSeries类以方框和胡须图表的形式显示数据. "长方体绘图"系列充当 ...
- 代码工程/Qt 开发环境提升(2)
文章目录 概述 编译问题 macro name is a reserved identifier 运行问题 单步调试-结构体局部变量 Qt 定位内存起始地址失败 查看U8*的变量 编辑问题 无法使用高 ...
- 11.QT事件机制源码时序分析(下)
接上一篇文章https://blog.csdn.net/Master_Cui/article/details/109182406,本文继续解析QCoreApplication::sendEvent和Q ...
最新文章
- NSArray和NSMutableArray
- practical rendering and computation with dx11 ebook
- 突发:ORA-12541:TNS:无监听程序 的调查解决方法(监听日志已满导致)
- python 爬虫 博客园_Python爬虫爬取博客园作业
- 乘法口诀表编程php视频,PHP学习之制作乘法口诀表
- 【Python】PyCharm新建PythonPackage呈现出普通Dictionary的样式的解决方法
- 【bzoj2929】[Poi1999]洞穴攀行 网络流最大流
- lubridate | 日期类型数据的转换
- SpringBoot之日志记录 SLF4J(H)
- 编写bat脚本指定jdk路径运行jar包
- 互联网计算机技术方面的入门书籍有哪些推荐?
- 【TDA4系列】CCS 最新版本安装与教程地址
- 关联规则挖掘算法之Apriori算法
- Yandex安装插件实现百度网盘不需要会员就能倍速播放
- .mp4视频测试地址
- java开学考试感想及代码
- TableauBDP,哪个才是最适合中国用户的数据可视化分析工具?
- 关于ssm框架的外文文献及译文_学术小白应该如何高效阅读文献?
- el-upload 仅上传一张图片
- Win10 使用黑屏重置键 解决 黑屏问题