为什么在发布qDebug工作建立?(Why does qDebug work in Release

2019-07-04 00:54发布

从MFC的到来,我对待qDebug()很像TRACE()假设它是从版本中删除由预处理器构建(在MFC它的使用做#define TRACE 1 ? (void*) 0 : AfxTrace )。

令我惊讶的,但是, qDebug()在发布执行构建为好。 我该如何改变呢? 而且,为什么会这样,是什么Qt的这个决定背后的开发商的理由?

Answer 1:

qDebug也是预处理器控制的,但它有自己特殊的宏, QT_NO_DEBUG_OUTPUT 。 如果您添加到您的发布版本定义,将被删除。



Answer 2:

QDebug是“调试信息输出流”。 它有它的默认行为女巫打印到标准输出/标准错误取决于消息类型。 您可以通过安装自己的消息处理程序轻松地自定义qDebug()行为。 例如,你可以在运行测试(不编译时间),如果你想打印(1)调试。 看看这个代码示例:

#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输出,如果没有在运行时指定的参数。 你得到的不仅仅是更多的控制“显示调试/不显示调试”

你也可以用完全地禁用QDebug QT_NO_DEBUG_OUTPUT如果你关心与qDebug目前在代码中丢失的性能定义。



Answer 3:

使用此打压的消息在发布模式,但允许他们在调试模式:

CONFIG(release, debug|release):DEFINES += QT_NO_DEBUG_OUTPUT

如果你只使用DEFINES += QT_NO_DEBUG_OUTPUT没有CONFIG(...)的一部分,你会在这两种模式,这通常是不希望禁用它们。



文章来源: Why does qDebug work in Release builds?
标签: c++ qt qdebug