在使用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的編譯器。