From f60cd09b451b76a5aab9e637ab0a2fa649ac8f99 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Sun, 3 Jan 2016 14:13:16 -0800 Subject: [PATCH 1/2] Add logging of signal slot exceptions in ScriptEngine --- libraries/script-engine/src/ScriptEngine.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index ef448e93f0..f60bb41955 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -50,6 +50,8 @@ #include "MIDIEvent.h" +static const QString SCRIPT_EXCEPTION_FORMAT = "[UncaughtException] %1 in %2:%3"; + Q_DECLARE_METATYPE(QScriptEngine::FunctionSignature) static int functionSignatureMetaID = qRegisterMetaType(); @@ -111,7 +113,7 @@ static bool hadUncaughtExceptions(QScriptEngine& engine, const QString& fileName const auto line = QString::number(engine.uncaughtExceptionLineNumber()); engine.clearExceptions(); - auto message = QString("[UncaughtException] %1 in %2:%3").arg(exception, fileName, line); + auto message = QString(SCRIPT_EXCEPTION_FORMAT).arg(exception, fileName, line); if (!backtrace.empty()) { static const auto lineSeparator = "\n "; message += QString("\n[Backtrace]%1%2").arg(lineSeparator, backtrace.join(lineSeparator)); @@ -132,6 +134,13 @@ ScriptEngine::ScriptEngine(const QString& scriptContents, const QString& fileNam _allScriptsMutex.lock(); _allKnownScriptEngines.insert(this); _allScriptsMutex.unlock(); + + connect(this, &QScriptEngine::signalHandlerException, this, [](const QScriptValue& exception) { + auto fileName = exception.property("fileName").toString(); + auto lineNumber = exception.property("lineNumber").toString(); + auto message = QString(SCRIPT_EXCEPTION_FORMAT).arg(exception.toString(), fileName, lineNumber); + qCWarning(scriptengine) << qPrintable(message); + }); } ScriptEngine::~ScriptEngine() { From 810da77abe4866bb57512d4d70c8e633c99dd921 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 4 Jan 2016 10:34:55 -0800 Subject: [PATCH 2/2] Update ScriptEngine signal exception handling to call hadUncaughtExceptions --- libraries/script-engine/src/ScriptEngine.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index f60bb41955..6e37ab056e 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -135,11 +135,8 @@ ScriptEngine::ScriptEngine(const QString& scriptContents, const QString& fileNam _allKnownScriptEngines.insert(this); _allScriptsMutex.unlock(); - connect(this, &QScriptEngine::signalHandlerException, this, [](const QScriptValue& exception) { - auto fileName = exception.property("fileName").toString(); - auto lineNumber = exception.property("lineNumber").toString(); - auto message = QString(SCRIPT_EXCEPTION_FORMAT).arg(exception.toString(), fileName, lineNumber); - qCWarning(scriptengine) << qPrintable(message); + connect(this, &QScriptEngine::signalHandlerException, this, [this](const QScriptValue& exception) { + hadUncaughtExceptions(*this, _fileNameString); }); }