來自MFC,我認爲qDebug()
非常像TRACE()
,假設它從預處理器的發佈版本中刪除(在MFC中它使用#define TRACE 1 ? (void*) 0 : AfxTrace
完成)。爲什麼qDebug在Release版本中工作?
然而,令我驚訝的是,qDebug()
也在Release版本中執行。我該如何改變這一點?而且,爲什麼這樣呢,Qt的開發者在這個決定背後的推理是什麼?
來自MFC,我認爲qDebug()
非常像TRACE()
,假設它從預處理器的發佈版本中刪除(在MFC中它使用#define TRACE 1 ? (void*) 0 : AfxTrace
完成)。爲什麼qDebug在Release版本中工作?
然而,令我驚訝的是,qDebug()
也在Release版本中執行。我該如何改變這一點?而且,爲什麼這樣呢,Qt的開發者在這個決定背後的推理是什麼?
qDebug
也是預處理器控制的,但它有它自己的特殊宏,QT_NO_DEBUG_OUTPUT
。如果您將其添加到您的發佈版本定義,它將被刪除。
QDebug是「用於調試信息的輸出流」。它有默認行爲打印到stdout/stderr取決於消息類型。您可以通過安裝自己的消息處理程序輕鬆地自定義qDebug()行爲。例如,如果要打印調試,則可以在運行時(不是編譯時)測試。看看這個代碼示例:
#include <QDebug>
void noMessageOutput(QtMsgType type, const char *msg)
{
Q_UNUSED(type);
Q_UNUSED(msg);
}
int main(int argc, char * argv[])
{
QApplication app(argc, argv);
if (! app.arguments().contains(QLatin1String("--with-debug")) {
qInstallMsgHandler(noMessageOutput);
}
}
這將隱藏整個qDebug輸出,如果沒有在運行時指定的參數。你可以獲得更多的控制,而不僅僅是「show debug/do not show debug」
你也可以通過QT_NO_DEBUG_OUTPUT
完全禁用QDebug定義你是否擔心代碼中出現的qDebug性能下降。
使用此打壓的消息在發佈模式,但允許他們在調試模式:
CONFIG(release, debug|release):DEFINES += QT_NO_DEBUG_OUTPUT
如果你只使用DEFINES += QT_NO_DEBUG_OUTPUT
沒有CONFIG(...)
部分,你會在這兩種模式,這通常是不希望禁用它們。
有用的鏈接:http://qt-project.org/forums/viewthread/25512和http://supportforums.blackberry.com/t5/Native-Development/Dealing-with-qDebug-in-release-candidate/ td-p/2078713 – x29a