精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

QT核心編程之調試技術 (7)

移動開發
Qt應用程序的調試可以通過DDD進行跟蹤調試和打印各種調試或警告信息。DDD(Data Display Debugger)是使用gdb調試工具的圖形工具,它安裝在Linux操作系統中,使用方法可參考DDD的幫助文檔。

QT核心編程之調試技術是本節要介紹的內容,QT核心編程我們要分幾個部分來介紹,想參考更多內容,請看末尾的編輯推薦進行詳細閱讀,先來看本篇內容。

Qt應用程序的調試可以通過DDD進行跟蹤調試和打印各種調試或警告信息。DDD(Data Display Debugger)是使用gdb調試工具的圖形工具,它安裝在Linux操作系統中,使用方法可參考DDD的幫助文檔。下面說明如何打印各種調試或警告信息

1、命令行參數

當你運行Q應用程序時,你可以指定幾個命令行參數來幫助你調試。這幾個命令行參數說明如下:

-nograb 應用程序不再捕獲鼠標或者鍵盤。當程序在Linux下運行在gdb調試器中時這個選項是默認的。

-dograb 忽略任何隱含的或明顯得-nograb。即使-nograb出現在命令行的***,-dograb也會超過-nograb生效的。

-sync 在X同步模式下運行應用程序。同步模式強迫X服務器立即執行每一個X客戶端的請求,而不使用緩存優化。它使得程序更加容易測試并且通常會更慢。-sync模式只對X11版本的Qt有效。

2、打印警告和調試消息

Qt使用三個全局函數qDebug、qWarning和qFatal來打印警告和調試信息到標準錯誤輸出stderr(它在缺省情況下為顯示屏,也可指定為文件)。 這三個函數說明如下:

qDebug()用來打印調試信息,在調試版本中輸出信息,在發布版本中,函數將不起作用。

qWarning()用來在程序發生錯誤時打印警告信息。

qFatal()用來打印致命錯誤消息并且退出。

這些函數的Qt實現在Unix/X11下把文本打印到標準錯誤輸出(stderr),在Windows下會打印到調試器。你可以通過安裝一個消息處理器,qInstallMsgHandler()來接收這些函數。

