From 9fe7f9aa52f10e7b896a7c24ba3b10602dfa63e5 Mon Sep 17 00:00:00 2001 From: ksuprynowicz Date: Sun, 18 Dec 2022 10:35:26 +0100 Subject: [PATCH] Some V8 debuging messages --- libraries/script-engine/src/v8/ScriptEngineV8.cpp | 9 +++++++++ libraries/script-engine/src/v8/ScriptEngineV8.h | 2 ++ .../script-engine/src/v8/ScriptEngineV8_cast.cpp | 3 +++ .../script-engine/src/v8/ScriptValueV8Wrapper.cpp | 13 ++++++++++--- 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/libraries/script-engine/src/v8/ScriptEngineV8.cpp b/libraries/script-engine/src/v8/ScriptEngineV8.cpp index f174da3823..ffd9dc0d82 100644 --- a/libraries/script-engine/src/v8/ScriptEngineV8.cpp +++ b/libraries/script-engine/src/v8/ScriptEngineV8.cpp @@ -1410,3 +1410,12 @@ void ScriptEngineV8::compileTest() { Q_ASSERT(false); } } + +/*QStringList ScriptEngineV8::getCurrentStackTrace() { + v8::Local stackTrace = v8::StackTrace::CurrentStackTrace(_v8Isolate, 100); + QStringList backtrace; + for (int n = 0; n < stackTrace->GetFrameCount(); n++) { + v8::Local stackFrame = stackTrace->GetFrame(_v8Isolate, n); + + } +}*/ \ No newline at end of file diff --git a/libraries/script-engine/src/v8/ScriptEngineV8.h b/libraries/script-engine/src/v8/ScriptEngineV8.h index fb309b0710..7e72cede91 100644 --- a/libraries/script-engine/src/v8/ScriptEngineV8.h +++ b/libraries/script-engine/src/v8/ScriptEngineV8.h @@ -180,6 +180,8 @@ public: // not for public use, but I don't like how Qt strings this along with p v8::EscapableHandleScope handleScope(_v8Isolate); return handleScope.Escape(_v8Context.Get(_v8Isolate)); } + // Useful for debugging + //QStringList getCurrentStackTrace(); using ObjectWrapperMap = QMap>; mutable QMutex _qobjectWrapperMapProtect; diff --git a/libraries/script-engine/src/v8/ScriptEngineV8_cast.cpp b/libraries/script-engine/src/v8/ScriptEngineV8_cast.cpp index e71b7996d2..2924ae9290 100644 --- a/libraries/script-engine/src/v8/ScriptEngineV8_cast.cpp +++ b/libraries/script-engine/src/v8/ScriptEngineV8_cast.cpp @@ -375,6 +375,9 @@ bool ScriptEngineV8::castValueToVariant(const V8ScriptValue& v8Val, QVariant& de } } // V8TODO + errorMessage = QString() + "Conversion failure: " + QString(*v8::String::Utf8Value(_v8Isolate, val->ToDetailString(getConstContext()).ToLocalChecked())) + + "to variant. Destination type: " + QMetaType::typeName(destTypeId); + qDebug() << errorMessage; Q_ASSERT(false); //dest = val->ToVariant(); break; diff --git a/libraries/script-engine/src/v8/ScriptValueV8Wrapper.cpp b/libraries/script-engine/src/v8/ScriptValueV8Wrapper.cpp index c4a2600540..04bff957f9 100644 --- a/libraries/script-engine/src/v8/ScriptValueV8Wrapper.cpp +++ b/libraries/script-engine/src/v8/ScriptValueV8Wrapper.cpp @@ -206,7 +206,7 @@ ScriptValue ScriptValueV8Wrapper::property(quint32 arrayIndex, const ScriptValue return ScriptValue(new ScriptValueV8Wrapper(_engine, std::move(result))); } } - qCritical() << "Failed to get property, parent of value: " << arrayIndex << " is not a V8 object, reported type: " << QString(*v8::String::Utf8Value(isolate, _value.constGet()->TypeOf(isolate))); + qDebug() << "Failed to get property, parent of value: " << arrayIndex << " is not a V8 object, reported type: " << QString(*v8::String::Utf8Value(isolate, _value.constGet()->TypeOf(isolate))); return _engine->undefinedValue(); /*v8::Local nullValue = v8::Null(_engine->getIsolate()); V8ScriptValue nullScriptValue(_engine->getIsolate(), std::move(nullValue)); @@ -241,7 +241,14 @@ void ScriptValueV8Wrapper::setProperty(const QString& name, const ScriptValue& v qDebug(scriptengine) << "Failed to set property"; } } else { - qDebug(scriptengine) << "Failed to set property - parent is not an object"; + v8::Local details; + QString detailsString(""); + if(_value.get()->ToDetailString(_engine->getContext()).ToLocal(&details)) { + v8::String::Utf8Value utf8Value(isolate,details); + detailsString = *utf8Value; + } + qDebug(scriptengine) << "Failed to set property:" + name + " - parent is not an object. Parent details: " + " Type: " + QString(*v8::String::Utf8Value(isolate, _value.constGet()->TypeOf(isolate))); + qDebug(scriptengine) << _engine->currentContext()->backtrace(); } //V8TODO: what about flags? //_value.setProperty(name, unwrapped, (V8ScriptValue::PropertyFlags)(int)flags); @@ -260,7 +267,7 @@ void ScriptValueV8Wrapper::setProperty(quint32 arrayIndex, const ScriptValue& va qDebug(scriptengine) << "Failed to set property"; } } else { - qDebug(scriptengine) << "Failed to set property - parent is not an object"; + qDebug(scriptengine) << "Failed to set property: " + QString(arrayIndex) + " - parent is not an object"; } //V8TODO: what about flags? //_value.setProperty(arrayIndex, unwrapped, (V8ScriptValue::PropertyFlags)(int)flags);