X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fquassel.cpp;h=e54d8946babbb6d0ef3e28d3f752620c9d943309;hp=dd6c5e7047d81231e78cdc8e9ab32af02c5754f4;hb=034708a59ca1ee3195263a90941a2b145c520fef;hpb=fadb064c526843a7f6f6e4532372eee009fa3c3b diff --git a/src/common/quassel.cpp b/src/common/quassel.cpp index dd6c5e70..e54d8946 100644 --- a/src/common/quassel.cpp +++ b/src/common/quassel.cpp @@ -46,6 +46,7 @@ CliParser *Quassel::_cliParser = 0; Quassel::RunMode Quassel::_runMode; bool Quassel::_initialized = false; bool Quassel::DEBUG = false; +QString Quassel::_coreDumpFileName; Quassel::Quassel() { Q_INIT_RESOURCE(i18n); @@ -224,15 +225,33 @@ void Quassel::handleSignal(int sig) { } } +void Quassel::logFatalMessage(const char *msg) { +#ifndef Q_OS_MAC + QFile dumpFile(coreDumpFileName()); + dumpFile.open(QIODevice::WriteOnly); + QTextStream dumpStream(&dumpFile); +#else + QTextStream dumpStream(stderr); +#endif + + dumpStream << "Fatal: " << msg << '\n'; + dumpStream.flush(); + + qInstallMsgHandler(0); + abort(); +} + void Quassel::handleCrash() { #ifdef BUILD_CRASHHANDLER void* callstack[128]; int i, frames = backtrace(callstack, 128); - QFile dumpFile(QString("Quassel-Crash-%1").arg(QDateTime::currentDateTime().toString("yyyyMMdd-hhmm.log"))); - dumpFile.open(QIODevice::WriteOnly); + QFile dumpFile(coreDumpFileName()); + dumpFile.open(QIODevice::Append); QTextStream dumpStream(&dumpFile); + dumpStream << "Quassel IRC: " << _buildInfo.baseVersion << ' ' << _buildInfo.commitHash << '\n'; + for (i = 0; i < frames; ++i) { Dl_info info; dladdr (callstack[i], &info); @@ -287,3 +306,10 @@ void Quassel::handleCrash() { exit(27); #endif /* BUILD_CRASHHANDLER */ } + +const QString &Quassel::coreDumpFileName() { + if(_coreDumpFileName.isEmpty()) + _coreDumpFileName = QString("Quassel-Crash-%1.log").arg(QDateTime::currentDateTime().toString("yyyyMMdd-hhmm")); + + return _coreDumpFileName; +}