因為這3個函數的實現類似,這里只分析函數qDebug,qDebug函數的參數格式與函數printf類似,打印格式化字符串。qDebug函數列出如下(在src/tools/qglobal.cpp中):

  1. static QtMsgHandler handler = 0;  //指向用戶定義的打印輸出函數的句柄  
  2. static const int QT_BUFFER_LENGTH = 8196; //內部buffer長度  
  3.  void qDebug( const char *msg, ... ) //msg格式化的需要打印的字符串  
  4. {  
  5.     char buf[QT_BUFFER_LENGTH];  
  6.     va_list ap;  
  7.     va_start( ap, msg );//使用可變的參數鏈表  
  8. #if defined(QT_VSNPRINTF)   
  9.    QT_VSNPRINTF( buf, QT_BUFFER_LENGTH, msg, ap );  
  10. #else    vsprintf( buf, msg, ap ); //將需要打印的信息放入到buf中  
  11. #endif    va_end( ap );  
  12.     if ( handler ) {    //如果用戶指定的輸出函數存在,使用它來輸出信息  
  13.  (*handler)( QtDebugMsg, buf );   
  14.    } else {  
  15. #if defined(Q_CC_MWERKS)  
  16.         mac_default_handler(buf); //mac系統下的缺省輸出函數  
  17. #elif defined(Q_OS_TEMP)  
  18.  QString fstr( buf );  
  19.  OutputDebugString( (fstr + "\n").ucs2() );  
  20. #else fprintf( stderr, "%s\n", buf );  // 輸出到stderr#endif   
  21.    }  

在src/tools/qglobal.h中定義了QtMsgHandler的函數類型,并將函數qInstallMsgHandler定義為從動態庫中輸出函數名。這兩個定義列出如下:

typedef void (*QtMsgHandler)(QtMsgType, const char *);// Q_EXPORT表示動態庫中輸出這個函數名Q_EXPORT QtMsgHandler qInstallMsgHandler( QtMsgHandler );

函數qInstallMsgHandler被用戶用來定義一個安裝處理函數,并返回以前定義的消息處理函數的指針。在一個應用程序中只能定義一個消息處理函數。恢復以前的消息處理函數時,調用qInstallMsgHandler(0)。函數列出如下(在src/tools/qglobal.cpp中):

  1. QtMsgHandler qInstallMsgHandler( QtMsgHandler h ){   
  2.    QtMsgHandler old = handler;  
  3.     hhandler = h;   
  4.    return old;  

示例:應用qInstallMsgHandler

下面的例子說明如果在一個應用程序中安裝自己的程序運行信息輸出函數。這個例子先定義了信息輸出函數myMessageOutput,然后,在程序的main函數中安裝了信息輸出函數。當這個應用函數運行時,就會使用函數myMessageOutput輸出運行信息。代碼如下:

  1. #include <qapplication.h> 
  2. #include <stdio.h> 
  3. #include <stdlib.h>   
  4. void myMessageOutput( QtMsgType type, const char *msg )//定義信息輸出函數{  
  5.     switch ( type ) {  
  6.   case QtDebugMsg: //輸出調試信息  
  7.       fprintf( stderr, "Debug: %s\n", msg );  
  8.       break;  
  9.   case QtWarningMsg: //輸出警告信息  
  10.       fprintf( stderr, "Warning: %s\n", msg );  
  11.       break;  
  12.   case QtFatalMsg: //輸出致命信息   
  13.      fprintf( stderr, "Fatal: %s\n", msg );  
  14.       abort(); //中斷運行,退出程序   
  15.    }  
  16. }   
  17. int main( int argc, char **argv ){   
  18.    qInstallMsgHandler( myMessageOutput ); //安裝信息輸出函數  
  19.     QApplication a( argc, argv );   
  20.    ...    
  21.   return a.exec();  

還有另外兩個打印對象信息的調試函數QObject::dumpObjectTree()和QObject::dumpObjectInfo()。它們只在程序調試版本下,輸出信息,在發布版本中,這兩個函數不起作用。函數QObject::dumpObjectInfo()打印一個對象信號連接等方面的信息。函數QObject::dumpObjectTree()打印出子對象樹。

3、調試宏

在程序運行中還常使用宏Q_ASSERT和Q_CHECK_PTR來輸出信息,這兩個宏說明如下:

(1)Q_ASSERT(b)中的b是一個布爾表達式,當b是FALSE的時候,打印出類似的警告信息:"ASSERT:‘b’ in file file.cpp (234)"。

(2)Q_CHECK_PTR(p)中的p是一個指針。如果p是空的話,打印出類似的警告信息:"In file file.cpp, line 234: Out of memory"。

宏Q_ASSERT實質上是調用函數qFatal或qWarning輸出信息,列出如下(在src/tools/qglobal.h中):

  1. #if !defined(Q_ASSERT)  
  2. #  if defined(QT_CHECK_STATE)  
  3. #  if defined(QT_FATAL_ASSERT)  
  4. #  define Q_ASSERT(x)   //打印x,文件名,在程序源代碼中的行號  
  5. #   else  
  6. #  define Q_ASSERT(x)    
  7. #    endif  
  8. #  else  
  9. #    define Q_ASSERT(x)  
  10. #  endif#endif  
  11.  

宏Q_CHECK_PTR實質上調用函數qWarning輸出信息,宏定義Q_CHECK_PTR列出如下(在src/tools/qglobal.h中):

  1. #if defined(QT_CHECK_NULL)  
  2. #  define Q_CHECK_PTR(p) (qt_check_pointer#else#  define Q_CHECK_PTR(p)  
  3. #endif Q_EXPORT bool qt_check_pointer( bool c, const char *, int );  

函數qt_check_pointer實現信息輸出操作,函數列出如下(在src/tools/qglobal.cpp中):

  1. bool qt_check_pointer( bool c, const char *n, int l ){    if ( c ) qWarning( "In file %s, line %d: Out of memory", n, l );   
  2.    return TRUE;} 

示例2:運行宏Q_ASSERT和Q_ASSERT

宏Q_ASSERT和Q_ASSERT常用來檢測程序錯誤,下面例子使用了這兩個宏:

  1. char *alloc( int size ){   
  2.    Q_ASSERT( size > 0 ); //如果size > 0表達式不成立,打印警告信息  
  3.     char *p = new char[size];  
  4.     Q_CHECK_PTR( p ); //如果指針p為空,打印警告信息  
  5.     return p;  

Qt基于不同的調試標記打印不同類型的警告信息。Qt使用了下面的宏定義說明了不同的調試標記(在src/tools/qglobal.h中):

QT_CHECK_STATE:檢測一致的/期望的對象狀態

QT_CHECK_RANGE:檢測變量范圍錯誤

QT_CHECK_NULL:檢測危險的空指針

QT_CHECK_MATH:檢測危險的數學,比如被0除

QT_NO_CHECK:關閉所有的QT_CHECK_...標記

QT_DEBUG:使調試代碼生效

QT_NO_DEBUG:關閉QT_DEBUG標記

默認情況下,QT_DEBUG和所有的QT_CHECK標記都是打開的。如果要關閉QT_DEBUG,請定義QT_NO_DEBUG。如果要關閉QT_CHECK標記,請定義QT_NO_CHECK。

示例3: 打印不同類型的警告信息

下面的例子根據不同的宏定義打印不同類型的警告信息。代碼如下:

  1. void f( char *p, int i ){  
  2. #if defined(QT_CHECK_NULL) //檢測危險的空指針  
  3.       if ( p == 0 )          qWarning( "f: Null pointer not allowed" );  
  4. #endif #if defined(QT_CHECK_RANGE) //檢測變量范圍錯誤   
  5.      if ( i < 0 )  
  6.           qWarning( "f: The index cannot be negative" );  
  7. #endif} 

小結:QT核心編程之調試技術的內容介紹完了,需要本文能對你有所幫助,需要更多資料的話,請參考編輯推薦。

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-06-22 10:12:08

Qt 線程

2011-06-22 09:40:32

QT 模板庫 模板

2011-06-22 09:58:04

QT 集合類

2011-06-22 10:39:56

QT 會話管理

2011-06-22 10:27:32

QT 鍵盤 焦點

2011-06-22 10:20:11

QT 鼠標 拖放

2011-06-17 15:25:18

Qt

2016-01-25 09:53:22

2011-06-15 16:36:27

Qt 圖形

2012-10-29 13:25:54

JavaScriptJSjQuery

2015-04-24 09:48:59

TCPsocketsocket編程

2011-07-21 10:17:53

java

2017-02-07 18:34:16

Linux編程PING

2022-02-14 15:07:48

進程FileChanne線程

2011-06-24 15:30:22

QT 皮膚 QSS

2011-06-10 12:44:09

2011-06-13 16:51:19

Qt Socket

2011-06-22 16:08:40

Qt 多線程 事件循環

2011-04-07 10:50:47

數據庫編程注釋規范

2012-03-09 10:44:11

Java
點贊
收藏

51CTO技術棧公眾號

美女脱光内衣内裤| 日韩视频 中文字幕| 日韩精品在线一区二区三区| 精品国产网站| 91精品国产综合久久国产大片| 亚洲区成人777777精品| 天堂91在线| 理论片日本一区| 久久久久久国产精品| 粉嫩av蜜桃av蜜臀av| 国产精品一区免费在线| 婷婷中文字幕综合| 黄色a级在线观看| 午夜视频福利在线观看| 久久av老司机精品网站导航| 久久久久久久一区二区| 人成免费在线视频| 日韩av网站在线免费观看| 欧美美女喷水视频| 九九九九免费视频| 在线午夜影院| 国产精品天干天干在观线| 国内精品国语自产拍在线观看| 中文字幕第一页在线播放| 一区在线免费| 精品国产一区二区三区四区在线观看 | 六月婷婷色综合| 国外成人在线视频| 性色av无码久久一区二区三区| 日韩精品免费一区二区三区竹菊| 欧美精品自拍偷拍| 爱情岛论坛vip永久入口| 啦啦啦中文在线观看日本| 国产精品亲子伦对白| 欧美精品成人一区二区在线观看| 精品人妻一区二区三区蜜桃| 美女性感视频久久| 国产aⅴ夜夜欢一区二区三区| 久久免费黄色网址| 亚洲国产日韩欧美在线| 色爱av美腿丝袜综合粉嫩av| 粉嫩av蜜桃av蜜臀av| 美腿丝袜亚洲图片| 日韩欧美国产系列| 超碰在线资源站| 国产精品第一国产精品| 91成人免费电影| 成人一级片网站| 九色porny丨入口在线| 亚洲一区二区综合| 欧洲精品在线播放| 视频在线这里都是精品| 亚洲欧美国产三级| 国产日韩欧美大片| а√天堂官网中文在线| 亚洲人成亚洲人成在线观看图片 | 自拍视频在线播放| 国产日韩一级二级三级| 欧美系列一区| 国产日本在线| 亚洲国产岛国毛片在线| 西游记1978| 最近高清中文在线字幕在线观看| 国产欧美日韩精品在线| 视频一区三区| 91在线视频| 中文字幕一区视频| 午夜久久久久久久久久久| 国产在线观看a视频| 亚洲欧美日韩国产成人精品影院| 亚洲综合首页| 成人福利在线观看视频| 一区二区在线观看av| 久久男人资源站| av手机免费在线观看| 精品久久久久久久久国产字幕 | 精品制服美女久久| 成人啪啪免费看| 午夜精品久久久久久久91蜜桃| 高清视频一区二区| 国产综合第一页| 噜噜噜在线观看播放视频| 久久综合狠狠综合| 亚洲一区二区三区免费看| 黄网站视频在线观看| 玉足女爽爽91| www.com毛片| 亚洲四虎影院| 国产精品原创视频| 国产精选久久| 亚洲国产高清高潮精品美女| 人妻丰满熟妇aⅴ无码| 欧美熟乱15p| 欧美国产中文字幕| 日韩中文字幕高清| 国产成人精品一区二区三区网站观看| 久久国产精品一区二区三区| caoporn国产精品免费视频| 一区二区三区在线看| 男人天堂999| 视频精品一区二区三区| 亚洲九九九在线观看| 婷婷久久综合网| 国产精品外国| 亚洲最大成人网色| 国产香蕉在线| 亚洲国产精品欧美一二99| 久久久久国产精品熟女影院| 粉嫩一区二区三区四区公司1| 国产午夜精品美女视频明星a级| 青娱乐国产在线视频| 日韩1区2区日韩1区2区| 国产一级二级三级精品| 国产在线69| 欧美这里有精品| 中文在线观看免费视频| 久久美女精品| 久久成人免费视频| 久久久蜜桃一区二区| 国产乱子轮精品视频| 免费亚洲精品视频| 亚洲成a人v欧美综合天堂麻豆| 亚洲一区在线播放| 成 人 黄 色 小说网站 s色| 欧美三级午夜理伦三级在线观看 | 人妻丰满熟妇av无码区hd| 国产亚洲欧美色| 国产成人亚洲综合无码| 日日夜夜一区| 国产视频精品在线| 久久久久久久九九九九| 另类小说欧美激情| 麻豆av一区二区三区| 自拍亚洲图区| 91久久精品一区二区二区| 国产精品无码专区| 欧美成熟视频| 成人a级免费视频| 久久久久国产精品嫩草影院| 亚洲一区二区在线视频| 九色porny自拍| 成人综合久久| 国产91在线高潮白浆在线观看| 性欧美8khd高清极品| 中文字幕中文字幕中文字幕亚洲无线| 国产深夜男女无套内射| 在这里有精品| 欧美超级免费视 在线| 中文字幕91爱爱| 99国产精品国产精品久久| 国内精品在线观看视频| 永久免费精品视频| 欧美高清自拍一区| 国产三级按摩推拿按摩| 国产精品第五页| 日日橹狠狠爱欧美超碰| 欧洲亚洲成人| 91精品国产色综合久久不卡98| 国产丝袜视频在线观看| 自拍偷拍亚洲欧美日韩| 亚洲精品自拍网| 精品视频日韩| 国产日韩欧美电影在线观看| 丁香在线视频| 欧美三级中文字| 国产又粗又猛又爽又黄的视频四季 | 成人黄色av网站在线| 国产在线视频在线| 亚洲综合网站| 久久免费福利视频| 特黄视频在线观看| 亚洲成av人片一区二区梦乃| 中国黄色a级片| 免费日韩av片| 日韩免费电影一区二区| 日韩一区精品| 中文字幕亚洲图片| 国产免费叼嘿网站免费| 一区二区三区资源| 蜜臀av粉嫩av懂色av| 日韩一级欧洲| 免费在线国产精品| 精品3atv在线视频| 久久综合久久八八| 丰满人妻av一区二区三区| 亚欧色一区w666天堂| 催眠调教后宫乱淫校园| 亚洲专区一区| 亚洲第一导航| 香蕉大人久久国产成人av| 高清欧美一区二区三区| 亚洲欧美色视频| 在线免费观看成人短视频| 日本午夜在线观看| 狠狠色狠狠色综合| 久久久亚洲精品无码| 欧美理论视频| 亚洲影院色无极综合| 国产深夜视频在线观看| 亚洲精品一区二区网址| 精人妻无码一区二区三区| 亚洲激情图片qvod| 亚洲天堂久久新| 国内精品久久久久影院一蜜桃| 欧日韩免费视频| 欧美亚洲国产激情| 久久大片网站| 亚洲精品aa| 国产91精品青草社区| av亚洲在线| 亚洲国产精品va在线| 在线观看免费视频一区| 午夜精品久久久久久久久| 天天操天天舔天天射| 成人涩涩免费视频| 国产日韩欧美久久| 红桃视频国产一区| 一区二区三区四区免费视频| 韩国精品福利一区二区三区| 国产免费一区视频观看免费| av中文在线资源库| 久久亚洲国产精品| 思思99re6国产在线播放| 亚洲国产精品高清久久久| 亚洲在线免费观看视频| 狠狠色狠狠色综合日日五| 小泽玛利亚一区二区免费| 91亚洲精品久久久蜜桃| 精品国产午夜福利在线观看| 丝袜诱惑制服诱惑色一区在线观看 | 亚洲国产网址| 国产精品麻豆免费版| 欧美激情不卡| 国产日韩欧美影视| 大胆人体一区| 97精品伊人久久久大香线蕉 | 日韩有码在线播放| 天天综合永久入口| 日韩午夜小视频| 亚洲视频中文字幕在线观看| 日韩欧美亚洲国产一区| 亚洲国产精品成人无久久精品| 国产三级欧美三级日产三级99| 免费在线观看你懂的| 97se亚洲国产综合自在线观| 一起草最新网址| 久久精品国产成人一区二区三区 | 免费试看一区| 婷婷国产精品| 国产一级二级三级精品| julia中文字幕一区二区99在线| 成人免费大片黄在线播放| 日本精品网站| 日韩av片永久免费网站| 欧美日韩电影免费看| 欧美一级高清免费| 波多野一区二区| 亚州av一区二区| 2018av在线| 日韩免费中文字幕| 成年美女黄网站色大片不卡| 91高潮精品免费porn| 国产黄大片在线观看| 久久久久久久久久国产| 嗯啊主人调教在线播放视频 | 自拍视频一区二区三区| 久久中文字幕av| 亚洲一区二区三区午夜| 91嫩草亚洲精品| 亚洲午夜精品久久| 911精品美国片911久久久| 黑人巨大国产9丨视频| 欧美在线播放| 福利视频一区二区三区四区| 狠狠色狠狠色综合日日tαg | 久久久一二三| 日本人视频jizz页码69| 蜜桃91丨九色丨蝌蚪91桃色| 在线观看你懂的视频| 9l国产精品久久久久麻豆| 波多野结衣影院| 久久久久国产成人精品亚洲午夜| 阿v天堂2014| 亚洲最新视频在线观看| 日本一二三区不卡| 日本韩国欧美在线| 亚洲系列在线观看| 日韩美女在线视频| 久青青在线观看视频国产| 深夜福利91大全| 色yeye免费人成网站在线观看| 午夜精品久久久久久99热| 蜜桃视频在线网站| 成人性生交大片免费观看嘿嘿视频| 精品一区二区三区中文字幕在线| 国产精品久久久久久久小唯西川| 香蕉一区二区| 懂色av粉嫩av蜜臀av| 巨乳诱惑日韩免费av| 99九九99九九九99九他书对| av在线播放一区二区三区| 亚洲а∨天堂久久精品2021| 最新国产精品久久精品| 毛片在线免费视频| 欧美日韩成人一区| www.亚洲欧美| 亚洲无亚洲人成网站77777| 精品日韩av| 国产精品第100页| 免费精品一区二区三区在线观看| 久久影院理伦片| 亚洲精品国产偷自在线观看| 久久综合色视频| 捆绑调教一区二区三区| 香蕉视频黄色在线观看| 亚洲免费观看高清完整| 中文字幕在线播| 精品国产伦理网| 黄色免费网站在线| 欧洲美女免费图片一区| 精品午夜视频| 新呦u视频一区二区| 免播放器亚洲| 台湾佬美性中文| 中文幕一区二区三区久久蜜桃| 久久精品亚洲无码| 欧美日韩国产首页| 国产精品99999| 97久久久免费福利网址| 国产成年精品| 亚洲国产精品视频一区| 美女久久一区| 国产性生活毛片| 亚洲美女区一区| 依依成人在线视频| 国产亚洲欧美视频| 欧亚av在线| 精品乱码一区二区三区| 综合久久一区| 中文字幕在线观看视频www| 中文字幕二三区不卡| 亚洲精品男人的天堂| 精品99999| gogo在线观看| 亚洲综合国产精品| 91精品国产自产在线观看永久∴| 福利在线一区二区三区| xnxx国产精品| 91视频久久久| 亚洲精品资源美女情侣酒店| 丁香花在线电影| 成人激情视频网| 亚洲激情久久| 免费观看黄网站| 亚洲青青青在线视频| 一级片免费网站| 久久精品视频在线观看| 伊人久久综合网另类网站| 亚洲一区二区三区精品视频| 日韩电影在线看| 蜜桃av免费在线观看| 欧美性大战久久| 成年人视频网站在线| 91精品国产91| 国产一区网站| 最新中文字幕免费视频| 国产日产欧美一区二区视频| 精品无码一区二区三区的天堂| 国产亚洲福利一区| 日韩色性视频| 一区二区精品在线| 韩国一区二区在线观看| 日韩激情综合网| 69p69国产精品| 亚洲精品白浆| 国产亚洲精品自在久久| 亚洲一区二区伦理| 任你操精品视频| 欧美一区二区视频观看视频| 爱情岛论坛亚洲品质自拍视频网站| 99热在线播放| 国产日韩专区| 国产精品美女高潮无套| 亚洲精品免费观看| 亚洲一区亚洲二区| 中文字幕日韩一区二区不卡 | 日本成人三级电影网站| 国模大尺度一区二区三区| 黄色一级视频免费| 亚洲精品国产精品乱码不99按摩| 丰乳肥臀在线| 亚洲一区二区不卡视频| 国产成人综合在线观看| 精品久久免费视频| 日韩成人中文字幕在线观看| 欧美黄色a视频| 精品久久一二三| 国产精品丝袜一区| 天堂中文在线观看视频| 国产精品色午夜在线观看|