Qt 断言的使用 Q_ASSERT
生活随笔
收集整理的這篇文章主要介紹了
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 程序的時候非常方便。
來看看它的源碼:
在QT_NO_DEBUG 模式下,也就是調試模式下程序會執行qt_assert(),在 Release 模式下執行qt_noop()函數,而 qt_noop()函數是一個內聯空函數,什么都不做,定義如下:
inline void qt_noop(void) {}建議大家在程序中多使用斷言來進行判斷邏輯,有助于盡早的發現并解決程序中隱藏的錯誤點。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Qt 断言的使用 Q_ASSERT的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt程序单次启动(QSingleAppl
- 下一篇: C++拷贝构造函数(深拷贝与浅拷贝)