Qt 断言的使用 Q_ASSERT
前言
在寫代碼的時(shí)候,難免會(huì)調(diào)試程序,確保某一個(gè)語(yǔ)句或運(yùn)算結(jié)果符合預(yù)期,如果不是的話就將程序暫停,便于修改,那么這時(shí)候就要用到一個(gè)Qt 中的調(diào)試神器—Q_ASSERT(斷言)。
所謂的斷言,其實(shí)很簡(jiǎn)單,它是一個(gè)宏定義,接受一個(gè)布爾值,當(dāng)判斷的語(yǔ)句為真時(shí),不做任何操作,如果判斷的語(yǔ)句為假,那么在 debug 模式下程序運(yùn)行到該地方會(huì)自動(dòng)斷下,并彈出一個(gè)系統(tǒng)消息框,并且在程序輸出欄會(huì)打印出斷言的位置,可以快捷的進(jìn)入到該位置,便于進(jìn)行修改。
正文
寫一個(gè)很簡(jiǎn)單的調(diào)試程序來(lái)看一下:
Widget::Widget(QWidget *parent): QWidget(parent) {QPushButton * btn = NULL;Q_ASSERT(btn);btn = new QPushButton(this);Q_ASSERT(btn); }這里顯示定義一個(gè) QPushButton 對(duì)象,并初始化為 NULL,然后添加斷言,運(yùn)行程序后自動(dòng)彈出一個(gè)系統(tǒng)錯(cuò)誤框:(我這里是用的 Mac 編譯的)
并且程序輸出日志也有相應(yīng)的提示:
這就是 Q_ASSERT 的神奇之處,在調(diào)試 Qt 程序的時(shí)候非常方便。
來(lái)看看它的源碼:
在QT_NO_DEBUG 模式下,也就是調(diào)試模式下程序會(huì)執(zhí)行qt_assert(),在 Release 模式下執(zhí)行qt_noop()函數(shù),而 qt_noop()函數(shù)是一個(gè)內(nèi)聯(lián)空函數(shù),什么都不做,定義如下:
inline void qt_noop(void) {}建議大家在程序中多使用斷言來(lái)進(jìn)行判斷邏輯,有助于盡早的發(fā)現(xiàn)并解決程序中隱藏的錯(cuò)誤點(diǎn)。
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Qt 断言的使用 Q_ASSERT的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt程序单次启动(QSingleAppl
- 下一篇: Qt之创建并使用共享库