Qt qInstallMessageHandler()不返回fileline、filename和functionme
我让qInstallMessageHandler()将所有日志提供给外部文件,其中主要有行数错误,因此我可以查看错误的来源:Qt qInstallMessageHandler()不返回fileline、filename和functionme,qt,debugging,logging,qt5,Qt,Debugging,Logging,Qt5,我让qInstallMessageHandler()将所有日志提供给外部文件,其中主要有行数错误,因此我可以查看错误的来源: #include <QQmlApplicationEngine> #include <QGuiApplication> #include <QtQml> #include <QCoreApplication> #include <QtCore> #include <QNetworkAccessManager
#include <QQmlApplicationEngine>
#include <QGuiApplication>
#include <QtQml>
#include <QCoreApplication>
#include <QtCore>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QtSql>
#include <QtDebug>
#include <QTextStream>
#include "mssql.h"
#include "cryption.h"
#include "led.h"
void myMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
QDateTime datatime = QDateTime::currentDateTime();
QString formattedDateTime = datatime.toString("dd.MM.yyyy hh:mm:ss");
QByteArray localMsg = msg.toLocal8Bit();
const char *file = context.file ? context.file : "";
const char *function = context.function ? context.function : "";
QString txt;
switch (type) {
case QtDebugMsg:
txt = QString("%1: Debug: %2, file: %3, line: %4, function: %5").arg(formattedDateTime).arg(localMsg.constData()).arg(file).arg(context.line).arg(function);
break;
case QtInfoMsg:
txt = QString("%1: Info: %2, file: %3, line: %4, function: %5").arg(formattedDateTime).arg(localMsg.constData()).arg(file).arg(context.line).arg(function);
break;
case QtWarningMsg:
txt = QString("%1: Warning: %2, file: %3, line: %4, function: %5").arg(formattedDateTime).arg(localMsg.constData()).arg(file).arg(context.line).arg(function);
break;
case QtCriticalMsg:
txt = QString("%1: Critical: %2, file: %3, line: %4, function: %5").arg(formattedDateTime).arg(localMsg.constData()).arg(file).arg(context.line).arg(function);
break;
case QtFatalMsg:
txt = QString("%1: Fatal: %2, file: %3, line: %4, function: %5").arg(formattedDateTime).arg(localMsg.constData()).arg(file).arg(context.line).arg(function);
break;
}
QFile outFile("debug.log");
outFile.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text);
QTextStream ts(&outFile);
ts.setCodec("UTF-8");
ts << txt << endl;
}
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
qInstallMessageHandler(myMessageHandler);
qmlRegisterType<MSSQL>("MSSQL", 1, 0, "MSSQL");
qmlRegisterType<LED>("LED", 1, 0, "LED");
QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
// Sets path for SQLite
engine.setOfflineStoragePath(QDir::currentPath());
return app.exec();
}
有没有什么想法可以让我知道错误是从哪里来的?文件名也是需要的,但如果函数名不可能,我可以不使用它。如果在调试模式下编译,则不会记录该信息。
如果您将QtCreator用作IDE,则可以使用显示在左下角任务栏中项目按钮的菜单(底部第四个按钮,带有显示图标的按钮)更改生成类型。
如果从命令行使用qmake,请执行“qmake CONFIG+=“debug”。
需要注意的一点是,您正在谈论的调试消息来自qt库本身,因此,如果您以某种标准方式进行操作,您就可以了,但是如果您是手动链接还是使用自定义脚本进行链接,请记住,信息取决于您是链接到qtlibs的“调试”版本还是“发布”版本。QtLibs系列的调试版本的后缀为“d”。来自:
“注意:默认情况下,此信息仅记录在调试版本中。您可以通过定义QT_MESSAGELOGCONTEXT或QT_NO_MESSAGELOGCONTEXT”
来显式覆盖此信息。
30.06.2020 10:11:03: Debug: Terminal DB Error: No INI File Found!, file: , line: 0, function:
30.06.2020 10:11:16: Warning: QSqlDatabasePrivate::removeDatabase: connection 'Terminal_DB_External' is still in use, all queries will cease to work., file: , line: 0, function:
30.06.2020 10:11:16: Warning: QSqlDatabasePrivate::removeDatabase: connection 'ANeT_DB' is still in use, all queries will cease to work., file: , line: 0, function:
30.06.2020 10:11:16: Warning: QSqlDatabasePrivate::removeDatabase: connection 'Terminal_DB_External' is still in use, all queries will cease to work., file: , line: 0, function:
30.06.2020 10:11:16: Warning: QSqlDatabasePrivate::removeDatabase: connection 'ANeT_DB' is still in use, all queries will cease to work., file: , line: 0, function:
30.06.2020 10:11:16: Debug: Terminal DB Error_1: "Driver not loaded Driver not loaded", file: , line: 0, function: