Improve time stamps in debug trace and dump settings to debug file

git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@6582 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
Bill Somerville 2016-04-06 17:10:54 +00:00
parent b9df9eff69
commit 79a2a65030

View File

@ -18,6 +18,7 @@
#include <QStringList> #include <QStringList>
#include <QMessageBox> #include <QMessageBox>
#include <QLockFile> #include <QLockFile>
#include <QStack>
#if QT_VERSION >= 0x050200 #if QT_VERSION >= 0x050200
#include <QCommandLineParser> #include <QCommandLineParser>
@ -43,10 +44,39 @@ namespace
qsrand (seed); // this is good for rand() as well qsrand (seed); // this is good for rand() as well
} }
} seeding; } seeding;
class MessageTimestamper
{
public:
MessageTimestamper ()
{
prior_handlers_.push (qInstallMessageHandler (message_handler));
}
~MessageTimestamper ()
{
if (prior_handlers_.size ()) qInstallMessageHandler (prior_handlers_.pop ());
}
private:
static void message_handler (QtMsgType type, QMessageLogContext const& context, QString const& msg)
{
QtMessageHandler handler {prior_handlers_.top ()};
if (handler)
{
handler (type, context,
QDateTime::currentDateTimeUtc ().toString ("yy-MM-ddTHH:mm:ss.zzzZ: ") + msg);
}
}
static QStack<QtMessageHandler> prior_handlers_;
};
QStack<QtMessageHandler> MessageTimestamper::prior_handlers_;
} }
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
// Add timestamps to all debug messages
MessageTimestamper message_timestamper;
init_random_seed (); init_random_seed ();
register_types (); // make the Qt magic happen register_types (); // make the Qt magic happen
@ -171,11 +201,30 @@ int main(int argc, char *argv[])
} }
#if WSJT_QDEBUG_TO_FILE #if WSJT_QDEBUG_TO_FILE
// // open a trace file // Open a trace file
TraceFile trace_file {QDir {QStandardPaths::writableLocation (QStandardPaths::TempLocation)}.absoluteFilePath (a.applicationName () + "_trace.log")}; TraceFile trace_file {QDir {QStandardPaths::writableLocation (QStandardPaths::TempLocation)}.absoluteFilePath (a.applicationName () + "_trace.log")};
// announce to trace file // announce to trace file and dump settings
qDebug () << program_title (revision ()) + " - Program startup"; qDebug () << program_title (revision ()) + " - Program startup";
qDebug () << "++++++++++++++++++++++++++++ Settings ++++++++++++++++++++++++++++";
for (auto const& key: settings.allKeys ())
{
auto const& value = settings.value (key);
if (value.canConvert<QVariantList> ())
{
auto const sequence = value.value<QSequentialIterable> ();
qDebug ().nospace () << key << ": ";
for (auto const& item: sequence)
{
qDebug ().nospace () << '\t' << item;
}
}
else
{
qDebug ().nospace () << key << ": " << value;
}
}
qDebug () << "---------------------------- Settings ----------------------------";
#endif #endif
// Create and initialize shared memory segment // Create and initialize shared memory segment
@ -207,9 +256,9 @@ int main(int argc, char *argv[])
).toBool () ? 1u : 4u; ).toBool () ? 1u : 4u;
} }
// run the application UI
MainWindow w(multiple, &settings, &mem_jt9, downSampleFactor, new QNetworkAccessManager {&a}); MainWindow w(multiple, &settings, &mem_jt9, downSampleFactor, new QNetworkAccessManager {&a});
w.show(); w.show();
QObject::connect (&a, SIGNAL (lastWindowClosed()), &a, SLOT (quit())); QObject::connect (&a, SIGNAL (lastWindowClosed()), &a, SLOT (quit()));
return a.exec(); return a.exec();
} }