History

Add logging of signal slot exceptions in ScriptEngine

Ryan Huffman committed 10 years ago

Commit f60cd091 parent ec8a2ae1 file · +10 −1Browse files

Showing the changes to libraries/script-engine/src/ScriptEngine.cpp (1 of 1 file). Show all

Unified · Split

libraries/script-engine/src/ScriptEngine.cpp+10−1
@@ -50,6 +50,8 @@ · 49 unmodified lines
5050
5151 #include "MIDIEvent.h"
5252
53+static const QString SCRIPT_EXCEPTION_FORMAT = "[UncaughtException] %1 in %2:%3";
54+
5355 Q_DECLARE_METATYPE(QScriptEngine::FunctionSignature)
5456 static int functionSignatureMetaID = qRegisterMetaType<QScriptEngine::FunctionSignature>();
5557
@@ -111,7 +113,7 @@ static bool hadUncaughtExceptions(QScriptEngine& engine, const QString& fileName · 55 unmodified lines
111113 const auto line = QString::number(engine.uncaughtExceptionLineNumber());
112114 engine.clearExceptions();
113115
114− auto message = QString("[UncaughtException] %1 in %2:%3").arg(exception, fileName, line);
116+ auto message = QString(SCRIPT_EXCEPTION_FORMAT).arg(exception, fileName, line);
115117 if (!backtrace.empty()) {
116118 static const auto lineSeparator = "\n ";
117119 message += QString("\n[Backtrace]%1%2").arg(lineSeparator, backtrace.join(lineSeparator));
@@ -132,6 +134,13 @@ ScriptEngine::ScriptEngine(const QString& scriptContents, const QString& fileNam · 14 unmodified lines
132134 _allScriptsMutex.lock();
133135 _allKnownScriptEngines.insert(this);
134136 _allScriptsMutex.unlock();
137+
138+ connect(this, &QScriptEngine::signalHandlerException, this, [](const QScriptValue& exception) {
139+ auto fileName = exception.property("fileName").toString();
140+ auto lineNumber = exception.property("lineNumber").toString();
141+ auto message = QString(SCRIPT_EXCEPTION_FORMAT).arg(exception.toString(), fileName, lineNumber);
142+ qCWarning(scriptengine) << qPrintable(message);
143+ });
135144 }
136145
137146 ScriptEngine::~ScriptEngine() {