History

Fix script error logging

ksuprynowicz committed 3 years ago

Commit 8dc776a1 parent 3164e715 files · +44 −14Browse files

Showing the changes to libraries/script-engine/src/v8/ScriptEngineV8.cpp (1 of 5 files). Show all

Unified · Split

libraries/script-engine/src/v8/ScriptEngineV8.cpp+22−7
@@ -634,9 +634,13 @@ ScriptValue ScriptEngineV8::evaluateInClosure(const ScriptValue& _closure, · 633 unmodified lines
634634 v8::Local<v8::Value> v8Result;
635635 if (!maybeResult.ToLocal(&v8Result)) {
636636 v8::String::Utf8Value utf8Value(getIsolate(), tryCatch.Exception());
637− QString errorMessage = QString(*utf8Value);
638− qCWarning(scriptengine_v8) << __FUNCTION__ << "---------- hasCaught:" << errorMessage;
639− qCWarning(scriptengine_v8) << __FUNCTION__ << "---------- tryCatch details:" << formatErrorMessageFromTryCatch(tryCatch);
637+ QString errorMessage = QString(__FUNCTION__) + " hasCaught:" + QString(*utf8Value) + "\n"
638+ + "tryCatch details:" + formatErrorMessageFromTryCatch(tryCatch);
639+ if (_manager) {
640+ _manager->scriptErrorMessage(errorMessage);
641+ } else {
642+ qWarning(scriptengine_v8) << errorMessage;
643+ }
640644 }
641645
642646 if (hasUncaughtException()) {
@@ -685,6 +689,12 @@ ScriptValue ScriptEngineV8::evaluate(const QString& sourceCode, const QString& f · 42 unmodified lines
685689 {
686690 v8::TryCatch tryCatch(getIsolate());
687691 if (!v8::Script::Compile(getContext(), v8::String::NewFromUtf8(getIsolate(), sourceCode.toStdString().c_str()).ToLocalChecked(), &scriptOrigin).ToLocal(&script)) {
692+ QString errorMessage(QString("Error while compiling script: \"") + fileName + QString("\" ") + formatErrorMessageFromTryCatch(tryCatch));
693+ if (_manager) {
694+ _manager->scriptErrorMessage(errorMessage);
695+ } else {
696+ qDebug(scriptengine_v8) << errorMessage;
697+ }
688698 setUncaughtException(tryCatch, "Error while compiling script");
689699 _evaluatingCounter--;
690700 return nullValue();
@@ -697,7 +707,12 @@ ScriptValue ScriptEngineV8::evaluate(const QString& sourceCode, const QString& f · 6 unmodified lines
697707 Q_ASSERT(tryCatchRun.HasCaught());
698708 auto runError = tryCatchRun.Message();
699709 ScriptValue errorValue(new ScriptValueV8Wrapper(this, V8ScriptValue(this, runError->Get())));
700− qCDebug(scriptengine_v8) << "Running script: \"" << fileName << "\" " << formatErrorMessageFromTryCatch(tryCatchRun);
710+ QString errorMessage(QString("Running script: \"") + fileName + QString("\" ") + formatErrorMessageFromTryCatch(tryCatchRun));
711+ if (_manager) {
712+ _manager->scriptErrorMessage(errorMessage);
713+ } else {
714+ qDebug(scriptengine_v8) << errorMessage;
715+ }
701716 setUncaughtException(tryCatchRun, "script evaluation");
702717
703718 _evaluatingCounter--;
@@ -749,7 +764,7 @@ void ScriptEngineV8::setUncaughtException(const v8::TryCatch &tryCatch, const QS · 45 unmodified lines
749764 if (backtraceV8String->IsString()) {
750765 if (v8::Local<v8::String>::Cast(backtraceV8String)->Length() > 0) {
751766 v8::String::Utf8Value backtraceUtf8Value(getIsolate(), backtraceV8String);
752− QString errorBacktrace = *backtraceUtf8Value;
767+ QString errorBacktrace = QString(*backtraceUtf8Value).replace("\\n","\n");
753768 ex->backtrace = errorBacktrace.split("\n");
754769
755770 }
@@ -790,14 +805,14 @@ QString ScriptEngineV8::formatErrorMessageFromTryCatch(v8::TryCatch &tryCatch) { · 34 unmodified lines
790805 if (backtraceV8String->IsString()) {
791806 if (v8::Local<v8::String>::Cast(backtraceV8String)->Length() > 0) {
792807 v8::String::Utf8Value backtraceUtf8Value(getIsolate(), backtraceV8String);
793− errorBacktrace = *backtraceUtf8Value;
808+ errorBacktrace = QString(*backtraceUtf8Value).replace("\\n","\n");
794809 }
795810 }
796811 }
797812 QTextStream resultStream(&result);
798813 resultStream << "failed on line " << errorLineNumber << " column " << errorColumnNumber << " with message: \"" << errorMessage <<"\" backtrace: " << errorBacktrace;
799814 }
800− return result;
815+ return result.replace("\\n", "\n");
801816 }
802817
803818 v8::Local<v8::ObjectTemplate> ScriptEngineV8::getObjectProxyTemplate() {