QMessageLogContext的字段(例如:文件,函数,行)为空或为零。

11

我有两台机器,使用的是Debian 7.8 64/32位操作系统。我创建了一个简单的程序,在main.cpp文件中:

void action(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    static QFile logFile("logfile.log");
    static QTextStream ts(&logFile);
    if(logFile.open(QFile::ReadWrite | QFile::Append))
    {
      ts << context.file << ":" << context.line << ":"
         << context.function << ": " << msg << endl;
      logFile.close();
    }
}

int main(int argc, char* argv[])
{
    QCoreApplication app(argc, argv);
    qInstallMessageHandler(action);
    qDebug() << "this is some log";
    return app.exec();
}
在"logfile.log"文件中,我必须看到:
main.cpp:30:int main(int, char**): this is some log 

但在Debian 7.8 64位Qt 5.4.1 GCC 4.6.1 64位上,我只看到:

:0:: this is some log 

我还在Debian 7.8 32位Qt 5.3.1 GCC 4.6.1 32位上进行了测试,运行良好。
这是Qt 5.4.1 (64位)的一个错误吗?还是我漏掉了什么?
你能帮我吗?

1个回答

14

很可能,您正在使用发布版本。默认情况下,Qt不会在发布模式下填充这些字段。您可以通过按照此答案中所述的定义QT_MESSAGELOGCONTEXT来覆盖此设置并启用上下文日志记录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接