在使用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的编译器。