从MFC的到来,我对待qDebug()
很像TRACE()
假设它是从版本中删除由预处理器构建(在MFC它的使用做#define TRACE 1 ? (void*) 0 : AfxTrace
)。
令我惊讶的,但是, qDebug()
在发布执行构建为好。 我该如何改变呢? 而且,为什么会这样,是什么Qt的这个决定背后的开发商的理由?
从MFC的到来,我对待qDebug()
很像TRACE()
假设它是从版本中删除由预处理器构建(在MFC它的使用做#define TRACE 1 ? (void*) 0 : AfxTrace
)。
令我惊讶的,但是, qDebug()
在发布执行构建为好。 我该如何改变呢? 而且,为什么会这样,是什么Qt的这个决定背后的开发商的理由?
qDebug
也是预处理器控制的,但它有自己特殊的宏, QT_NO_DEBUG_OUTPUT
。 如果您添加到您的发布版本定义,将被删除。
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目前在代码中丢失的性能定义。
使用此打压的消息在发布模式,但允许他们在调试模式:
CONFIG(release, debug|release):DEFINES += QT_NO_DEBUG_OUTPUT
如果你只使用DEFINES += QT_NO_DEBUG_OUTPUT
没有CONFIG(...)
的一部分,你会在这两种模式,这通常是不希望禁用它们。